зеркало из https://github.com/microsoft/git.git
Merge branch 'mh/retag'
* mh/retag: Add tests for git tag Reuse previous annotation when overwriting a tag
This commit is contained in:
Коммит
ef4de8357d
|
@ -246,9 +246,37 @@ static int git_tag_config(const char *var, const char *value)
|
|||
return git_default_config(var, value);
|
||||
}
|
||||
|
||||
static void write_tag_body(int fd, const unsigned char *sha1)
|
||||
{
|
||||
unsigned long size;
|
||||
enum object_type type;
|
||||
char *buf, *sp, *eob;
|
||||
size_t len;
|
||||
|
||||
buf = read_sha1_file(sha1, &type, &size);
|
||||
if (!buf)
|
||||
return;
|
||||
/* skip header */
|
||||
sp = strstr(buf, "\n\n");
|
||||
|
||||
if (!sp || !size || type != OBJ_TAG) {
|
||||
free(buf);
|
||||
return;
|
||||
}
|
||||
sp += 2; /* skip the 2 LFs */
|
||||
eob = strstr(sp, "\n" PGP_SIGNATURE "\n");
|
||||
if (eob)
|
||||
len = eob - sp;
|
||||
else
|
||||
len = buf + size - sp;
|
||||
write_or_die(fd, sp, len);
|
||||
|
||||
free(buf);
|
||||
}
|
||||
|
||||
static void create_tag(const unsigned char *object, const char *tag,
|
||||
struct strbuf *buf, int message, int sign,
|
||||
unsigned char *result)
|
||||
unsigned char *prev, unsigned char *result)
|
||||
{
|
||||
enum object_type type;
|
||||
char header_buf[1024];
|
||||
|
@ -281,7 +309,11 @@ static void create_tag(const unsigned char *object, const char *tag,
|
|||
if (fd < 0)
|
||||
die("could not create file '%s': %s",
|
||||
path, strerror(errno));
|
||||
write_or_die(fd, tag_template, strlen(tag_template));
|
||||
|
||||
if (!is_null_sha1(prev))
|
||||
write_tag_body(fd, prev);
|
||||
else
|
||||
write_or_die(fd, tag_template, strlen(tag_template));
|
||||
close(fd);
|
||||
|
||||
launch_editor(path, buf);
|
||||
|
@ -418,7 +450,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||
die("tag '%s' already exists", tag);
|
||||
|
||||
if (annotate)
|
||||
create_tag(object, tag, &buf, message, sign, object);
|
||||
create_tag(object, tag, &buf, message, sign, prev, object);
|
||||
|
||||
lock = lock_any_ref_for_update(ref, prev, 0);
|
||||
if (!lock)
|
||||
|
|
|
@ -1004,4 +1004,20 @@ test_expect_failure \
|
|||
'verify signed tag fails when public key is not present' \
|
||||
'git-tag -v signed-tag'
|
||||
|
||||
test_expect_success \
|
||||
'message in editor has initial comment' '
|
||||
GIT_EDITOR=cat git tag -a initial-comment > actual || true &&
|
||||
test $(sed -n "/^\(#\|\$\)/p" actual | wc -l) -gt 0
|
||||
'
|
||||
|
||||
get_tag_header reuse $commit commit $time >expect
|
||||
echo "An annotation to be reused" >> expect
|
||||
test_expect_success \
|
||||
'overwriting an annoted tag should use its previous body' '
|
||||
git tag -a -m "An annotation to be reused" reuse &&
|
||||
GIT_EDITOR=true git tag -f -a reuse &&
|
||||
get_tag_msg reuse >actual &&
|
||||
git diff expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче