]> git.lizzy.rs Git - plan9front.git/commitdiff
git/commit: allow passing absolute paths
authorOri Bernstein <ori@eigenstate.org>
Sun, 6 Jun 2021 02:07:57 +0000 (22:07 -0400)
committerOri Bernstein <ori@eigenstate.org>
Sun, 6 Jun 2021 17:07:51 +0000 (13:07 -0400)
we would treat paths as relative, and not
step past leading '/'s, leading to an infinte
loop.

sys/src/cmd/git/save.c

index 69e5c2b019589c1c2dc755536856945069e2544a..5275817baa6f27c17cd2cc634c71bf984864eef0 100644 (file)
@@ -345,18 +345,25 @@ void
 main(int argc, char **argv)
 {
        Hash th, ch, parents[Maxparents];
-       char *msg, *name, *email, *dstr;
-       int i, r, nparents;
+       char *msg, *name, *email, *dstr, cwd[1024];
+       int i, r, ncwd, nparents;
        vlong date;
        Object *t;
 
+       gitinit();
+       gitinit();
+       if(access(".git", AEXIST) != 0)
+               sysfatal("could not find git repo: %r");
+       if(getwd(cwd, sizeof(cwd)) == nil)
+               sysfatal("getcwd: %r");
        msg = nil;
        name = nil;
        email = nil;
        dstr = nil;
        date = time(nil);
        nparents = 0;
-       gitinit();
+       ncwd = strlen(cwd);
+
        ARGBEGIN{
        case 'm':       msg = EARGF(usage());   break;
        case 'n':       name = EARGF(usage());  break;
@@ -385,12 +392,14 @@ main(int argc, char **argv)
        }
        if(msg == nil || name == nil)
                usage();
-       for(i = 0; i < argc; i++)
+       for(i = 0; i < argc; i++){
                cleanname(argv[i]);
+               if(*argv[i] == '/' && strncmp(argv[i], cwd, ncwd) == 0)
+                       argv[i] += ncwd;
+               while(*argv[i] == '/')
+                       argv[i]++;
+       }
 
-       gitinit();
-       if(access(".git", AEXIST) != 0)
-               sysfatal("could not find git repo: %r");
        t = findroot();
        r = treeify(t, argv, argv + argc, 0, &th);
        if(r == -1)