7 static void show_commit(struct commit
*commit
)
12 strcpy(hex
, sha1_to_hex(commit
->object
.sha1
));
13 printf("Id: %s\n", hex
);
15 sprintf(cmdline
, "git-cat-file commit %s", hex
);
17 if (commit
->parents
) {
18 char *against
= sha1_to_hex(commit
->parents
->item
->object
.sha1
);
19 printf("\n\n======== diff against %s ========\n", against
);
21 sprintf(cmdline
, "git-diff-tree -p %s %s", against
, hex
);
24 printf("======== end ========\n\n");
28 * Show all unseen commits, depth-first
30 static void show_unseen(struct commit
*top
)
32 struct commit_list
*parents
;
34 if (top
->object
.flags
& 2)
36 top
->object
.flags
|= 2;
37 parents
= top
->parents
;
39 show_unseen(parents
->item
);
40 parents
= parents
->next
;
45 static void export(struct commit
*top
, struct commit
*base
)
47 mark_reachable(&top
->object
, 1);
49 mark_reachable(&base
->object
, 2);
53 static struct commit
*get_commit(unsigned char *sha1
)
55 struct commit
*commit
= lookup_commit(sha1
);
56 if (!commit
->object
.parsed
) {
57 struct commit_list
*parents
;
59 if (parse_commit(commit
) < 0)
60 die("unable to parse commit %s", sha1_to_hex(sha1
));
61 parents
= commit
->parents
;
63 get_commit(parents
->item
->object
.sha1
);
64 parents
= parents
->next
;
70 int main(int argc
, char **argv
)
72 unsigned char base_sha1
[20];
73 unsigned char top_sha1
[20];
75 if (argc
< 2 || argc
> 4 ||
76 get_sha1(argv
[1], top_sha1
) ||
77 (argc
== 3 && get_sha1(argv
[2], base_sha1
)))
78 usage("git-export top [base]");
79 export(get_commit(top_sha1
), argc
==3 ? get_commit(base_sha1
) : NULL
);