X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=cvs2git.c;h=8c50e67d52399847d2dff77910872507b9fba305;hb=6da4016aea2dc5bf311fea160bd8ef96ca82b999;hp=97b4300519d24120a518a69a3f559ca0145d1435;hpb=32798c707e701a7b0b7c19b469a1fcb57bda1f66;p=git.git diff --git a/cvs2git.c b/cvs2git.c index 97b43005..8c50e67d 100644 --- a/cvs2git.c +++ b/cvs2git.c @@ -28,11 +28,17 @@ static int verbose = 0; * Usage: * * TZ=UTC cvsps -A | - * cvs2git --cvsroot=[root] --module=[module] > script + * git-cvs2git --cvsroot=[root] --module=[module] > script * * Creates a shell script that will generate the .git archive of * the names CVS repository. * + * TZ=UTC cvsps -s 1234- -A | + * git-cvs2git -u --cvsroot=[root] --module=[module] > script + * + * Creates a shell script that will update the .git archive with + * CVS changes from patchset 1234 until the last one. + * * IMPORTANT NOTE ABOUT "cvsps"! This requires version 2.1 or better, * and the "TZ=UTC" and the "-A" flag is required for sane results! */ @@ -193,11 +199,14 @@ static void update_file(char *line) if (dir) printf("mkdir -p %.*s\n", (int)(dir - name), name); - printf("cvs -q -d %s checkout -r%s -p '%s/%s' > '%s'\n", cvsroot, version, cvsmodule, name, name); + printf("cvs -q -d %s checkout -d .git-tmp -r%s '%s/%s'\n", + cvsroot, version, cvsmodule, name); + printf("mv -f .git-tmp/%s %s\n", dir ? dir+1 : name, name); + printf("rm -rf .git-tmp\n"); printf("git-update-cache --add -- '%s'\n", name); } -struct hdrentry { +static struct hdrentry { const char *name; char *dest; } hdrs[] = { @@ -230,6 +239,10 @@ int main(int argc, char **argv) verbose = 1; continue; } + if (!strcmp(arg, "-u")) { + initial_commit = 0; + continue; + } } @@ -241,11 +254,13 @@ int main(int argc, char **argv) exit(1); } - printf("[ -d .git ] && exit 1\n"); - printf("git-init-db\n"); - printf("mkdir -p .git/refs/heads\n"); - printf("mkdir -p .git/refs/tags\n"); - printf("ln -sf refs/heads/master .git/HEAD\n"); + if (initial_commit) { + printf("[ -d .git ] && exit 1\n"); + printf("git-init-db\n"); + printf("mkdir -p .git/refs/heads\n"); + printf("mkdir -p .git/refs/tags\n"); + printf("ln -sf refs/heads/master .git/HEAD\n"); + } while (fgets(line, sizeof(line), stdin) != NULL) { int linelen = strlen(line);