summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2021-06-20 17:07:33 +0000
committerOri Bernstein <ori@eigenstate.org>2021-06-20 17:07:33 +0000
commiteeb0f9a9dad1c09ba2c0985b1af2c99b1bebe4c1 (patch)
tree3e30a74e9b49ddae0484f4a888390cbbeb29596c
parenta87a4b763f58eb51ccfd5a9a394258c9398176aa (diff)
downloadplan9front-eeb0f9a9dad1c09ba2c0985b1af2c99b1bebe4c1.tar.xz
git/log: handle absolute paths gracefully.
strip off the repo prefix if the path given is absolute, and then look up as though it was rooted in the repo.
-rw-r--r--sys/src/cmd/git/log.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/sys/src/cmd/git/log.c b/sys/src/cmd/git/log.c
index 4f2c7f809..2a0692aba 100644
--- a/sys/src/cmd/git/log.c
+++ b/sys/src/cmd/git/log.c
@@ -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);