ref: d5e2a8d00b4f769d56e567905c4c6689e803a49e
parent: 92eaddb3cdb3bd9921d9178b0d21ecc0771d76d1
author: kvik <kvik@a-b.xyz>
date: Thu Nov 14 22:05:51 EST 2019
This change factors out a common initialization sequence done by most scripts into a shared gitup function that 1) determines if it was run in a git repository (exiting if not), 2) stashes the repository root path into a shared $gitroot variable, 3) changes directory to $gitroot, and 4) runs git/fs. git/add and git/revert are updated to make use of $gitroot, resulting in some further cleanup. Move git/fs init into common.rc; update scripts.
--- a/add
+++ b/add
@@ -7,6 +7,8 @@
-r remove file
'
+gitup
+
add='tracked'
del='removed'
while(~ $1 -* && ! ~ $1 --){@@ -22,16 +24,7 @@
if(~ $1 --)
shift
-dir=`{pwd}-base=`{git/conf -r}-x=$status
-if(! ~ $x ''){- echo git/conf: $x `{pwd} >[1=2]- exit $x
-}
-
-cd $base
-rel=`{sed 's@^'$base'/*@@' <{echo $dir}}+rel=`{sed 's@^'$gitroot'/*@@' <{echo $dir}}if(~ $#rel 0)
rel=''
for(f in $*){--- a/branch
+++ b/branch
@@ -9,11 +9,7 @@
-s create a branch but stay on current one
'
-if(! cd `{git/conf -r}){- exit 'not in git repository'
- exit notgit
-}
-git/fs
+gitup
stay=()
create=()
--- a/commit
+++ b/commit
@@ -92,10 +92,9 @@
rm -f .git/index9/merge-parents
}
+gitup
+
msgfile=/tmp/git-msg.$pid
-if(! cd `{git/conf -r})- exit 'not in git repository'
-git/fs
mkdir -p .git/refs
if(git/walk -q){echo no changes to commit >[1=2]
--- a/common.rc
+++ b/common.rc
@@ -5,3 +5,13 @@
>[2=1] echo -n 'usage:' $usage
exit 'usage'
}
+
+fn gitup{+ gitroot=`{git/conf -r >[2]/dev/null}+ if(~ $#gitroot 0){+ >[2=1] echo 'not a git repository'
+ exit 'not a git repository'
+ }
+ cd $gitroot
+ git/fs
+}
--- a/diff
+++ b/diff
@@ -7,11 +7,7 @@
-b diff relative to branch "branch"
'
-if(! cd `{git/conf -r}){- echo 'not a git repository' >[1=2]
- exit notgit
-}
-git/fs
+gitup
while(~ $1 -* && ! ~ $1 --){ switch($1){--- a/export
+++ b/export
@@ -6,9 +6,8 @@
git/export [query]
'
-if(! cd `{git/conf -r})- exit 'not in git repository'
-git/fs
+gitup
+
q=$*
if(~ $#q 0)
q=HEAD
--- a/import
+++ b/import
@@ -6,9 +6,6 @@
git/import [file ...]
'
-if(! cd `{git/conf -r})- exit 'not in git repository'
-
fn die{echo $patchname: $1 $2
exit $2
@@ -108,6 +105,8 @@
exit $st
}
}
+
+gitup
patches=(/fd/0)
if(! ~ $#* 0)
--- a/log
+++ b/log
@@ -6,8 +6,9 @@
git/log [-q query] [file ...]
'
+gitup
+
base=/mnt/git/object/
-git/fs
branch=`{git/branch}query=()
--- a/merge
+++ b/merge
@@ -25,13 +25,11 @@
}
}
+gitup
+
if(! ~ $#* 1)
usage
-if(! cd `{git/conf -r}){- echo 'not in git repository'
- exit 'badrepo'
-}
-git/fs
+
theirs=`{git/query $1} ours=`{git/query HEAD} base=`{git/query $theirs ^ ' ' ^ $ours ^ '@'}--- a/pull
+++ b/pull
@@ -37,11 +37,8 @@
'
}
-if(! cd `{git/conf -r}){- echo 'not in git repository' >[1=2]
- exit notgit
-}
-git/fs
+gitup
+
branch=refs/`{git/branch}remote=()
incoming=()
--- a/push
+++ b/push
@@ -10,10 +10,7 @@
-u push to remote "upstream" (default: origin)
'
-if(! cd `{git/conf -r})- exit 'not in git repository'
-
-git/fs
+gitup
remote=()
sendall=''
--- a/revert
+++ b/revert
@@ -7,12 +7,14 @@
-c revert to commit "query" (default: HEAD)
'
+rel=`{pwd}+gitup
+
commit=/mnt/git/HEAD
-pfx=`{pwd} while(~ $1 -* && ! ~ $1 --){ switch($1){case -c;
- commit=`{git/query -p $2};+ commit=`{git/query -p $2}shift
case *;
usage
@@ -20,15 +22,9 @@
shift
}
-if(! cd `{git/conf -r}){- echo not a git repository >[1=2]
- exit notgit
-}
-pfx=`{echo $pfx | sed 's@^'^`{pwd}^'@@g'}-if(~ $#pfx 0)
- pfx=''
-git/fs
+rel=`{echo $rel | sed 's@^'$gitroot'/?@@'}+if(~ $#rel 0)
+ rel=''
-for(f in `$nl{cd $commit/tree/ && walk -f ./$pfx/$*})- cp -- $commit/tree/$pfx/$f ./$pfx/$f
-
+for(f in `$nl{cd $commit/tree/ && walk -f ./$rel/$*})+ cp -- $commit/tree/$f $f
--
⑨