path: root/transport.h
diff options
authorShawn O. Pearce <>2007-09-14 07:31:23 (GMT)
committerJunio C Hamano <>2007-09-19 10:22:30 (GMT)
commit1788c39cd0742439b9bedc28bc10bc4d105b6c0f (patch)
tree7cb5e53238b90e0c9bdcc1812c9ca266af1a12b9 /transport.h
parent106764e6515dd0fb9fda8bb8cab523932ae903b3 (diff)
Remove pack.keep after ref updates in git-fetch
If we are using a native packfile to perform a git-fetch invocation and the received packfile contained more than the configured limits of fetch.unpackLimit/transfer.unpackLimit then index-pack will output a single line saying "keep\t$sha1\n" to stdout. This line needs to be captured and retained so we can delete the corresponding .keep file ("$GIT_DIR/objects/pack/pack-$sha1.keep") once all refs have been safely updated. This trick has long been in use with and its lower level helper git-fetch--tool as a way to allow index-pack to save the new packfile before the refs have been updated and yet avoid a race with any concurrently running git-repack process. It was unfortunately lost when was converted to pure C and fetch--tool was no longer being invoked. Signed-off-by: Shawn O. Pearce <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'transport.h')
1 files changed, 3 insertions, 2 deletions
diff --git a/transport.h b/transport.h
index b354a8f..f2bbdf7 100644
--- a/transport.h
+++ b/transport.h
@@ -15,6 +15,7 @@ struct transport {
struct ref *remote_refs;
const struct transport_ops *ops;
+ char *pack_lockfile;
@@ -30,7 +31,7 @@ struct transport_ops {
const char *value);
struct ref *(*get_refs_list)(const struct transport *transport);
- int (*fetch)(const struct transport *transport, int refs_nr, struct ref **refs);
+ int (*fetch)(struct transport *transport, int refs_nr, struct ref **refs);
int (*push)(struct transport *connection, int refspec_nr, const char **refspec, int flags);
int (*disconnect)(struct transport *connection);
@@ -73,7 +74,7 @@ int transport_push(struct transport *connection,
struct ref *transport_get_remote_refs(struct transport *transport);
int transport_fetch_refs(struct transport *transport, struct ref *refs);
+void transport_unlock_pack(struct transport *transport);
int transport_disconnect(struct transport *transport);