]> git.ipfire.org Git - thirdparty/git.git/commitdiff
write_entry(): fix misuses of `path` in error messages
authorMatheus Tavares <matheus.bernardino@usp.br>
Tue, 16 Feb 2021 14:06:51 +0000 (11:06 -0300)
committerJunio C Hamano <gitster@pobox.com>
Tue, 16 Feb 2021 19:27:17 +0000 (11:27 -0800)
The variables `path` and `ce->name`, at write_entry(), usually have the
same contents, but that's not the case when using a checkout prefix or
writing to a tempfile. (In fact, `path` will be either empty or dirty
when writing to a tempfile.) Therefore, these variables cannot be used
interchangeably. In this sense, fix wrong uses of `path` in error
messages where it should really be `ce->name`, and add some regression
tests. (Note: there doesn't seem to be any misuse in the other way
around.)

Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
entry.c
t/t2006-checkout-index-basic.sh

diff --git a/entry.c b/entry.c
index a0532f1f00007be7c9b675a54a7e8c48c000d638..7b9f43716f76e6e7a701966045429b263cfb691e 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -282,7 +282,7 @@ static int write_entry(struct cache_entry *ce,
                new_blob = read_blob_entry(ce, &size);
                if (!new_blob)
                        return error("unable to read sha1 file of %s (%s)",
-                                    path, oid_to_hex(&ce->oid));
+                                    ce->name, oid_to_hex(&ce->oid));
 
                /*
                 * We can't make a real symlink; write out a regular file entry
@@ -309,7 +309,7 @@ static int write_entry(struct cache_entry *ce,
                        new_blob = read_blob_entry(ce, &size);
                        if (!new_blob)
                                return error("unable to read sha1 file of %s (%s)",
-                                            path, oid_to_hex(&ce->oid));
+                                            ce->name, oid_to_hex(&ce->oid));
                }
 
                /*
@@ -354,7 +354,7 @@ static int write_entry(struct cache_entry *ce,
 
        case S_IFGITLINK:
                if (to_tempfile)
-                       return error("cannot create temporary submodule %s", path);
+                       return error("cannot create temporary submodule %s", ce->name);
                if (mkdir(path, 0777) < 0)
                        return error("cannot create submodule directory %s", path);
                sub = submodule_from_ce(ce);
@@ -365,7 +365,7 @@ static int write_entry(struct cache_entry *ce,
                break;
 
        default:
-               return error("unknown file mode for %s in index", path);
+               return error("unknown file mode for %s in index", ce->name);
        }
 
 finish:
index 8e181dbf01c46a324b54471cc62e1c9291852079..7ff3edab05aec604b740608a29e54b4f257f8f8f 100755 (executable)
@@ -32,4 +32,27 @@ test_expect_success 'checkout-index reports errors (stdin)' '
        test_i18ngrep not.in.the.cache stderr
 '
 
+test_expect_success 'checkout-index --temp correctly reports error on missing blobs' '
+       test_when_finished git reset --hard &&
+       missing_blob=$(echo "no such blob here" | git hash-object --stdin) &&
+       cat >objs <<-EOF &&
+       100644 $missing_blob    file
+       120000 $missing_blob    symlink
+       EOF
+       git update-index --index-info <objs &&
+
+       test_must_fail git checkout-index --temp symlink file 2>stderr &&
+       test_i18ngrep "unable to read sha1 file of file ($missing_blob)" stderr &&
+       test_i18ngrep "unable to read sha1 file of symlink ($missing_blob)" stderr
+'
+
+test_expect_success 'checkout-index --temp correctly reports error for submodules' '
+       git init sub &&
+       test_commit -C sub file &&
+       git submodule add ./sub &&
+       git commit -m sub &&
+       test_must_fail git checkout-index --temp sub 2>stderr &&
+       test_i18ngrep "cannot create temporary submodule sub" stderr
+'
+
 test_done