diff options
-rw-r--r-- | Documentation/git-replace.txt | 24 | ||||
-rw-r--r-- | cache.h | 1 | ||||
-rw-r--r-- | connect.c | 1 | ||||
-rw-r--r-- | environment.c | 2 | ||||
-rw-r--r-- | git.c | 3 | ||||
-rwxr-xr-x | t/t6050-replace.sh | 17 |
6 files changed, 38 insertions, 10 deletions
diff --git a/Documentation/git-replace.txt b/Documentation/git-replace.txt index 8adc1ef55c..65a0da508a 100644 --- a/Documentation/git-replace.txt +++ b/Documentation/git-replace.txt @@ -17,31 +17,35 @@ DESCRIPTION Adds a 'replace' reference in `.git/refs/replace/` The name of the 'replace' reference is the SHA1 of the object that is -replaced. The content of the replace reference is the SHA1 of the +replaced. The content of the 'replace' reference is the SHA1 of the replacement object. -Unless `-f` is given, the replace reference must not yet exist in +Unless `-f` is given, the 'replace' reference must not yet exist in `.git/refs/replace/` directory. -Replace references will be used by default by all git commands except -those doing reachability traversal (prune, pack transfer and fsck). +Replacement references will be used by default by all git commands +except those doing reachability traversal (prune, pack transfer and +fsck). -It is possible to disable use of replacement refs for any command -using the --no-replace-objects option just after "git". +It is possible to disable use of replacement references for any +command using the `--no-replace-objects` option just after 'git'. -For example if commit "foo" has been replaced by commit "bar": +For example if commit 'foo' has been replaced by commit 'bar': ------------------------------------------------ -$ git --no-replace-object cat-file commit foo +$ git --no-replace-objects cat-file commit foo ------------------------------------------------ -show information about commit "foo", while: +shows information about commit 'foo', while: ------------------------------------------------ $ git cat-file commit foo ------------------------------------------------ -show information about commit "bar". +shows information about commit 'bar'. + +The 'GIT_NO_REPLACE_OBJECTS' environment variable can be set to +achieve the same effect as the `--no-replace-objects` option. OPTIONS ------- @@ -369,6 +369,7 @@ static inline enum object_type object_type(unsigned int mode) #define CONFIG_ENVIRONMENT "GIT_CONFIG" #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH" #define CEILING_DIRECTORIES_ENVIRONMENT "GIT_CEILING_DIRECTORIES" +#define NO_REPLACE_OBJECTS_ENVIRONMENT "GIT_NO_REPLACE_OBJECTS" #define GITATTRIBUTES_FILE ".gitattributes" #define INFOATTRIBUTES_FILE "info/attributes" #define ATTRIBUTE_MACRO_PREFIX "[attr]" @@ -609,6 +609,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig, GIT_WORK_TREE_ENVIRONMENT, GRAFT_ENVIRONMENT, INDEX_ENVIRONMENT, + NO_REPLACE_OBJECTS_ENVIRONMENT, NULL }; conn->env = env; diff --git a/environment.c b/environment.c index 571ab56b7e..5171d9f9a4 100644 --- a/environment.c +++ b/environment.c @@ -84,6 +84,8 @@ static void setup_git_env(void) git_graft_file = getenv(GRAFT_ENVIRONMENT); if (!git_graft_file) git_graft_file = git_pathdup("info/grafts"); + if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT)) + read_replace_refs = 0; } int is_bare_repository(void) @@ -89,6 +89,9 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--no-replace-objects")) { read_replace_refs = 0; + setenv(NO_REPLACE_OBJECTS_ENVIRONMENT, "1", 1); + if (envchanged) + *envchanged = 1; } else if (!strcmp(cmd, "--git-dir")) { if (*argc < 2) { fprintf(stderr, "No directory given for --git-dir.\n" ); diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh index d4818b430a..203ffdb17a 100755 --- a/t/t6050-replace.sh +++ b/t/t6050-replace.sh @@ -77,6 +77,11 @@ test_expect_success 'test --no-replace-objects option' ' git --no-replace-objects show $HASH2 | grep "A U Thor" ' +test_expect_success 'test GIT_NO_REPLACE_OBJECTS env variable' ' + GIT_NO_REPLACE_OBJECTS=1 git cat-file commit $HASH2 | grep "author A U Thor" && + GIT_NO_REPLACE_OBJECTS=1 git show $HASH2 | grep "A U Thor" +' + cat >tag.sig <<EOF object $HASH2 type commit @@ -202,6 +207,18 @@ test_expect_success 'fetch branch with replacement' ' cd .. ' +test_expect_success 'bisect and replacements' ' + git bisect start $HASH7 $HASH1 && + test "$S" = "$(git rev-parse --verify HEAD)" && + git bisect reset && + GIT_NO_REPLACE_OBJECTS=1 git bisect start $HASH7 $HASH1 && + test "$HASH4" = "$(git rev-parse --verify HEAD)" && + git bisect reset && + git --no-replace-objects bisect start $HASH7 $HASH1 && + test "$HASH4" = "$(git rev-parse --verify HEAD)" && + git bisect reset +' + # # test_done |