git/commit: allow passing absolute paths

we would treat paths as relative, and not
step past leading '/'s, leading to an infinte
loop.
This commit is contained in:
Ori Bernstein 2021-06-05 22:07:57 -04:00
parent f9ae020332
commit 74912993de

View file

@ -345,18 +345,25 @@ void
main(int argc, char **argv) main(int argc, char **argv)
{ {
Hash th, ch, parents[Maxparents]; Hash th, ch, parents[Maxparents];
char *msg, *name, *email, *dstr; char *msg, *name, *email, *dstr, cwd[1024];
int i, r, nparents; int i, r, ncwd, nparents;
vlong date; vlong date;
Object *t; 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; msg = nil;
name = nil; name = nil;
email = nil; email = nil;
dstr = nil; dstr = nil;
date = time(nil); date = time(nil);
nparents = 0; nparents = 0;
gitinit(); ncwd = strlen(cwd);
ARGBEGIN{ ARGBEGIN{
case 'm': msg = EARGF(usage()); break; case 'm': msg = EARGF(usage()); break;
case 'n': name = EARGF(usage()); break; case 'n': name = EARGF(usage()); break;
@ -385,12 +392,14 @@ main(int argc, char **argv)
} }
if(msg == nil || name == nil) if(msg == nil || name == nil)
usage(); usage();
for(i = 0; i < argc; i++) for(i = 0; i < argc; i++){
cleanname(argv[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(); t = findroot();
r = treeify(t, argv, argv + argc, 0, &th); r = treeify(t, argv, argv + argc, 0, &th);
if(r == -1) if(r == -1)