summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/git-fast-import.txt24
-rw-r--r--fast-import.c12
2 files changed, 27 insertions, 9 deletions
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index beab7f0a54..1e12d210c9 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -650,17 +650,31 @@ a data chunk which does not have an LF as its last byte.
`checkpoint`
~~~~~~~~~~~~
-Forces gfi to close the current packfile and start a new one.
-As this requires a significant amount of CPU time and disk IO
-(to compute the overall pack SHA-1 checksum and generate the
-corresponding index file) it can easily take several minutes for
-a single `checkpoint` command to complete.
+Forces gfi to close the current packfile, start a new one, and to
+save out all current branch refs, tags and marks.
....
'checkpoint' LF
LF
....
+Note that gfi automatically switches packfiles when the current
+packfile reaches \--max-pack-size, or 4 GiB, whichever limit is
+smaller. During an automatic packfile switch gfi does not update
+the branch refs, tags or marks.
+
+As a `checkpoint` can require a significant amount of CPU time and
+disk IO (to compute the overall pack SHA-1 checksum, generate the
+corresponding index file, and update the refs) it can easily take
+several minutes for a single `checkpoint` command to complete.
+
+Frontends may choose to issue checkpoints during extremely large
+and long running imports, or when they need to allow another Git
+process access to a branch. However given that a 30 GiB Subversion
+repository can be loaded into Git through gfi in about 3 hours,
+explicit checkpointing may not be necessary.
+
+
Packfile Optimization
---------------------
When packing a blob gfi always attempts to deltify against the last
diff --git a/fast-import.c b/fast-import.c
index 858df17f35..d9ed3e2f18 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -838,7 +838,7 @@ static void end_packfile(void)
last_blob.depth = 0;
}
-static void checkpoint(void)
+static void cycle_packfile(void)
{
end_packfile();
start_packfile();
@@ -931,7 +931,7 @@ static int store_object(
/* This new object needs to *not* have the current pack_id. */
e->pack_id = pack_id + 1;
- checkpoint();
+ cycle_packfile();
/* We cannot carry a delta into the new pack. */
if (delta) {
@@ -1940,8 +1940,12 @@ static void cmd_reset_branch(void)
static void cmd_checkpoint(void)
{
- if (object_count)
- checkpoint();
+ if (object_count) {
+ cycle_packfile();
+ dump_branches();
+ dump_tags();
+ dump_marks();
+ }
read_next_command();
}