Message ID | 2c988c7b-0efe-4222-4a43-8124fe1a9da6@web.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | 2.36 fast-export regression fix | expand |
René Scharfe <l.s.r@web.de> writes: > e900d494dc (diff: add an API for deferred freeing, 2021-02-11) added a > way to allow reusing diffopts: the no_free bit. 244c27242f (diff.[ch]: > have diff_free() call clear_pathspec(opts.pathspec), 2022-02-16) made > that mechanism mandatory. > > git fast-export doesn't set no_free, so path limiting stopped working > after the first commit. Set the flag and add a basic test to make sure > only changes to the specified files are exported. > > Signed-off-by: René Scharfe <l.s.r@web.de> > --- Both format-patch fix and this one look good to me. We have UNLEAK() in format-patch so that the fix will not result in additional false positives from the leak checker. But this one, we didn't have UNLEAK() so this may start tickling the leak checker again. We may need to add UNLEAK() at some point. Stopping a leak checker from complaining about a known singleton leak that is at the top-level (i.e. does not become bigger with the data) by spending extra cycles is pointless, compared to using UNLEAK() to do the same, and it is doubly misguided if it breaks the behaviour X-<. Will queue both, thanks.
diff --git a/builtin/fast-export.c b/builtin/fast-export.c index a7d72697fb..1355b5a96d 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -1261,6 +1261,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix) revs.diffopt.format_callback = show_filemodify; revs.diffopt.format_callback_data = &paths_of_changed_objects; revs.diffopt.flags.recursive = 1; + revs.diffopt.no_free = 1; while ((commit = get_revision(&revs))) handle_commit(commit, &revs, &paths_of_changed_objects); diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh index 7b7a18dd2c..fc99703fc5 100755 --- a/t/t9350-fast-export.sh +++ b/t/t9350-fast-export.sh @@ -500,6 +500,13 @@ test_expect_success 'path limiting with import-marks does not lose unmodified fi grep file0 actual ' +test_expect_success 'path limiting works' ' + git fast-export simple -- file >actual && + sed -ne "s/^M .* //p" <actual | sort -u >actual.files && + echo file >expect && + test_cmp expect actual.files +' + test_expect_success 'avoid corrupt stream with non-existent mark' ' test_create_repo avoid_non_existent_mark && (
e900d494dc (diff: add an API for deferred freeing, 2021-02-11) added a way to allow reusing diffopts: the no_free bit. 244c27242f (diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec), 2022-02-16) made that mechanism mandatory. git fast-export doesn't set no_free, so path limiting stopped working after the first commit. Set the flag and add a basic test to make sure only changes to the specified files are exported. Signed-off-by: René Scharfe <l.s.r@web.de> --- builtin/fast-export.c | 1 + t/t9350-fast-export.sh | 7 +++++++ 2 files changed, 8 insertions(+) -- 2.35.3