Skip to content

Commit

Permalink
all: sync with 9front fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
oridb committed Jun 6, 2021
1 parent 367ff60 commit 52bd6a5
Show file tree
Hide file tree
Showing 11 changed files with 125 additions and 82 deletions.
11 changes: 6 additions & 5 deletions add
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@ if(~ $remove 1){
if(~ $#* 0)
exec aux/usage
paths=`$nl{cleanname -d $gitrel $*}
if(~ $add tracked)
files=`$nl{walk -f $gitrel/$*}
files=`$nl{walk -f $paths}
if not
files=`$nl{cd .git/index9/tracked/ && walk -f $gitrel/$*}
files=`$nl{cd .git/index9/tracked/ && walk -f $paths}
for(f in $files){
if(! ~ `{cleanname $f} .git/*){
if(! ~ `$nl{cleanname $f} .git/*){
addpath=.git/index9/$add/$f
delpath=.git/index9/$del/$f
mkdir -p `{basename -d $addpath}
mkdir -p `{basename -d $delpath}
mkdir -p `$nl{basename -d $addpath}
mkdir -p `$nl{basename -d $delpath}
# We don't want a matching qid, so that
# git/walk doesn't think this came from
# a checkout.
Expand Down
8 changes: 5 additions & 3 deletions branch
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,10 @@ if(~ $#newbr 0){
commit=`{git/query $base} || die 'branch does not exist:' $base
if(~ $new */*)
mkdir -p .git/`{basename -d $new}
echo $commit > .git/$new
if(! ~ $#stay 0)
if(! ~ $#stay 0){
echo $commit > .git/$new
exit
}
basedir=`{git/query -p $base}
dirtypaths=()
cleanpaths=($modified $deleted)
Expand All @@ -74,11 +75,12 @@ if(! ~ $#dirtypaths 0){
cleanpaths=`$nl{echo $"x$nl$"y | sort | uniq -u}
}
if(! ~ $#cleanpaths 0)
cleandirs=`$nl{{for(p in $cleanpaths) basename -d $p} | uniq}
cleandirs=`$nl{echo $nl^$cleanpaths | sed 's@/[^/]+/?$@@' | uniq}
if(! ~ $#cleandirs 0){
mkdir -p $cleandirs
mkdir -p .git/index9/tracked/$cleandirs
}
echo $commit > .git/$new
for(m in $cleanpaths){
# Modifications can turn a file into
# a directory, or vice versa, so we
Expand Down
2 changes: 1 addition & 1 deletion clone
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ if(~ $#local 0)
if(~ $#branch 1)
branchflag=(-b $branch)
if(! ~ `{ls $local | wc -l} 0)
if(test -e $local)
die 'repository already exists:' $local
fn clone{
Expand Down
2 changes: 1 addition & 1 deletion commit
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ if not if(~ $#revise 1){
files=()
if(! ~ $#* 0)
files=`$nl{git/walk -c `$nl{cleanname $gitrel/$*}}
files=`$nl{git/walk -c `$nl{cleanname -d $gitrel $*}}
if(~ $status '' || ~ $#files 0 && ! test -f .git/index9/merge-parents && ~ $#revise 0)
die 'nothing to commit' $status
@{
Expand Down
11 changes: 6 additions & 5 deletions common.rc
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,13 @@ fn present {
}

# merge1 out theirs base ours
fn merge1 {
fn merge1 {@{
rfork e
n=$pid
out=$1
theirs=$2
ours=$2
base=$3
ours=$4
theirs=$4
tmp=$out.tmp
while(test -f $tmp){
tmp=$tmp.$n
Expand All @@ -59,7 +60,7 @@ fn merge1 {
if(! test -f $theirs)
theirs=/dev/null
if(! ape/diff3 -3 -m $ours $base $theirs > $tmp)
echo merge needed: $out
echo merge needed: $out >[1=2]

if(present $ours $base $theirs){
mv $tmp $out
Expand All @@ -69,7 +70,7 @@ fn merge1 {
rm -f $tmp $out
git/rm $out
}
}
}}

fn gitup{
gitroot=`{git/conf -r >[2]/dev/null}
Expand Down
2 changes: 1 addition & 1 deletion diff
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ if(~ $#commit 0)
files=()
if(! ~ $#* 0)
files=`{cleanname $gitrel/$*}
files=`{cleanname -d $gitrel $*}

branch=`{git/query -p $commit}
if(~ $summarize 1){
Expand Down
2 changes: 1 addition & 1 deletion init
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ if(~ $#upstream 0){
}
mkdir -p $dir/.git/refs/^(heads remotes)
mkdri -p $dir/.git/fs
mkdir -p $dir/.git/fs
>$dir/.git/config {
echo '[core]'
echo ' repositoryformatversion = p9.0'
Expand Down
6 changes: 0 additions & 6 deletions mkfile
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,6 @@ install:V:
mk $MKFLAGS $i.install
for (i in $RC)
mk $MKFLAGS $i.rcinstall
cp git.1.man /sys/man/1/git
cp gitfs.4.man /sys/man/4/gitfs
cp common.rc /sys/lib/git/common.rc

uninstall:V:
rm -rf $BIN /sys/lib/git /sys/man/1/git /sys/man/4/gitfs

%.rcinstall:V:
cp $stem $BIN/$stem
Expand Down
120 changes: 81 additions & 39 deletions proto.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,19 +285,37 @@ dialssh(Conn *c, char *host, char *, char *path, char *direction)
snprint(cmd, sizeof(cmd), "git-%s-pack", direction);
dprint(1, "exec ssh '%s' '%s' %s\n", host, cmd, path);
execl("/bin/ssh", "ssh", host, cmd, path, nil);
}else{
close(pfd[0]);
c->type = ConnSsh;
c->rfd = pfd[1];
c->wfd = dup(pfd[1], -1);
sysfatal("exec: %r");
}
close(pfd[0]);
c->type = ConnSsh;
c->rfd = pfd[1];
c->wfd = dup(pfd[1], -1);
return 0;
}

static int
githandshake(Conn *c, char *host, char *path, char *direction)
{
char *p, *e, cmd[512];

p = cmd;
e = cmd + sizeof(cmd);
p = seprint(p, e - 1, "git-%s-pack %s", direction, path);
if(host != nil)
p = seprint(p + 1, e, "host=%s", host);
if(writepkt(c, cmd, p - cmd + 1) == -1){
fprint(2, "failed to write message\n");
closeconn(c);
return -1;
}
return 0;
}

static int
dialhjgit(Conn *c, char *host, char *port, char *path, char *direction, int auth)
{
char *ds, *p, *e, cmd[512];
char *ds;
int pid, pfd[2];

if((ds = netmkaddr(host, "tcp", port)) == nil)
Expand All @@ -317,30 +335,26 @@ dialhjgit(Conn *c, char *host, char *port, char *path, char *direction, int auth
else
execl("/bin/tlsclient", "tlsclient", ds, nil);
sysfatal("exec: %r");
}else{
close(pfd[0]);
p = cmd;
e = cmd + sizeof(cmd);
p = seprint(p, e - 1, "git-%s-pack %s", direction, path);
p = seprint(p + 1, e, "host=%s", host);
c->type = ConnGit9;
c->rfd = pfd[1];
c->wfd = dup(pfd[1], -1);
if(writepkt(c, cmd, p - cmd + 1) == -1){
fprint(2, "failed to write message\n");
close(c->rfd);
close(c->wfd);
return -1;
}
}
return 0;
close(pfd[0]);
c->type = ConnGit9;
c->rfd = pfd[1];
c->wfd = dup(pfd[1], -1);
return githandshake(c, host, path, direction);
}

void
initconn(Conn *c, int rd, int wr)
{
c->type = ConnGit;
c->rfd = rd;
c->wfd = wr;
}

static int
dialgit(Conn *c, char *host, char *port, char *path, char *direction)
{
char *ds, *p, *e, cmd[512];
char *ds;
int fd;

if((ds = netmkaddr(host, "tcp", port)) == nil)
Expand All @@ -349,27 +363,51 @@ dialgit(Conn *c, char *host, char *port, char *path, char *direction)
fd = dial(ds, nil, nil, nil);
if(fd == -1)
return -1;
p = cmd;
e = cmd + sizeof(cmd);
p = seprint(p, e - 1, "git-%s-pack %s", direction, path);
p = seprint(p + 1, e, "host=%s", host);
c->type = ConnGit;
c->rfd = fd;
c->wfd = dup(fd, -1);
if(writepkt(c, cmd, p - cmd + 1) == -1){
fprint(2, "failed to write message\n");
close(fd);
return -1;
}
return 0;
return githandshake(c, host, path, direction);
}

void
initconn(Conn *c, int rd, int wr)
static int
servelocal(Conn *c, char *path, char *direction)
{
int pid, pfd[2];

if(pipe(pfd) == -1)
sysfatal("unable to open pipe: %r");
pid = fork();
if(pid == -1)
sysfatal("unable to fork");
if(pid == 0){
close(pfd[1]);
dup(pfd[0], 0);
dup(pfd[0], 1);
execl("/bin/git/serve", "serve", "-w", nil);
sysfatal("exec: %r");
}
close(pfd[0]);
c->type = ConnGit;
c->rfd = rd;
c->wfd = wr;
c->rfd = pfd[1];
c->wfd = dup(pfd[1], -1);
return githandshake(c, nil, path, direction);
}

static int
localrepo(char *uri, char *path, int npath)
{
int fd;

snprint(path, npath, "%s/.git/../", uri);
fd = open(path, OREAD);
if(fd < 0)
return -1;
if(fd2path(fd, path, npath) != 0){
close(fd);
return -1;
}
close(fd);
return 0;
}

int
Expand All @@ -378,12 +416,16 @@ gitconnect(Conn *c, char *uri, char *direction)
char proto[Nproto], host[Nhost], port[Nport];
char repo[Nrepo], path[Npath];

memset(c, 0, sizeof(Conn));
c->rfd = c->wfd = c->cfd = -1;

if(localrepo(uri, path, sizeof(path)) == 0)
return servelocal(c, path, direction);

if(parseuri(uri, proto, host, port, path, repo) == -1){
werrstr("bad uri %s", uri);
return -1;
}

memset(c, 0, sizeof(Conn));
if(strcmp(proto, "ssh") == 0)
return dialssh(c, host, port, path, direction);
else if(strcmp(proto, "git") == 0)
Expand Down
23 changes: 16 additions & 7 deletions save.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down
Loading

0 comments on commit 52bd6a5

Please sign in to comment.