aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-02-11 19:45:56 -0500
committerShawn O. Pearce <spearce@spearce.org>2007-02-11 19:45:56 -0500
commitbdf1c06dc17bdd6d54602544235aa3482ab67c9b (patch)
tree05cea10bd98334d02a0af812a858ef5039de61f4
parentcc46a74398e6a542d61d8fa0b197b7dedcd7f301 (diff)
downloadgit-bdf1c06dc17bdd6d54602544235aa3482ab67c9b.tar.gz
git-bdf1c06dc17bdd6d54602544235aa3482ab67c9b.tar.xz
fast-import: Hide the pack boundary commits by default.
Most users don't need the pack boundary information that fast-import was printing to standard output, especially if they were calling it with --quiet. Those users who do want this information probably want it captured so they can go back and use it to repack the imported repository. So dumping the boundary commits to a log file makes more sense then printing them to standard output. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--Documentation/git-fast-import.txt9
-rw-r--r--fast-import.c35
-rwxr-xr-xt/t9300-fast-import.sh26
3 files changed, 59 insertions, 11 deletions
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index 2a5052072..843faf79c 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -64,6 +64,15 @@ OPTIONS
Frontends can use this file to validate imports after they
have been completed.
+--export-pack-edges=<file>::
+ After creating a packfile, print a line of data to
+ <file> listing the filename of the packfile and the last
+ commit on each branch that was written to that packfile.
+ This information may be useful after importing projects
+ whose total object set exceeds the 4 GiB packfile limit,
+ as these commits can be used as edge points during calls
+ to gitlink:git-pack-objects[1].
+
--quiet::
Disable all non-fatal output, making fast-import silent when it
is successful. This option disables the output shown by
diff --git a/fast-import.c b/fast-import.c
index 3f4e73f82..f9cfc7263 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -261,6 +261,7 @@ static unsigned long object_count;
static unsigned long branch_count;
static unsigned long branch_load_count;
static int failure;
+static FILE *pack_edges;
/* Memory pools */
static size_t mem_pool_alloc = 2*1024*1024 - sizeof(struct mem_pool);
@@ -811,18 +812,21 @@ static void end_packfile(void)
install_packed_git(new_p);
/* Print the boundary */
- fprintf(stdout, "%s:", new_p->pack_name);
- for (i = 0; i < branch_table_sz; i++) {
- for (b = branch_table[i]; b; b = b->table_next_branch) {
- if (b->pack_id == pack_id)
- fprintf(stdout, " %s", sha1_to_hex(b->sha1));
+ if (pack_edges) {
+ fprintf(pack_edges, "%s:", new_p->pack_name);
+ for (i = 0; i < branch_table_sz; i++) {
+ for (b = branch_table[i]; b; b = b->table_next_branch) {
+ if (b->pack_id == pack_id)
+ fprintf(pack_edges, " %s", sha1_to_hex(b->sha1));
+ }
}
+ for (t = first_tag; t; t = t->next_tag) {
+ if (t->pack_id == pack_id)
+ fprintf(pack_edges, " %s", sha1_to_hex(t->sha1));
+ }
+ fputc('\n', pack_edges);
+ fflush(pack_edges);
}
- for (t = first_tag; t; t = t->next_tag) {
- if (t->pack_id == pack_id)
- fprintf(stdout, " %s", sha1_to_hex(t->sha1));
- }
- fputc('\n', stdout);
pack_id++;
}
@@ -1988,7 +1992,13 @@ int main(int argc, const char **argv)
max_active_branches = strtoul(a + 18, NULL, 0);
else if (!strncmp(a, "--export-marks=", 15))
mark_file = a + 15;
- else if (!strcmp(a, "--force"))
+ else if (!strncmp(a, "--export-pack-edges=", 20)) {
+ if (pack_edges)
+ fclose(pack_edges);
+ pack_edges = fopen(a + 20, "a");
+ if (!pack_edges)
+ die("Cannot open %s: %s", a + 20, strerror(errno));
+ } else if (!strcmp(a, "--force"))
force_update = 1;
else if (!strcmp(a, "--quiet"))
show_stats = 0;
@@ -2033,6 +2043,9 @@ int main(int argc, const char **argv)
unkeep_all_packs();
dump_marks();
+ if (pack_edges)
+ fclose(pack_edges);
+
if (show_stats) {
uintmax_t total_count = 0, duplicate_count = 0;
for (i = 0; i < ARRAY_SIZE(object_count_by_type); i++)
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 357a8724d..8d2821129 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -407,4 +407,30 @@ test_expect_success \
'git-cat-file blob H:h/e/l/lo >actual &&
diff -u expect actual'
+###
+### series I
+###
+
+cat >input <<INPUT_END
+commit refs/heads/export-boundary
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+we have a border. its only 40 characters wide.
+COMMIT
+
+from refs/heads/branch
+
+INPUT_END
+test_expect_success \
+ 'I: export-pack-edges' \
+ 'git-fast-import --export-pack-edges=edges.list <input'
+
+cat >expect <<EOF
+.git/objects/pack/pack-.pack: `git-rev-parse --verify export-boundary`
+EOF
+test_expect_success \
+ 'I: verify edge list' \
+ 'sed -e s/pack-.*pack/pack-.pack/ edges.list >actual &&
+ diff -u expect actual'
+
test_done