It is fragile, as there is no way for the revision machinery to say "but now I want to traverse the graph ignoring the graft file" e.g. when pushing commits to a remote repository (which, as a consequence, can miss commits). And we already have a better solution with `git replace --graft <comit> [<parent>...]`. Changes since v3: - The argv_array_split() declaration now has a clear comment indicating that it does not perform any "un-quoting" but goes purely by whitespace. - Fixed t6050 under GETTEXT_POISON. Johannes Schindelin (11): argv_array: offer to split a string by whitespace commit: Let the callback of for_each_mergetag return on error replace: avoid using die() to indicate a bug replace: "libify" create_graft() and callees replace: introduce --convert-graft-file Add a test for `git replace --convert-graft-file` Deprecate support for .git/info/grafts filter-branch: stop suggesting to use grafts technical/shallow: describe the relationship with replace refs technical/shallow: describe why shallow cannot use replace refs Remove obsolete script to convert grafts to replace refs Documentation/git-filter-branch.txt | 2 +- Documentation/git-replace.txt | 11 +- Documentation/technical/shallow.txt | 24 ++- advice.c | 2 + advice.h | 1 + argv-array.c | 20 +++ argv-array.h | 2 + builtin/replace.c | 189 +++++++++++++++------- commit.c | 18 ++- commit.h | 4 +- contrib/convert-grafts-to-replace-refs.sh | 28 ---- log-tree.c | 13 +- t/t6001-rev-list-graft.sh | 9 ++ t/t6050-replace.sh | 20 +++ 14 files changed, 236 insertions(+), 107 deletions(-) delete mode 100755 contrib/convert-grafts-to-replace-refs.sh base-commit: fe0a9eaf31dd0c349ae4308498c33a5c3794b293 Published-As: https://github.com/dscho/git/releases/tag/deprecate-grafts-v4 Fetch-It-Via: git fetch https://github.com/dscho/git deprecate-grafts-v4 Interdiff vs v3: diff --git a/argv-array.h b/argv-array.h index c7c397695df..750c30d2f2c 100644 --- a/argv-array.h +++ b/argv-array.h @@ -19,6 +19,7 @@ LAST_ARG_MUST_BE_NULL void argv_array_pushl(struct argv_array *, ...); void argv_array_pushv(struct argv_array *, const char **); void argv_array_pop(struct argv_array *); +/* Splits by whitespace; does not handle quoted arguments! */ void argv_array_split(struct argv_array *, const char *); void argv_array_clear(struct argv_array *); const char **argv_array_detach(struct argv_array *); diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh index 8a3ee7c3db9..bed86a0af3d 100755 --- a/t/t6050-replace.sh +++ b/t/t6050-replace.sh @@ -460,8 +460,8 @@ test_expect_success '--convert-graft-file' ' test_when_finished "rm -f .git/info/grafts" && echo $EMPTY_BLOB $EMPTY_TREE >.git/info/grafts && test_must_fail git replace --convert-graft-file 2>err && - grep "$EMPTY_BLOB $EMPTY_TREE" err && - grep "$EMPTY_BLOB $EMPTY_TREE" .git/info/grafts + test_i18ngrep "$EMPTY_BLOB $EMPTY_TREE" err && + test_i18ngrep "$EMPTY_BLOB $EMPTY_TREE" .git/info/grafts ' test_done -- 2.17.0.windows.1.15.gaa56ade3205