Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-10-13 03:54:19 +0400
committerJunio C Hamano <junkio@cox.net>2005-10-13 05:32:02 +0400
commit84c8d8aec535e1d92c5acc36e84ac8e00f6e0e7a (patch)
treee015617c5842fccfc3e3801c562a25f2de4e1e2b /pack-objects.c
parent9cf6d3357aaaaa89dd86cc156221b7b604e9358c (diff)
Fix packname hash generation.
This changes the generation of hash packfiles have in their names, from "hash of object names as fed to us" to "hash of object names in the resulting pack, in the order they appear in the index file". The new "git-index-pack" command is taught to output the computed hash value to its standard output. With this, we can store downloaded pack in a temporary file without knowing its final name, run git-index-pack to generate idx for it while finding out its final name, and then rename the pack and idx to their final names. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'pack-objects.c')
-rw-r--r--pack-objects.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/pack-objects.c b/pack-objects.c
index 3d622787cc..ef55cab5f3 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -393,6 +393,7 @@ int main(int argc, char **argv)
SHA_CTX ctx;
char line[PATH_MAX + 20];
int window = 10, depth = 10, pack_to_stdout = 0;
+ struct object_entry **list;
int i;
for (i = 1; i < argc; i++) {
@@ -435,7 +436,6 @@ int main(int argc, char **argv)
if (pack_to_stdout != !base_name)
usage(pack_usage);
- SHA1_Init(&ctx);
while (fgets(line, sizeof(line), stdin) != NULL) {
unsigned int hash;
char *p;
@@ -451,10 +451,8 @@ int main(int argc, char **argv)
continue;
hash = hash * 11 + c;
}
- if (add_object_entry(sha1, hash))
- SHA1_Update(&ctx, sha1, 20);
+ add_object_entry(sha1, hash);
}
- SHA1_Final(object_list_sha1, &ctx);
if (non_empty && !nr_objects)
return 0;
get_object_details();
@@ -462,6 +460,14 @@ int main(int argc, char **argv)
fprintf(stderr, "Packing %d objects\n", nr_objects);
sorted_by_sha = create_sorted_list(sha1_sort);
+ SHA1_Init(&ctx);
+ list = sorted_by_sha;
+ for (i = 0; i < nr_objects; i++) {
+ struct object_entry *entry = *list++;
+ SHA1_Update(&ctx, entry->sha1, 20);
+ }
+ SHA1_Final(object_list_sha1, &ctx);
+
sorted_by_type = create_sorted_list(type_size_sort);
if (window && depth)
find_deltas(sorted_by_type, window+1, depth);