[RFC/PATCH v3] tag: display original sha1 of deleted/overwritten tag
It makes possible to undo accidental tag deletion and overwriting.
Signed-off-by: Zoltán Füzesi <zfuzesi@eaglet.hu>
---
This patch was created in response to this feature request:
http://article.gmane.org/gmane.comp.version-control.git/135016
I named it "RFC" because of the overwriting part.
v3: works when tag object is created (I should slow down...)
builtin-tag.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
Show changes to builtin-tag.c +6 −4
diff --git a/builtin-tag.c b/builtin-tag.c
index c479018..1404a0e 100644
--- a/builtin-tag.c
+++ b/builtin-tag.c
@@ -140,7 +140,7 @@ static int delete_tag(const char *name, const char *ref,
{
if (delete_ref(ref, sha1, 0))
return 1;
- printf("Deleted tag '%s'\n", name);
+ printf("Deleted tag '%s' %s\n", name, sha1_to_hex(sha1));
return 0;
}
@@ -363,7 +363,7 @@ static int parse_msg_arg(const struct option *opt, const char *arg, int unset)
int cmd_tag(int argc, const char **argv, const char *prefix)
{
struct strbuf buf = STRBUF_INIT;
- unsigned char object[20], prev[20];
+ unsigned char object[20], prev[20], tag_object[20];
char ref[PATH_MAX];
const char *object_ref, *tag;
struct ref_lock *lock;
@@ -472,13 +472,15 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
if (annotate)
create_tag(object, tag, &buf, msg.given || msgfile,
- sign, prev, object);
+ sign, prev, tag_object);
lock = lock_any_ref_for_update(ref, prev, 0);
if (!lock)
die("%s: cannot lock the ref", ref);
- if (write_ref_sha1(lock, object, NULL) < 0)
+ if (write_ref_sha1(lock, annotate ? tag_object : object, NULL) < 0)
die("%s: cannot update the ref", ref);
+ else if (force && hashcmp(object, prev))
+ printf("Overwritten tag '%s' (%s)\n", ref, sha1_to_hex(prev));
strbuf_release(&buf);
return 0;
--
1.6.6.rc2