diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-04-14 11:49:10 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-04-14 11:49:10 -0700 |
commit | fa9aaa8f1051bd7b0cd437a5006898277ec42805 (patch) | |
tree | c61245e041ea4e0bdcf2c4cd09555ae5bc324b82 /builtin/receive-pack.c | |
parent | d2ae751b1cae0674e0a1f7fe4da0a341365cefbb (diff) | |
parent | 1a51b52422e055e433dec9a496621341d70d38ff (diff) | |
download | git-fa9aaa8f1051bd7b0cd437a5006898277ec42805.tar.gz git-fa9aaa8f1051bd7b0cd437a5006898277ec42805.tar.xz |
Merge branch 'jc/update-instead-into-void'
A push into an unborn branch, with "receive.denyCurrentBranch" set
to "updateInstead", did not check out the working tree as expected.
* jc/update-instead-into-void:
push-to-deploy: allow pushing into an unborn branch and updating it
Diffstat (limited to 'builtin/receive-pack.c')
-rw-r--r-- | builtin/receive-pack.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 70e9ce5f9..5292bb5a5 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -743,6 +743,22 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si) return 0; } +/* + * NEEDSWORK: we should consolidate various implementions of "are we + * on an unborn branch?" test into one, and make the unified one more + * robust. !get_sha1() based check used here and elsewhere would not + * allow us to tell an unborn branch from corrupt ref, for example. + * For the purpose of fixing "deploy-to-update does not work when + * pushing into an empty repository" issue, this should suffice for + * now. + */ +static int head_has_history(void) +{ + unsigned char sha1[20]; + + return !get_sha1("HEAD", sha1); +} + static const char *push_to_deploy(unsigned char *sha1, struct argv_array *env, const char *work_tree) @@ -755,7 +771,7 @@ static const char *push_to_deploy(unsigned char *sha1, }; const char *diff_index[] = { "diff-index", "--quiet", "--cached", "--ignore-submodules", - "HEAD", "--", NULL + NULL, "--", NULL }; const char *read_tree[] = { "read-tree", "-u", "-m", NULL, NULL @@ -782,6 +798,9 @@ static const char *push_to_deploy(unsigned char *sha1, if (run_command(&child)) return "Working directory has unstaged changes"; + /* diff-index with either HEAD or an empty tree */ + diff_index[4] = head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX; + child_process_init(&child); child.argv = diff_index; child.env = env->argv; |