]> git.lizzy.rs Git - plan9front.git/commitdiff
git/log: handle absolute paths gracefully.
authorOri Bernstein <ori@eigenstate.org>
Sun, 20 Jun 2021 17:07:33 +0000 (17:07 +0000)
committerOri Bernstein <ori@eigenstate.org>
Sun, 20 Jun 2021 17:07:33 +0000 (17:07 +0000)
strip off the repo prefix if the path given
is absolute, and then look up as though it
was rooted in the repo.

sys/src/cmd/git/log.c

index 4f2c7f8094d1ef0abd4cc0b2284b9ee35257570c..2a0692abab07fbc1b4b2b201b8203764ffe44405 100644 (file)
@@ -282,7 +282,7 @@ void
 main(int argc, char **argv)
 {
        char path[1024], repo[1024], *p, *r;
-       int i;
+       int i, nrepo;
 
        ARGBEGIN{
        case 'e':
@@ -301,15 +301,21 @@ main(int argc, char **argv)
 
        if(findrepo(repo, sizeof(repo)) == -1)
                sysfatal("find root: %r");
+       nrepo = strlen(repo);
        if(argc != 0){
                if(getwd(path, sizeof(path)) == nil)
                        sysfatal("getwd: %r");
-               if(strlen(path) < strlen(repo))
-                       sysfatal("path changed");
-               p = path + strlen(repo);
+               if(strncmp(path, repo, nrepo) != 0)
+                       sysfatal("path shifted??");
+               p = path + nrepo;
                pathfilt = emalloc(sizeof(Pfilt));
                for(i = 0; i < argc; i++){
-                       r = smprint("./%s/%s", p, argv[i]);
+                       if(*argv[i] == '/'){
+                               if(strncmp(argv[i], repo, nrepo) != 0)
+                                       continue;
+                               r = smprint("./%s", argv[i]+nrepo);
+                       }else
+                               r = smprint("./%s/%s", p, argv[i]);
                        cleanname(r);
                        filteradd(pathfilt, r);
                        free(r);