mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
checkout-index: omit entries with no tempname from --temp output
With --temp (or --stage=all, which implies --temp), checkout-index
writes a list to stdout associating temporary file names to the entries'
names. But if it fails to write an entry, and the failure happens before
even assigning a temporary filename to that entry, we get an odd output
line. This can be seen when trying to check out a symlink whose blob is
missing:
$ missing_blob=$(git hash-object --stdin </dev/null)
$ git update-index --add --cacheinfo 120000,$missing_blob,foo
$ git checkout-index --temp foo
error: unable to read sha1 file of foo (e69de29bb2
)
foo
The 'TAB foo' line is not much useful and it might break scripts that
expect the 'tempname TAB foo' output. So let's omit such entries from
the stdout list (but leaving the error message on stderr).
We could also consider omitting _all_ failed entries from the output
list, but that's probably not a good idea as the associated tempfiles
may have been created even when checkout failed, so scripts may want to
use the output list for cleanup.
Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9334ea8e92
commit
3f7ba60350
|
@ -23,22 +23,35 @@ static struct checkout state = CHECKOUT_INIT;
|
||||||
static void write_tempfile_record(const char *name, const char *prefix)
|
static void write_tempfile_record(const char *name, const char *prefix)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int have_tempname = 0;
|
||||||
|
|
||||||
if (CHECKOUT_ALL == checkout_stage) {
|
if (CHECKOUT_ALL == checkout_stage) {
|
||||||
for (i = 1; i < 4; i++) {
|
for (i = 1; i < 4; i++)
|
||||||
if (i > 1)
|
if (topath[i][0]) {
|
||||||
putchar(' ');
|
have_tempname = 1;
|
||||||
if (topath[i][0])
|
break;
|
||||||
fputs(topath[i], stdout);
|
}
|
||||||
else
|
|
||||||
putchar('.');
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
fputs(topath[checkout_stage], stdout);
|
|
||||||
|
|
||||||
putchar('\t');
|
if (have_tempname) {
|
||||||
write_name_quoted_relative(name, prefix, stdout,
|
for (i = 1; i < 4; i++) {
|
||||||
nul_term_line ? '\0' : '\n');
|
if (i > 1)
|
||||||
|
putchar(' ');
|
||||||
|
if (topath[i][0])
|
||||||
|
fputs(topath[i], stdout);
|
||||||
|
else
|
||||||
|
putchar('.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (topath[checkout_stage][0]) {
|
||||||
|
have_tempname = 1;
|
||||||
|
fputs(topath[checkout_stage], stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (have_tempname) {
|
||||||
|
putchar('\t');
|
||||||
|
write_name_quoted_relative(name, prefix, stdout,
|
||||||
|
nul_term_line ? '\0' : '\n');
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
topath[i][0] = 0;
|
topath[i][0] = 0;
|
||||||
|
|
Loading…
Reference in a new issue