Hi, On Fri, 7 Nov 2008, Alexandre Julliard wrote: > I have a tree where for some reason HEAD was pointing to an invalid > commit. I'm not sure how this happened, but git checkout should be able > to recover from that situation without crashing. Agree. > diff --git a/builtin-checkout.c b/builtin-checkout.c > index 57b94d2..7c1b8cd 100644 > --- a/builtin-checkout.c > +++ b/builtin-checkout.c > @@ -47,7 +47,8 @@ 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] = old ? xstrdup(sha1_to_hex(old->object.sha1)) > + : "0000000000000000000000000000000000000000"; I guess you want to use the variable null_sha1 here. > @@ -492,10 +493,13 @@ static void update_refs_for_switch(struct checkout_opts *opts, > } > > 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); > + if (old_desc) > + strbuf_addf(&msg, "checkout: moving from %s to %s", > + old_desc, new->name); > + else > + strbuf_addf(&msg, "checkout: moving to %s", new->name); Why not old_desc ? old_desc : "(invalid)" ? > diff --git a/t/t2011-checkout-invalid-head.sh b/t/t2011-checkout-invalid-head.sh > new file mode 100755 Nice! Thank you, Dscho -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html