diff options
author | Alexandre Julliard <julliard@winehq.org> | 2008-11-08 13:03:59 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-11-09 10:11:39 -0800 |
commit | 323e00fd46afb9293b25ee85f061ce11a2f95ca6 (patch) | |
tree | 42c867205627ef8cc70a306ad2fcfde9b0c17f5d /builtin-checkout.c | |
parent | 7c181d627c136cbc67ef0f722e74e34017e662f0 (diff) | |
download | git-323e00fd46afb9293b25ee85f061ce11a2f95ca6.tar.gz |
checkout: Don't crash when switching away from an invalid branch.
When using alternates, it is possible for HEAD to end up pointing to
an invalid commit. git checkout should be able to recover from that
situation without crashing.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-checkout.c')
-rw-r--r-- | builtin-checkout.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c index 1deda927cd..05eee4ecc7 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -32,7 +32,7 @@ static int post_checkout_hook(struct commit *old, struct commit *new, memset(&proc, 0, sizeof(proc)); argv[0] = name; - argv[1] = xstrdup(sha1_to_hex(old->object.sha1)); + argv[1] = xstrdup(sha1_to_hex(old ? old->object.sha1 : null_sha1)); argv[2] = xstrdup(sha1_to_hex(new->object.sha1)); argv[3] = changed ? "1" : "0"; argv[4] = NULL; @@ -360,10 +360,10 @@ static void update_refs_for_switch(struct checkout_opts *opts, strbuf_init(&msg, 0); old_desc = old->name; - if (!old_desc) + if (!old_desc && old->commit) old_desc = sha1_to_hex(old->commit->object.sha1); strbuf_addf(&msg, "checkout: moving from %s to %s", - old_desc, new->name); + old_desc ? old_desc : "(invalid)", new->name); if (new->path) { create_symref("HEAD", new->path, msg.buf); @@ -419,7 +419,7 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new) * a new commit, we want to mention the old commit once more * to remind the user that it might be lost. */ - if (!opts->quiet && !old.path && new->commit != old.commit) + if (!opts->quiet && !old.path && old.commit && new->commit != old.commit) describe_detached_head("Previous HEAD position was", old.commit); if (!old.commit) { |