Skip to content
/ git Public
forked from git/git

Commit

Permalink
apply: diagnose incomplete submodule object name better
Browse files Browse the repository at this point in the history
"git am -3" uses this function to build a tree that records how the
preimage the patch was created from would have looked like.  An
abbreviated object name on the index line is ordinarily sufficient
for us to figure out the object name the preimage tree would have
contained, but a change to a submodule by definition shows an object
name of a submodule commit which our repository should not have, and
get_sha1_blob() is not an appropriate way to read it (or get_sha1()
for that matter).

Use get_sha1_hex() and complain if we do not find a full object name
there.

We could read from the payload part of the patch to learn the full
object name of the commit, but the primary user "git rebase" has
been fixed to give us a full object name, so this should suffice
for now.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Feb 1, 2013
1 parent e2afb0b commit e28efb1
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion builtin/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -3606,7 +3606,11 @@ static void build_fake_ancestor(struct patch *list, const char *filename)
if (0 < patch->is_new)
continue;

if (!get_sha1_blob(patch->old_sha1_prefix, sha1)) {
if (S_ISGITLINK(patch->old_mode)) {
if (get_sha1_hex(patch->old_sha1_prefix, sha1))
die("submoule change for %s without full index name",
name);
} else if (!get_sha1_blob(patch->old_sha1_prefix, sha1)) {
; /* ok */
} else if (!patch->lines_added && !patch->lines_deleted) {
/* mode-only change: update the current */
Expand Down

0 comments on commit e28efb1

Please sign in to comment.