aboutsummaryrefslogtreecommitdiff
path: root/builtin/receive-pack.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-04-14 11:49:10 -0700
committerJunio C Hamano <gitster@pobox.com>2015-04-14 11:49:10 -0700
commitfa9aaa8f1051bd7b0cd437a5006898277ec42805 (patch)
treec61245e041ea4e0bdcf2c4cd09555ae5bc324b82 /builtin/receive-pack.c
parentd2ae751b1cae0674e0a1f7fe4da0a341365cefbb (diff)
parent1a51b52422e055e433dec9a496621341d70d38ff (diff)
downloadgit-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.c21
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;