Browse Source
git-export was done as a concept example on how easy it is to export the git data to something else. It's much less powerful than any number of trivial one-liner scripts now, and real exporters would not ever use git-export. It's obviously much less powerful than "git-whatchanged", or just about any combination of git-rev-list + git-diff-tree. Signed-off-by: Junio C Hamano <junkio@cox.net>maint
![junkio@cox.net](/assets/img/avatar_default.png)
5 changed files with 1 additions and 117 deletions
@ -1,31 +0,0 @@
@@ -1,31 +0,0 @@
|
||||
git-export(1) |
||||
============= |
||||
v0.1, May 2005 |
||||
|
||||
NAME |
||||
---- |
||||
git-export - Exports each commit and a diff against each of its parents |
||||
|
||||
|
||||
SYNOPSIS |
||||
-------- |
||||
'git-export' top [base] |
||||
|
||||
DESCRIPTION |
||||
----------- |
||||
Exports each commit and diff against each of its parents, between |
||||
top and base. If base is not specified it exports everything. |
||||
|
||||
|
||||
Author |
||||
------ |
||||
Written by Linus Torvalds <torvalds@osdl.org> |
||||
|
||||
Documentation |
||||
-------------- |
||||
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>. |
||||
|
||||
GIT |
||||
--- |
||||
Part of the gitlink:git[7] suite |
||||
|
@ -1,81 +0,0 @@
@@ -1,81 +0,0 @@
|
||||
#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; |
||||
} |
Loading…
Reference in new issue