aboutsummaryrefslogtreecommitdiff
path: root/builtin-branch.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-01-19 11:51:29 -0800
committerJunio C Hamano <junkio@cox.net>2007-02-03 12:54:49 -0800
commit5f856dd47dacb30fb9f605b4b7e1fa577ada7d26 (patch)
tree634604cc8d2cb12588ea85be851a8581d89c59a2 /builtin-branch.c
parent505739f6c0c67b7426ffbc723734c794b0a810d9 (diff)
downloadgit-5f856dd47dacb30fb9f605b4b7e1fa577ada7d26.tar.gz
git-5f856dd47dacb30fb9f605b4b7e1fa577ada7d26.tar.xz
fix reflog entries for "git-branch"
Even when -l is not given from the command line, the repository may have the configuration variable core.logallrefupdates set, or an old-timer might have done ": >.git/logs/refs/heads/new" before running "git branch new". In these cases, the code gave an uninitialized msg[] from the stack to be written out as the reflog message. This also passes a different message when '-f' option is used. Saying "git branch -f branch some-commit" is a moral equilvalent of doing "git-reset some-commit" while on the branch. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-branch.c')
-rw-r--r--builtin-branch.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/builtin-branch.c b/builtin-branch.c
index d60690bb0..eaff54ec5 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -316,6 +316,7 @@ static void create_branch(const char *name, const char *start_name,
struct commit *commit;
unsigned char sha1[20];
char ref[PATH_MAX], msg[PATH_MAX + 20];
+ int forcing = 0;
snprintf(ref, sizeof ref, "refs/heads/%s", name);
if (check_ref_format(ref))
@@ -326,6 +327,7 @@ static void create_branch(const char *name, const char *start_name,
die("A branch named '%s' already exists.", name);
else if (!is_bare_repository() && !strcmp(head, name))
die("Cannot force update the current branch.");
+ forcing = 1;
}
if (start_sha1)
@@ -342,11 +344,15 @@ static void create_branch(const char *name, const char *start_name,
if (!lock)
die("Failed to lock ref for update: %s.", strerror(errno));
- if (reflog) {
+ if (reflog)
log_all_ref_updates = 1;
+
+ if (forcing)
+ snprintf(msg, sizeof msg, "branch: Reset from %s",
+ start_name);
+ else
snprintf(msg, sizeof msg, "branch: Created from %s",
start_name);
- }
if (write_ref_sha1(lock, sha1, msg) < 0)
die("Failed to write ref: %s.", strerror(errno));