summaryrefslogtreecommitdiff
path: root/fetch.c
diff options
context:
space:
mode:
authorShawn Pearce <spearce@spearce.org>2006-05-19 07:29:26 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-05-19 22:02:52 (GMT)
commitd0740d92beb019a7b02678e5acea79c0ff67e3ee (patch)
tree0e3e69c86d311f788dc0010ffbc369e4fa6a53d1 /fetch.c
parent732232a123e1e61e38babb1c572722bb8a189ba3 (diff)
downloadgit-d0740d92beb019a7b02678e5acea79c0ff67e3ee.zip
git-d0740d92beb019a7b02678e5acea79c0ff67e3ee.tar.gz
git-d0740d92beb019a7b02678e5acea79c0ff67e3ee.tar.bz2
Log ref updates made by fetch.
If a ref is changed by http-fetch, local-fetch or ssh-fetch record the change and the remote URL/name in the log for the ref. This requires loading the config file to check logAllRefUpdates. Also fixed a bug in the ref lock generation; the log file name was not being produced right due to a bad prefix length. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'fetch.c')
-rw-r--r--fetch.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/fetch.c b/fetch.c
index 8bdaacb..fd57684 100644
--- a/fetch.c
+++ b/fetch.c
@@ -8,6 +8,7 @@
#include "refs.h"
const char *write_ref = NULL;
+const char *write_ref_log_details = NULL;
const unsigned char *current_ref = NULL;
@@ -206,13 +207,17 @@ int pull(char *target)
{
struct ref_lock *lock;
unsigned char sha1[20];
+ char *msg;
+ int ret;
save_commit_buffer = 0;
track_object_refs = 0;
if (write_ref) {
lock = lock_ref_sha1(write_ref, current_ref, 1);
- if (!lock)
+ if (!lock) {
+ error("Can't lock ref %s", write_ref);
return -1;
+ }
}
if (!get_recover) {
@@ -234,7 +239,15 @@ int pull(char *target)
}
if (write_ref) {
- return write_ref_sha1(lock, sha1, "git fetch");
+ if (write_ref_log_details) {
+ msg = xmalloc(strlen(write_ref_log_details) + 12);
+ sprintf(msg, "fetch from %s", write_ref_log_details);
+ } else
+ msg = NULL;
+ ret = write_ref_sha1(lock, sha1, msg ? msg : "fetch (unknown)");
+ if (msg)
+ free(msg);
+ return ret;
}
return 0;
}