Revision ba375acff7692cbca16f7cc2e69b71563188ab7f authored by Linus Torvalds on 08 July 2005, 22:46:33 UTC, committed by Linus Torvalds on 08 July 2005, 22:46:33 UTC
This silently adds the ".git" directory component if needed, so you don't need to state it explicitly for the source. Also, it turns the source into an absolute pathname when local, so that you can use relative pathnames without losing sight of the source when we cd into the destination.
1 parent 51cb06c
export.c
#include "cache.h"
#include "commit.h"
/*
* Show one commit
*/
static void show_commit(struct commit *commit)
{
char cmdline[400];
char hex[100];
strcpy(hex, sha1_to_hex(commit->object.sha1));
printf("Id: %s\n", hex);
fflush(NULL);
sprintf(cmdline, "git-cat-file commit %s", hex);
system(cmdline);
if (commit->parents) {
char *against = sha1_to_hex(commit->parents->item->object.sha1);
printf("\n\n======== diff against %s ========\n", against);
fflush(NULL);
sprintf(cmdline, "git-diff-tree -p %s %s", against, hex);
system(cmdline);
}
printf("======== end ========\n\n");
}
/*
* Show all unseen commits, depth-first
*/
static void show_unseen(struct commit *top)
{
struct commit_list *parents;
if (top->object.flags & 2)
return;
top->object.flags |= 2;
parents = top->parents;
while (parents) {
show_unseen(parents->item);
parents = parents->next;
}
show_commit(top);
}
static void export(struct commit *top, struct commit *base)
{
mark_reachable(&top->object, 1);
if (base)
mark_reachable(&base->object, 2);
show_unseen(top);
}
static struct commit *get_commit(unsigned char *sha1)
{
struct commit *commit = lookup_commit(sha1);
if (!commit->object.parsed) {
struct commit_list *parents;
if (parse_commit(commit) < 0)
die("unable to parse commit %s", sha1_to_hex(sha1));
parents = commit->parents;
while (parents) {
get_commit(parents->item->object.sha1);
parents = parents->next;
}
}
return commit;
}
int main(int argc, char **argv)
{
unsigned char base_sha1[20];
unsigned char top_sha1[20];
if (argc < 2 || argc > 4 ||
get_sha1(argv[1], top_sha1) ||
(argc == 3 && get_sha1(argv[2], base_sha1)))
usage("git-export top [base]");
export(get_commit(top_sha1), argc==3 ? get_commit(base_sha1) : NULL);
return 0;
}
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...