M libarch/inode-sig.c M libarch/changeset-report.c * modified files --- orig/libarch/changeset-report.c +++ mod/libarch/changeset-report.c @@ -84,6 +84,7 @@ assoc_table mod_file_loc_of = 0; assoc_table mod_file_id_of = 0; + struct rel_join_output_spec *output_spec = 0; orig_files_index_path = file_name_in_vicinity (0, path, "orig-files-index"); @@ -139,13 +140,21 @@ mod_dirs_by_name = rel_copy_table (report->mod_dirs_index); rel_sort_table_by_field (0, mod_dirs_by_name, 0); - removed_dirs_index = rel_join (1, rel_join_output (1,0, 1,1, -1), 1, 1, report->orig_dirs_index, report->mod_dirs_index); - added_dirs_index = rel_join (2, rel_join_output (2,0, 2,1, -1), 1, 1, report->orig_dirs_index, report->mod_dirs_index); + output_spec = rel_join_output (1,0, 1,1, -1); + removed_dirs_index = rel_join (1, output_spec, 1, 1, report->orig_dirs_index, report->mod_dirs_index); + ar_free (&output_spec, 0); + output_spec = rel_join_output (2,0, 2,1, -1); + added_dirs_index = rel_join (2, output_spec, 1, 1, report->orig_dirs_index, report->mod_dirs_index); + ar_free (&output_spec, 0); t = rel_copy_table (removed_dirs_index); rel_sort_table_by_field (0, t, 0); - report->removed_dirs = rel_join (-1, rel_join_output (1,0, 1,1, 2,1, -1), 0, 0, t, original_only_dir_metadata); - t2 = rel_join (1, rel_join_output (1,0, 1,1, 1,0, -1), 0, 0, t, original_only_dir_metadata); + output_spec = rel_join_output (1,0, 1,1, 2,1, -1); + report->removed_dirs = rel_join (-1, output_spec, 0, 0, t, original_only_dir_metadata); + ar_free (&output_spec, 0); + output_spec = rel_join_output (1,0, 1,1, 1,0, -1); + t2 = rel_join (1, output_spec, 0, 0, t, original_only_dir_metadata); + ar_free (&output_spec, 0); rel_append_x (&report->removed_dirs, t2); rel_sort_table_by_field (0, report->removed_dirs, 0); rel_free_table (t); @@ -154,8 +163,12 @@ t = rel_copy_table (added_dirs_index); rel_sort_table_by_field (0, t, 0); - report->added_dirs = rel_join (-1, rel_join_output (1,0, 1,1, 2,1, -1), 0, 0, t, modified_only_dir_metadata); - t2 = rel_join (1, rel_join_output (1,0, 1,1, 1,0, -1), 0, 0, t, modified_only_dir_metadata); + output_spec = rel_join_output (1,0, 1,1, 2,1, -1); + report->added_dirs = rel_join (-1, output_spec, 0, 0, t, modified_only_dir_metadata); + ar_free (&output_spec, 0); + output_spec = rel_join_output (1,0, 1,1, 1,0, -1); + t2 = rel_join (1, output_spec, 0, 0, t, modified_only_dir_metadata); + ar_free (&output_spec, 0); rel_append_x (&report->added_dirs, t2); rel_sort_table_by_field (0, report->added_dirs, 0); rel_free_table (t); @@ -174,8 +187,12 @@ * Removed and added filenames and symlinks */ - removed_files_and_symlinks_index = rel_join (1, rel_join_output (1,0, 1,1, -1), 1, 1, report->orig_files_index, report->mod_files_index); - added_files_and_symlinks_index = rel_join (2, rel_join_output (2,0, 2,1, -1), 1, 1, report->orig_files_index, report->mod_files_index); + output_spec = rel_join_output (1,0, 1,1, -1); + removed_files_and_symlinks_index = rel_join (1, output_spec, 1, 1, report->orig_files_index, report->mod_files_index); + ar_free (&output_spec, 0); + output_spec = rel_join_output (2,0, 2,1, -1); + added_files_and_symlinks_index = rel_join (2, output_spec, 1, 1, report->orig_files_index, report->mod_files_index); + ar_free (&output_spec, 0); report_unique_files_and_symlinks (&report->removed_files, &report->removed_symlinks, removed_files_and_symlinks_index, @@ -188,9 +205,12 @@ /**************************************************************** * renamed files and dirs */ - - common_dirs_index = rel_join (-1, rel_join_output (1,0, 2,0, 1,1, -1), 1, 1, report->orig_dirs_index, report->mod_dirs_index); - common_files_index = rel_join (-1, rel_join_output (1,0, 2,0, 1,1, -1), 1, 1, report->orig_files_index, report->mod_files_index); + output_spec = rel_join_output (1,0, 2,0, 1,1, -1); + common_dirs_index = rel_join (-1, output_spec, 1, 1, report->orig_dirs_index, report->mod_dirs_index); + ar_free (&output_spec, 0); + output_spec = rel_join_output (1,0, 2,0, 1,1, -1); + common_files_index = rel_join (-1, output_spec, 1, 1, report->orig_files_index, report->mod_files_index); + ar_free (&output_spec, 0); find_renames (&report->renamed_dirs, common_dirs_index, orig_dir_id_of, mod_dir_id_of); find_renames (&report->renamed_files, common_files_index, orig_dir_id_of, mod_dir_id_of); --- orig/libarch/inode-sig.c +++ mod/libarch/inode-sig.c @@ -213,6 +213,7 @@ if (!S_ISDIR (stat_buf->st_mode) && !S_ISLNK (stat_buf->st_mode)) rel_add_records (answer, rel_make_record (id, signature, 0), 0); + lim_free(0, signature); }