]> git.lizzy.rs Git - plan9front.git/commitdiff
git/fs: move mount point to $repo/.git/fs
authorOri Bernstein <ori@eigenstate.org>
Mon, 31 May 2021 00:46:21 +0000 (17:46 -0700)
committerOri Bernstein <ori@eigenstate.org>
Mon, 31 May 2021 00:46:21 +0000 (17:46 -0700)
Moving the mount point to within the repo
directory means that we can have multiple
git repos mounted at once with no conflict.

14 files changed:
sys/lib/git/common.rc
sys/man/1/git
sys/man/4/gitfs
sys/src/cmd/git/add
sys/src/cmd/git/branch
sys/src/cmd/git/clone
sys/src/cmd/git/commit
sys/src/cmd/git/fs.c
sys/src/cmd/git/import
sys/src/cmd/git/merge
sys/src/cmd/git/query.c
sys/src/cmd/git/rebase
sys/src/cmd/git/revert
sys/src/cmd/git/walk.c

index 57361271271b3225c6aa4d6fd91fc555e67f942f..dbcef04bff3c53094353f3f1875667f55fd78423 100644 (file)
@@ -75,14 +75,17 @@ fn gitup{
        gitroot=`{git/conf -r >[2]/dev/null}
        if(~ $#gitroot 0)
                die 'not a git repository'
+       gitfs=$gitroot/.git/fs
        gitrel=`{pwd | subst '^'$"gitroot'/?'}
        if(~ $#gitrel 0)
                gitrel='.'
        cd $gitroot
        startfs=()
-       if(! test -e /mnt/git/ctl)
+       if(! test -d $gitfs)
+               mkdir -p $gitfs
+       if(! test -e $gitfs/ctl)
                startfs=true
-       if(! grep -s '^repo '$gitroot'$' /mnt/git/ctl >[2]/dev/null)
+       if(! grep -s '^repo '$gitroot'$' $gitfs/ctl >[2]/dev/null)
                startfs=true
        if(~ $#startfs 1)
                git/fs
index 7b04c037b5e2614c8a88479f7b2f97fca5d49963..ad903a44d983d06ce0df1d6db5e5cbb2fe9ae45a 100644 (file)
@@ -18,7 +18,7 @@ git/pull, git/rm, git/serve
 .PP
 .B git/branch
 [
-.B -adns
+.B -admns
 ]
 [
 .B -b
@@ -211,7 +211,7 @@ This suite of
 tools provides a file interface to the
 .I .git
 directory mounted on
-.I /mnt/git.
+.I $repo/.git/fs.
 Modifications to the repository are done directly to the
 .I .git
 directory, and are reflected in the file system interface.
@@ -304,7 +304,7 @@ flag serves repositories relative to
 
 .PP
 .B Git/fs 
-serves a file system on /mnt/git.
+serves a file system on $repo/.git/fs.
 For full documentation, see
 .IR gitfs (4)
 
@@ -363,6 +363,13 @@ option, the branch is created but the files are not checked out.
 When passed the
 .I -d
 option, the branch is deleted.
+.PP
+When switching branches, git/branch will refuse to clobber
+modificiations.
+Passing the
+.I -m
+option will cause git9 to attempt to merge the changes between
+the branches.
 
 .PP
 .B Git/log
index 00c68edc39e22086baa8d3dc0fdd0c37c58ddb58..7ba097ad0cb7ce3d89518afdf7b3709ad1340165 100644 (file)
@@ -20,7 +20,7 @@ Git/fs serves a file system interface to a git repository in the
 current directory.
 This file system provides a read-only view into the repository contents.
 By default, it is mounted on
-.B /mnt/git.
+.B $repo/.git/fs.
 It does not cache mutable data, so any changes to the git repository will immediately be reflected in git/fs.
 
 .PP
@@ -83,7 +83,7 @@ The git repository being expected.
 .B .git/HEAD
 A reference to the current HEAD.
 Used to populate
-.B /mnt/git/HEAD
+.B $repo/.git/fs/HEAD
 .TP
 .git/config
 The per-repository configuation for git tools.
index cfe08ddaa0f2f659c042bcb8d4de011c212501e4..9b79d766b60b4cb652ebf94560e7c9c1c684b8f3 100755 (executable)
@@ -31,7 +31,7 @@ for(f in $files){
                # git/walk doesn't think this came from
                # a checkout.
                if(! test -e $addpath)
-                       if(~ $add 'tracked' || test -e /mnt/git/HEAD/tree/$f)
+                       if(~ $add 'tracked' || test -e $gitfs/HEAD/tree/$f)
                                touch $addpath
                rm -f $delpath
        }
index b4dac7162b393553b4335e5daaca40624f29dd42..f2656f2fa24b654722d148c1da4dcd4b89e3f5cc 100755 (executable)
@@ -13,7 +13,7 @@ deleted=()
 
 if(~ $#* 0){
        if(~ $#listall 0)
-               awk '$1=="branch"{print $2}' < /mnt/git/ctl
+               awk '$1=="branch"{print $2}' < $gitfs/ctl
        if not
                cd .git/refs/ && walk -f heads remotes
        exit
@@ -95,8 +95,8 @@ for(m in $cleanpaths){
 }
 
 for(ours in $dirtypaths){
-       common=/mnt/git/object/$orig/tree/$ours
-       theirs=/mnt/git/object/$base/tree/$ours
+       common=$gitfs/object/$orig/tree/$ours
+       theirs=$gitfs/object/$base/tree/$ours
        merge1 $ours $ours $common $theirs
 }
 
index 52346e3b33519d3670d4ee17b0ec8ac49e4df5a3..47043d57332c6a36acd509507cfd1c868d45b888 100755 (executable)
@@ -23,6 +23,7 @@ if(test -e $local)
 fn clone{
        flag +e
        mkdir -p $local/.git
+       mkdir -p $local/.git/fs
        mkdir -p $local/.git/objects/pack/
        mkdir -p $local/.git/refs/heads/
        
@@ -76,7 +77,7 @@ fn clone{
                }
        '} |[3] tr '\x0d' '\x0a' || die 'could not clone repository'
 
-       tree=/mnt/git/HEAD/tree
+       tree=.git/fs/HEAD/tree
        lbranch=`{git/branch}
        rbranch=`{echo $lbranch | subst '^heads' 'remotes/origin'}
        echo checking out repository...
index 7b754bb38eb6d96e94e1455764efa3d14f1ced8d..bcbe3b1c4db3a5f018bcf084b348a01223f0fd5d 100755 (executable)
@@ -19,15 +19,15 @@ fn whoami{
 
 fn findbranch{
        branch=`{git/branch}
-       if(test -e /mnt/git/branch/$branch/tree){
+       if(test -e $gitfs/branch/$branch/tree){
                refpath=.git/refs/$branch
                initial=false
        }
-       if not if(test -e /mnt/git/object/$branch/tree){
+       if not if(test -e $gitfs/object/$branch/tree){
                refpath=.git/HEAD
                initial=false
        }
-       if not if(! test -e /mnt/git/HEAD/tree){
+       if not if(! test -e $gitfs/HEAD/tree){
                refpath=.git/refs/$branch
                initial=true
        }
@@ -79,7 +79,7 @@ fn editmsg{
 
 fn parents{
        if(! ~ $#revise 0)
-               parents=`{cat /mnt/git/HEAD/parent}
+               parents=`{cat $gitfs/HEAD/parent}
        if not if(test -f .git/index9/merge-parents)
                parents=`{cat .git/index9/merge-parents | sort | uniq}
        if not if(~ $initial true)
@@ -129,8 +129,8 @@ if(~ $#msg 1)
        echo $msg >$msgfile.tmp
 if not if(~ $#revise 1){
        msg=1
-       echo revising commit `{cat /mnt/git/HEAD/hash}
-       cat /mnt/git/HEAD/msg >$msgfile.tmp
+       echo revising commit `{cat $gitfs/HEAD/hash}
+       cat $gitfs/HEAD/msg >$msgfile.tmp
 }
 
 files=()
index 1f4d5c99bac1dd5a17aa725a8564edcb80214996..f116f29737111d932ac9f0d41ba13ad345f53295 100644 (file)
@@ -79,7 +79,7 @@ char *qroot[] = {
 
 char   gitdir[512];
 char   *username;
-char   *mtpt = "/mnt/git";
+char   *mntpt = ".git/fs";
 char   **branches = nil;
 Cache  uqidcache[512];
 vlong  nextqid = Qmax;
@@ -839,8 +839,15 @@ main(int argc, char **argv)
 {
        gitinit();
        ARGBEGIN{
-       case 'd':       chatty9p++;     break;
-       default:        usage();        break;
+       case 'd':
+               chatty9p++;
+               break;
+       case 'm':
+               mntpt = EARGF(usage());
+               break;
+       default:
+               usage();
+               break;
        }ARGEND;
        if(argc != 0)
                usage();
@@ -848,6 +855,6 @@ main(int argc, char **argv)
        username = getuser();
        branches = emalloc(sizeof(char*));
        branches[0] = nil;
-       postmountsrv(&gitsrv, nil, "/mnt/git", MCREATE);
+       postmountsrv(&gitsrv, nil, mntpt, MCREATE);
        exits(nil);
 }
index 31103cde3f2a63e0173766d421cf59f046e3bf84..3d1424143efdeb1f8c95fa85f1eb28d2b8a0a0ff 100755 (executable)
@@ -14,9 +14,9 @@ fn apply @{
        msg=''
        parents='-p'^`{git/query HEAD}
        branch=`{git/branch}
-       if(test -e /mnt/git/branch/$branch/tree)
+       if(test -e $gitfs/branch/$branch/tree)
                refpath=.git/refs/$branch
-       if not if(test -e /mnt/git/object/$branch/tree)
+       if not if(test -e $gitfs/object/$branch/tree)
                refpath=.git/HEAD
        if not
                die 'invalid branch:' $branch
index 5517a3924721a23524799478945a95b2d4eaa90e..6e9791914eb0a124210d149adcce663640f45c2c 100755 (executable)
@@ -3,9 +3,9 @@ rfork ne
 . /sys/lib/git/common.rc
 
 fn merge{
-       ourbr=/mnt/git/object/$1/tree
-       basebr=/mnt/git/object/$2/tree
-       theirbr=/mnt/git/object/$3/tree
+       ourbr=$gitfs/object/$1/tree
+       basebr=$gitfs/object/$2/tree
+       theirbr=$gitfs/object/$3/tree
 
        all=`$nl{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | \
                subst -g '^('$ourbr'|'$basebr'|'$theirbr')/*' | sort | uniq}
index 5f1330dadec2ade9acb8f415c5cfc543721fdccd..cb0f243df3751d7139a8e70b8fe22c1ebefd883d 100644 (file)
@@ -154,7 +154,7 @@ main(int argc, char **argv)
 {
        int i, j, n;
        Hash *h;
-       char *p, *e, *s;
+       char *p, *e, *s, *objpfx;
        char query[2048], repo[512];
 
        ARGBEGIN{
@@ -173,6 +173,8 @@ main(int argc, char **argv)
                sysfatal("find root: %r");
        if(chdir(repo) == -1)
                sysfatal("chdir: %r");
+       if((objpfx = smprint("%s/.git/fs/object/", repo)) == nil)
+               sysfatal("smprint: %r");
        s = "";
        p = query;
        e = query + nelem(query);
@@ -187,7 +189,7 @@ main(int argc, char **argv)
                        sysfatal("diff: need 2 commits, got %d", n);
                diffcommits(h[0], h[1]);
        }else{
-               p = (fullpath ? "/mnt/git/object/" : "");
+               p = (fullpath ? objpfx : "");
                for(j = 0; j < n; j++)
                        print("%s%H\n", p, h[reverse ? n - 1 - j : j]);
        }
index 9ceb39f0017a42b617515e1b31e98eed86ef6276..395f3e693640569bd5a02f93be83a0cf4486b4d8 100755 (executable)
@@ -72,7 +72,7 @@ while(! ~ $#todo 0){
                exit
        case s squash
                git/export $c | git/import -n
-               msg=`''{cat /mnt/git/HEAD/msg; echo; cat /mnt/git/object/$c/msg}
+               msg=`''{cat $gitfs/HEAD/msg; echo; cat $gitfs/object/$c/msg}
                git/commit -rem $msg .
        case f fixup
                git/export $c | git/import -n
index af02f5cbf29bbdf71884ff502b0ba882599cc6b8..a3c775a781ad371ed0dca05d0f60301606e3dab1 100644 (file)
@@ -7,7 +7,7 @@ gitup
 flagfmt='c:query query' args='file ...'
 eval `''{aux/getflags $*} || exec aux/usage
 
-commit=/mnt/git/HEAD
+commit=$gitfs/HEAD
 if(~ $#query 1)
        commit=`{git/query -p $query}
 
index c50ac287360bf16f7b7386893a2ff813a0cc05a8..50a227e21bb3e2e59320d78d2f51b259b400dc55 100644 (file)
@@ -5,7 +5,7 @@
 #define NCACHE 4096
 #define TDIR ".git/index9/tracked"
 #define RDIR ".git/index9/removed"
-#define HDIR "/mnt/git/HEAD/tree"
+#define HDIR ".git/fs/HEAD/tree"
 typedef struct Cache   Cache;
 typedef struct Wres    Wres;
 struct Cache {
@@ -246,16 +246,14 @@ main(int argc, char **argv)
                usage();
        }ARGEND
 
-       if(access("/mnt/git/ctl", AEXIST) != 0)
-               sysfatal("no running git/fs");
        if(findrepo(repo, sizeof(repo)) == -1)
                sysfatal("find root: %r");
        if(chdir(repo) == -1)
                sysfatal("chdir: %r");
+       if(access(".git/fs/ctl", AEXIST) != 0)
+               sysfatal("no running git/fs");
        dirty = 0;
        memset(&r, 0, sizeof(r));
-       if(access("/mnt/git/ctl", AEXIST) != 0)
-               sysfatal("git/fs does not seem to be running");
        if(printflg == 0)
                printflg = Tflg | Aflg | Mflg | Rflg;
        if(argc == 0){