/tmp/diff100000044156:49,62 - /rc/bin/git/defs:49,64
}
fn whoami{
- name=`$nl{git/conf user.name}
- email=`$nl{git/conf user.email}
+ ifs=$nl {
+ name=`{git/conf user.name}
+ email=`{git/conf user.email}
if(test -f /adm/keys.who){
if(~ $name '')
- name=`$nl{awk -F'|' '$1=="'$user'" {x=$3} END{print x}' </adm/keys.who}
+ name=`{awk -F'|' '$1=="'$user'" {x=$3} END{print x}' </adm/keys.who}
if(~ $email '')
- email=`$nl{awk -F'|' '$1=="'$user'" {x=$5} END{print x}' </adm/keys.who}
+ email=`{awk -F'|' '$1=="'$user'" {x=$5} END{print x}' </adm/keys.who}
}
+ }
if(~ $name '')
name=$user
if(~ $email '')
/tmp/diff100000044156:86,92 - /rc/bin/git/defs:88,96
theirs=/dev/null
if(mergeperm $ours $base $theirs){
- mkdir -p `$nl{basename -d $tmp}
+ ifs=$nl {
+ mkdir -p `{basename -d $tmp}
+ }
if(! merge3 $ours $base $theirs > $tmp)
echo merge needed: $out >[1=2]
mv $tmp $out
/tmp/diff100000044156:100,113 - /rc/bin/git/defs:104,119
}}
fn gitup{
- gitroot=`$nl{git/conf -r >[2]/dev/null}
+ ifs=$nl {
+ gitroot=`{git/conf -r >[2]/dev/null}
if(~ $#gitroot 0)
die 'not a git repository'
gitfs=$gitroot/.git/fs
- gitrel=`$nl{pwd | drop $gitroot | sed 's@^/@@'}
+ gitrel=`{pwd | drop $gitroot | sed 's@^/@@'}
if(~ $#gitrel 0)
gitrel='.'
- if(! cd $gitroot)
+ }
+ if(! builtin cd $gitroot)
die cd $gitroot: no repo there
startfs=()
mkdir -p $gitfs
/tmp/diff100000044156:119,122 - /rc/bin/git/defs:125,152
git/fs >[1=2]
if not
status=''
+ }
+
+ fn walk {
+ git/aux/walk $*
+ }
+
+ fn merge3 {
+ git/aux/merge3 $*
+ }
+
+ fn patch {
+ git/aux/patch $*
+ }
+
+ fn diff {
+ ape/diff $*
+ }
+
+ fn hold {
+ {
+ echo holdon >[1=3]
+ cat $1 > /dev/cons
+ cat /dev/cons > $1
+ } >[3]/dev/consctl
}
/tmp/diff100000044161:1,19 - /rc/bin/git/add:1,21
#!/bin/rc -e
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='r:remove'; args='file ...'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='r'; args='file ...'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
s=A
- if(~ $remove 1)
+ if(~ $flagr 1)
s=R
if(~ $#* 0)
exec aux/usage
- paths=`$nl{cleanname -d $gitrel $* | drop $gitroot}
+ ifs=$nl {
+ paths=`{cleanname -d $gitrel $* | drop $gitroot}
+ }
walk -f ./$paths | grep -v '^(./)?.git/' | \
sed 's/^/'$s' NOQID 0 /' >> .git/INDEX9
exit ''
/tmp/diff100000044166:1,12 - /rc/bin/git/branch:1,19
#!/bin/rc -e
rfork en
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='a:listall, b:baseref ref, r:remove, n:newbr, s:stay, m:merge, M:nomod'
+ flagfmt='a,r,n,s,m,M,b ref'
args='[branch]'
- eval `''{aux/getflags $*} || exec aux/usage
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ listall=$flaga
+ baseref=$flagb
+ remove=$flagr
+ newbr=$flagn
+ stay=$flags
+ merge=$flagm
+ nomod=$flagM
modified=()
deleted=()
/tmp/diff100000044166:40,46 - /rc/bin/git/branch:47,55
if(! ~ $#baseref 0)
die update would clobber $branch with $baseref
if(! test -e .git/$new){
- baseref=`$nl{echo -n $new | sed s@refs/heads/@refs/remotes/origin/@}
+ ifs=$nl {
+ baseref=`{echo -n $new | sed s@refs/heads/@refs/remotes/origin/@}
+ }
if(! base=`{git/query $baseref})
exit 'bad ref'
}
/tmp/diff100000044166:54,61 - /rc/bin/git/branch:63,72
if not
base=`{git/query HEAD} || exit 'bad ref'
- modified=`$nl{git/query -c HEAD $base | grep '^[^-]' | subst '^..'}
- deleted=`$nl{git/query -c HEAD $base | grep '^-' | subst '^..'}
+ ifs=$nl {
+ modified=`{git/query -c HEAD $base | grep '^[^-]' | subst '^..'}
+ deleted=`{git/query -c HEAD $base | grep '^-' | subst '^..'}
+ }
# if we remove the current branch without switching, bad things happen
if(~ $remove 1 && ~ $origbranch $new)
/tmp/diff100000044166:76,82 - /rc/bin/git/branch:87,95
basedir=`{git/query -p $base}
dirtypaths=()
if(! ~ $#modified 0 || ! ~ $#deleted 0)
- dirtypaths=`$nl{git/walk -cfRMA $modified $deleted}
+ ifs=$nl {
+ dirtypaths=`{git/walk -cfRMA $modified $deleted}
+ }
if(~ $#dirtypaths 0)
cleanpaths=($modified $deleted)
if not {
/tmp/diff100000044166:95,101 - /rc/bin/git/branch:108,116
}
for(m in $cleanpaths){
- d=`$nl{basename -d $m}
+ ifs=$nl {
+ d=`{basename -d $m}
+ }
mkdir -p $d
# Modifications can turn a file into
# a directory, or vice versa, so we
/tmp/diff100000044171:1,10 - /rc/bin/git/clone:1,11
#!/bin/rc
rfork en
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
- flagfmt='d:debug, b:branch branch'; args='remote [local]'
- eval `''{aux/getflags $*} || exec aux/usage
- if(~ $debug 1)
+ flagfmt='d,b branch'; args='remote [local]'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ branch = $flagb
+ if(~ $flagd 1)
debug=(-d)
remote=$1
/tmp/diff100000044171:13,20 - /rc/bin/git/clone:14,23
if(~ $#remote 0)
exec aux/usage
if(~ $#local 0)
- local=`$nl{basename `$nl{echo $remote | sed 's@.*/([^/]+)/*$@\1@'} .git}
- if(~ $#branch 1)
+ ifs=$nl {
+ local=`{basename `{echo $remote | sed 's@.*/([^/]+)/*$@\1@'} .git}
+ }
+ if(~ $#flagb 1)
branchflag=(-b $branch)
if(test -e $local && ~ `{ls $local | sed 1q | wc -l} 1)
/tmp/diff100000044171:67,73 - /rc/bin/git/clone:70,76
refdir = headref;
gsub("/?[^/]*/?$", "", refdir)
gsub("^refs/remotes/origin", "refs/heads", headref)
- system("mkdir -p `{basename -d .git/"headref"}");
+ system("rc -c ''mkdir -p `{basename -d .git/"headref"}''");
system("cp .git/" remote " .git/" headref)
print "ref: " headref > ".git/HEAD"
}else if(headhash != ""){
/tmp/diff100000044171:87,93 - /rc/bin/git/clone:90,97
git/fs
@ {builtin cd $tree && tar cif /fd/1 .} | @ {tar xf /fd/0} \
|| die 'checkout failed:' $status
- {for(f in `$nl{cd $tree && walk -f})
+ ifs=$nl \
+ {for(f in `{cd $tree && walk -f})
echo 'T NOQID 0 '$f} > .git/INDEX9
}
if not{
/tmp/diff100000044176:1,6 - /rc/bin/git/commit:1,6
#!/bin/rc -e
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
fn findbranch{
branch=`{git/branch}
/tmp/diff100000044176:74,80 - /rc/bin/git/commit:74,80
}
fn commit{
- msg=`''{cat $msgfile}
+ {ifs=() {msg=`{cat $msgfile}}}
if(! ~ $#parents 0)
pflags='-p'^$parents
hash=`{git/save -n $"name -e $"email -m $"msg $pflags $files || die $status}
/tmp/diff100000044176:103,110 - /rc/bin/git/commit:103,111
gitup
- flagfmt='m:msg message, r:revise, e:edit'; args='[file ...]'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='r,e,m message'; args='[file ...]'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ revise=$flagr edit=$flage msg=$flagm
msgfile=/tmp/git-msg.$pid
if(~ $#msg 1)
/tmp/diff100000044176:116,125 - /rc/bin/git/commit:117,128
}
files=()
- if(test -f .git/merge-parents)
- files=`$nl{git/query -c `{cat .git/merge-parents} | sed 's/^..//'}
- if(! ~ $#* 0)
- files=($files `$nl{git/walk -fRMA -c `$nl{cleanname -d $gitrel $*}})
+ ifs=$nl {
+ if(test -f .git/merge-parents)
+ files=`{git/query -c `{cat .git/merge-parents} | sed 's/^..//'}
+ if(! ~ $#* 0)
+ files=($files `{git/walk -fRMA -c `{cleanname -d $gitrel $*}})
+ }
if(~ $status '' || ~ $#files 0 && ! test -f .git/merge-parents && ~ $#revise 0)
die 'nothing to commit'
@{
/tmp/diff100000044181:109,115 - /rc/bin/git/compat:109,118
filter=cat
if not
filter='-e(^|/)'^$*^'$'
- for(b in `$nl{cd $gitroot/.git/refs/ && walk -f})
+ ifs=$nl {
+ refs=`{cd $gitroot/.git/refs/ && walk -f}
+ }
+ for(b in $refs)
echo `{cat $gitroot/.git/refs/$b} refs/$b
}
/tmp/diff100000044181:176,182 - /rc/bin/git/compat:179,187
fn cmd_ls-remote{
if(~ $1 -q)
shift
- remote=`$nl{git/conf 'remote "'$1'".url'}
+ ifs=$nl {
+ remote=`{git/conf 'remote "'$1'".url'}
+ }
if(~ $#remote 0)
remote=$1
git/get -l $remote | awk '/^remote/{print $3"\t"$2}'
/tmp/diff100000044181:197,203 - /rc/bin/git/compat:202,208
fn die {
>[1=2] echo git $_cmdname: $*
- exit $_cmdname: $*
+ exit '$_cmdname: '$"*
}
_cmdname=$1
/tmp/diff100000044186:1,11 - /rc/bin/git/diff:1,12
#!/bin/rc
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='c:commit branch, s:summarize, u:uncommitted'; args='[file ...]'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='s,u,c branch'; args='[file ...]'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ summarize=$flags uncommitted=$flagu commit=$flagc
bparam=(-b $commit)
if(~ $#commit 0){
/tmp/diff100000044186:31,37 - /rc/bin/git/diff:32,39
mntgen /mnt/scratch
bind $branch/tree/ /mnt/scratch/a
bind . /mnt/scratch/b
- for(f in `$nl{git/walk $bparam -c -f$filt $cparam $files}){
+ ifs=$nl \
+ for(f in `{git/walk $bparam -c -f$filt $cparam $files}){
if(~ $#showed 0){
echo diff `{git/query $commit} uncommitted
showed=1
/tmp/diff100000044191:1,6 - /rc/bin/git/export:1,6
#!/bin/rc
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
patchname=/tmp/git.patchname.$pid
patchfile=/tmp/git.patchfile.$pid
/tmp/diff100000044191:10,17 - /rc/bin/git/export:10,18
gitup
- flagfmt='o:patchdir patchdir'; args='[query]'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='o patchdir'; args='[query]'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ patchdir=$flago
if(~ $#patchdir 1 && ! test -d $patchdir)
mkdir -p $patchdir
/tmp/diff100000044191:31,37 - /rc/bin/git/export:32,40
for(c in $commits){
cp=`{git/query -p $c}
pp=`{git/query -p $c'~'}
- fc=`$nl{git/query -c $c~ $c | sed 's/^..//'}
+ ifs=$nl {
+ fc=`{git/query -c $c~ $c | sed 's/^..//'}
+ }
@{
rfork n
/tmp/diff100000044191:42,48 - /rc/bin/git/export:45,51
bind $cp/tree b
echo From: `{cat $cp/author}
- echo Date: `{date -uf'WW, DD MMM YYYY hh:mm:ss Z' `{walk -em $cp/author}}
+ echo Date: `{date `{walk -em $cp/author}}
<$cp/msg awk '
NR == 1 {
n = ENVIRON["n"]
/tmp/diff100000044196:1,12 - /rc/bin/git/hist:1,13
#!/bin/rc
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='n:num count'; args='files...'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='n count'; args='files...'
+ ifs=() {eval `{aux/getflags $*}} || exec aux/usage
if(~ $#* 0) exec aux/usage
+ num=$flagn
fn dodiff {
while(t=`{read}){
/tmp/diff100000044201:1,15 - /rc/bin/git/import:1,23
#!/bin/rc
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
diffpath=/tmp/gitimport.$pid.diff
fn sigexit {
- rm -f $diffpath
+ rm -f $diffpath $diffpath.*
}
fn apply1 {
+ ifs=() {
+ adate = `{cat $diffpath.adate}
+ amail = `{cat $diffpath.amail}
+ aname = `{cat $diffpath.aname}
+ msg = `{cat $diffpath.msg}
+ }
adate=`{seconds $adate}
- files=`$nl{patch -np1 < $diffpath}
+ ifs=$nl {
+ files=`{patch -np1 < $diffpath}
+ }
if(! git/walk -q $files){
>[1=2] {
echo patch would clobber files:
/tmp/diff100000044201:18,24 - /rc/bin/git/import:26,32
}
}
echo applying $msg | sed 1q
- if(! files=`$nl{patch -p1 < $diffpath})
+ if(! ifs=$nl { files=`{patch -p1 < $diffpath} })
die 'patch failed'
for(f in $files){
if(test -e $f)
/tmp/diff100000044201:37,43 - /rc/bin/git/import:45,50
exit ''
}
-
fn apply @{
git/fs
amail=''
/tmp/diff100000044201:52,74 - /rc/bin/git/import:59,84
refpath=.git/HEAD
if not
die 'invalid branch:' $branch
+ bind /bin/rc /$cputype/bin/ape/sh
awk '
function doapply(){
if(aname == "" || amail == "" || date == "" || gotmsg == "")
exit("missing headers");
- printf "%s", aname > "/env/aname"
- printf "%s", amail > "/env/amail"
- printf "%s", date > "/env/adate"
+ printf "%s", aname > (diffpath ".aname")
+ printf "%s", amail > (diffpath ".amail")
+ printf "%s", date > (diffpath ".adate")
if(system("rc -c apply1") != 0)
exit("patch failed");
- close("/env/aname")
- close("/env/amail")
- close("/env/adate")
- close(ENVIRON["diffpath"])
+ close(diffpath ".aname")
+ close(diffpath ".amail")
+ close(diffpath ".adate")
+ close(diffpath ".msg")
+ close(diffpath)
applied = 1
}
BEGIN{
state="headers"
+ diffpath = ENVIRON["diffpath"]
}
state=="diff" && !/^[-+ @]|^diff|^$/{
state="footers";
/tmp/diff100000044201:93,99 - /rc/bin/git/import:103,109
state=="headers" && /^Subject:/{
sub(/^Subject:[ \t]*([Rr][Ee]:)?[ \t]*(\[[^\]]*\][ \t]*)*/, "", $0);
gotmsg = 1
- print > "/env/msg"
+ print > (diffpath".msg")
}
state=="headers" && /^$/ {
state="body"
/tmp/diff100000044201:108,120 - /rc/bin/git/import:118,130
}
state=="body" {
if(empty)
- printf "\n" > "/env/msg"
+ printf "\n" > (diffpath".msg")
empty=0
sub(/[ ]+$/, "")
- print > "/env/msg"
+ print > (diffpath".msg")
}
state=="diff" {
- print > ENVIRON["diffpath"]
+ print > diffpath
}
END{
if(!failed && state == "diff" && doapply() != 0){
/tmp/diff100000044201:127,134 - /rc/bin/git/import:137,145
gitup
- flagfmt='n:nocommit'; args='file ...'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='n'; args='file ...'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ nocommit=$flagn
patches=(/fd/0)
if(! ~ $#* 0)
/tmp/diff100000044206:1,9 - /rc/bin/git/init:1,10
#!/bin/rc -e
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
- flagfmt='u:upstream upstream,b:branch branch'; args='name'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='u upstream,b branch'; args='name'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ upstream=$flagu branch=$flagb
dir=$1
if(~ $#dir 0)
/tmp/diff100000044211:1,6 - /rc/bin/git/merge:1,6
#!/bin/rc -e
rfork ne
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
fn merge{
ourbr=$gitfs/object/$1/tree
/tmp/diff100000044211:7,13 - /rc/bin/git/merge:7,15
basebr=$gitfs/object/$2/tree
theirbr=$gitfs/object/$3/tree
- all=`$nl{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | sort | uniq}
+ ifs=$nl {
+ all=`{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | sort | uniq}
+ }
for(f in $all){
ours=$ourbr/$f
base=$basebr/$f
/tmp/diff100000044211:19,25 - /rc/bin/git/merge:21,27
gitup
flagfmt=''; args='theirs'
- eval `''{aux/getflags $*} || exec aux/usage
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
if(! ~ $#* 1)
exec aux/usage
/tmp/diff100000044216:1,6 - /rc/bin/git/pull:1,6
#!/bin/rc -e
rfork en
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
fn update{
upstream=$1
/tmp/diff100000044216:9,18 - /rc/bin/git/pull:9,19
dflag=()
if(! ~ $#debug 0)
dflag='-d'
- heads=`$nl{
+ ifs=$ln {
+ heads=`{
# safe to split in awk, branch names may not
# have spaces or newlines.
- git/query `$nl{
+ git/query `{
cd .git/refs && \
walk -f -emp heads remotes | \
sort -rn | \
/tmp/diff100000044216:19,24 - /rc/bin/git/pull:20,26
awk '{print $2}'
}
}
+ }
if(! ~ $#heads 0)
heads='-h'^$heads
{git/get $dflag -u $upstream $heads $url >[2=3] || die $status} | awk '
/tmp/diff100000044216:27,35 - /rc/bin/git/pull:29,35
hash=$3
gsub("^refs/heads", "refs/remotes/'$upstream'", ref)
outfile = ".git/"ref
- print outfile > "/env/outfile"
- system("mkdir -p `$nl{basename -d $outfile}");\
- close("/env/outfile")
+ system("exec rc -c ''ifs=$nl {mkdir -p `{basename -d " outfile "}}''");\
print hash > outfile;
close(outfile);
}
/tmp/diff100000044216:38,51 - /rc/bin/git/pull:38,53
gitup
- flagfmt='d:debug, q:quiet, f:fetchonly,
- u:upstream upstream'
+ flagfmt='d,q,f,u upstream'
args=''
- eval `''{aux/getflags $*} || exec aux/usage
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ debug=$flagd quiet=$flagq fetchonly=$flagf upstream=$flagu
if(~ $#upstream 0)
upstream=origin
- remote=`$nl{git/conf 'remote "'$upstream'".url'}
+ ifs=$nl {
+ remote=`{git/conf 'remote "'$upstream'".url'}
+ }
if(~ $#remote 0){
remote=$upstream
upstream=THEM
/tmp/diff100000044221:1,17 - /rc/bin/git/push:1,20
#!/bin/rc -e
rfork en
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='a:pushall, b:branch branch, f:force, d:debug,
- r:remove remove, u:upstream upstream' args=''
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='a,f,d,b branch,r remove,u upstream' args=''
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ pushall=$flaga branch=$flagb force=$flagf debug=$flagd
+ remove=$flagr upstream=$flagu
if(! ~ $#* 0)
exec aux/usage
if(~ $pushall 1)
- branch=`$nl{cd .git/refs/heads && walk -f}
+ ifs=$nl {
+ branch=`{cd .git/refs/heads && walk -f}
+ }
if(~ $#branch 0)
branch=`{git/branch}
if(~ $#branch 0)
/tmp/diff100000044221:24,30 - /rc/bin/git/push:27,35
if(~ $#upstream 0)
upstream=origin
- remotes=`$nl{git/conf -a 'remote "'$upstream'".url'}
+ ifs=$nl {
+ remotes=`{git/conf -a 'remote "'$upstream'".url'}
+ }
if(~ $#remotes 0)
remotes=$upstream
branch=-b^$branch
/tmp/diff100000044221:31,37 - /rc/bin/git/push:36,44
if(! ~ $#remove 0)
remove=-r^$remove
for(remote in $remotes){
- updates=`$nl{git/send $debug $force $branch $remove $remote} || die $status
+ ifs=$nl {
+ updates=`{git/send $debug $force $branch $remove $remote} || die $status
+ }
for(ln in $updates){
u=`{echo $ln}
refpath=`{echo $u(2) | subst '^refs/heads/' '.git/refs/remotes/'$upstream'/'}
/tmp/diff100000044226:2,12 - /rc/bin/git/rebase:2,13
rfork en
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='s:src src, n:nocommit'; args='onto'
- eval `''{aux/getflags $*} || exec aux/usage
+ flagfmt='n,s src'; args='onto'
+ ifs=() eval `{aux/getflags $*} || exec aux/usage
+ nocommit=$flagn src=$flags
if(~ $#* 0) exec aux/usage
if(~ $#src 0)
/tmp/diff100000044231:1,19 - /rc/bin/git/revert:1,23
#!/bin/rc
rfork en
- . /sys/lib/git/common.rc
+ . /rc/bin/git/defs
gitup
- flagfmt='c:query query' args='file ...'
- if (! eval `''{aux/getflags $*} || ~ $#* 0)
+ flagfmt='c query' args='file ...'
+ if (! ifs=() eval `{aux/getflags $*} || ~ $#* 0)
exec aux/usage
+ query=$flagc
if(~ $#query 0)
query=HEAD
commit=`{git/query -p $query}
- files=`$nl{cleanname -d $gitrel $* | drop $gitroot}
- for(f in `$nl{git/walk -c -fRM -b $query $files}){
+ ifs=$nl {
+ files=`{cleanname -d $gitrel $* | drop $gitroot}
+ walked=`{git/walk -c -fRM -b $query $files}
+ }
+ for(f in $walked){
mkdir -p `{basename -d $f}
cp -x -- $commit/tree/$f $f
touch $f
/tmp/diff100000044261:135,141 - log.c:135,140
static int
show(Object *o)
{
- Tm tm;
char *p, *q, *e;
assert(o->type == GCommit);
/tmp/diff100000044261:147,159 - log.c:146,157
Bwrite(out, p, q - p);
Bputc(out, '\n');
}else{
- tmtime(&tm, o->commit->mtime, tzload("local"));
Bprint(out, "Hash:\t%H\n", o->hash);
Bprint(out, "Author:\t%s\n", o->commit->author);
if(o->commit->committer != nil
&& strcmp(o->commit->author, o->commit->committer) != 0)
Bprint(out, "Committer:\t%s\n", o->commit->committer);
- Bprint(out, "Date:\t%τ\n", tmfmt(&tm, "WW MMM D hh:mm:ss z YYYY"));
+ Bprint(out, "Date:\t%s", ctime(o->commit->mtime));
Bprint(out, "\n");
p = o->commit->msg;
e = p + o->commit->nmsg;
/tmp/diff100000044261:287,298 - log.c:285,299
sysfatal("chdir: %r");
gitinit();
- tmfmtinstall();
- out = Bfdopen(1, OWRITE);
+ out = emalloc(sizeof(Biobuf));
+ if(Binit(out, 1, OWRITE) == -1)
+ sysfatal("open out: %r");
+
if(queryexpr != nil)
showquery(queryexpr);
else
showcommits(commitid);
Bterm(out);
+ free(out);
exits(nil);
}
/tmp/diff100000044276:1738,1744 - pack.c:1738,1745
dprint(1, "generating pack\n");
if((fd = dup(fd, -1)) == -1)
return -1;
- if((bfd = Bfdopen(fd, OWRITE)) == nil)
+ bfd = emalloc(sizeof(Biobuf));
+ if(Binit(bfd, fd, OWRITE) == -1)
return -1;
if(hwrite(bfd, "PACK", 4, &st) == -1)
return -1;
/tmp/diff100000044276:1798,1805 - pack.c:1799,1811
goto error;
ret = 0;
error:
- if(Bterm(bfd) == -1)
+ if(Bterm(bfd) == -1){
+ free(bfd);
+ close(fd);
return -1;
+ }
+ free(bfd);
+ close(fd);
return ret;
}
/tmp/diff100000044281:5,12 - proto.c:5,10
#include "git.h"
#define Useragent "useragent git/2.24.1"
- #define Contenthdr "headers Content-Type: application/x-git-%s-pack-request"
- #define Accepthdr "headers Accept: application/x-git-%s-pack-result"
enum {
Nproto = 16,
/tmp/diff100000044281:508,516 - proto.c:506,511
int
writephase(Conn *c)
{
- char hdr[128];
- int n;
-
dprint(1, "start write phase\n");
if(c->type != ConnHttp)
return 0;
/tmp/diff100000044281:520,531 - proto.c:515,520
if(c->cfd != -1)
close(c->cfd);
if((c->cfd = webclone(c, c->url)) == -1)
- return -1;
- n = snprint(hdr, sizeof(hdr), Contenthdr, c->direction);
- if(write(c->cfd, hdr, n) == -1)
- return -1;
- n = snprint(hdr, sizeof(hdr), Accepthdr, c->direction);
- if(write(c->cfd, hdr, n) == -1)
return -1;
if((c->wfd = webopen(c, "postbody", OWRITE)) == -1)
return -1;
/tmp/diff100000044311:8,14 - serve.c:8,14
char *pathpfx = nil;
int allowwrite;
- _Noreturn static void
+ static void
fail(Conn *c, char *fmt, ...)
{
char msg[ERRMAX];
/tmp/diff100000044321:6,11 - walk.c:6,12
typedef struct Idxent Idxent;
#define NCACHE 4096
+ #define IOUNIT 16*1024
enum {
Rflg = 1 << 0,
/tmp/diff100000044321:457,464 - walk.c:458,465
if(access(".git/index9", AEXIST) == 0){
fprint(2, "index format conversion needed:\n");
fprint(2, "\tcd %s && git/fs\n", repopath);
- fprint(2, "\t@{cd .git/index9/removed >[2]/dev/null && walk -f | sed 's/^/R NOQID 0 /'} >> .git/INDEX9\n");
- fprint(2, "\t@{cd .git/fs/HEAD/tree && walk -f | sed 's/^/T NOQID 0 /'} >> .git/INDEX9\n");
+ fprint(2, "\t@{cd .git/index9/removed >[2]/dev/null && git/aux/walk -f | sed 's/^/R NOQID 0 /'} >> .git/INDEX9\n");
+ fprint(2, "\t@{cd .git/fs/HEAD/tree && git/aux/walk -f | sed 's/^/T NOQID 0 /'} >> .git/INDEX9\n");
exits("noindex");
}
staleidx = 1;
/tmp/diff100000044321:530,536 - walk.c:531,538
loadwdir(argrel[i]);
qsort(wdir, nwdir, sizeof(Idxent), idxcmp);
- if((o = Bfdopen(1, OWRITE)) == nil)
+ o = emalloc(sizeof(Biobuf));
+ if(Binit(o, 1, OWRITE) == -1)
sysfatal("open out: %r");
i = 0;
/tmp/diff100000044321:592,601 - walk.c:594,606
}
}
Bterm(o);
+ free(o);
if(isindexed && staleidx)
if((wfd = create(".git/INDEX9.new", OWRITE, 0644)) != -1){
- if((w = Bfdopen(wfd, OWRITE)) == nil){
+ w = emalloc(sizeof(Biobuf));
+ if(Binit(w, wfd, OWRITE) == -1){
+ free(w);
close(wfd);
goto Nope;
}
/tmp/diff100000044321:611,616 - walk.c:616,623
idx[i].path);
}
Bterm(w);
+ free(w);
+ close(wfd);
nulldir(&rn);
rn.name = "INDEX9";
if(remove(".git/INDEX9") == -1)
/tmp/diff100000044326:1,24 - mkfile:1,7
</$objtype/mkfile
- # it seems like a bad idea to include '.'
- # in the path with executables like 'rm'
- # in this directory.
- path=/bin
-
BIN=/$objtype/bin/git
- TARG=\
- conf\
- get\
- fs\
- log\
- query\
- repack\
- save\
- send\
- serve\
- walk
-
- RC=\
+ SCRIPTS=\
add\
branch\
clone\
/tmp/diff100000044326:34,41 - mkfile:17,37
push\
rebase\
revert\
- rm
+ rm\
+ TARG=\
+ conf\
+ get\
+ fs\
+ log\
+ query\
+ repack\
+ save\
+ send\
+ serve\
+ walk\
+ $SCRIPTS\
+
OFILES=\
delta.$O\
objset.$O\
/tmp/diff100000044326:46,63 - mkfile:42,99
ref.$O
HFILES=git.h
+ DIRS=aux
+ BASE=\
+ http://git.9front.org/plan9front/9front/ccef7a8bdca9d58397ab9ebe6af7ccf29edd6dad
+
</sys/src/cmd/mkmany
- # Override install target to install rc.
- install:V:
- mkdir -p $BIN
- mkdir -p /sys/lib/git
- for (i in $TARG)
- mk $MKFLAGS $i.install
- for (i in $RC)
- mk $MKFLAGS $i.rcinstall
+ ${SCRIPTS:%=$BIN/%}:
+ { echo '#!/bin/rc'; echo 'exec /rc/bin/git/'^`{basename $target}^' $*' } >$target
+ chmod +x $target
- %.rcinstall:V:
- cp $stem $BIN/$stem
- chmod +x $BIN/$stem
+ ${SCRIPTS:%=$O.%}:QV:
+ ;
+
+ $BIN/%: $BIN
+ $BIN:
+ mkdir -p $target
+
+ all:V: all.dirs
+ dirs:V: all.dirs
+ install:V: install.dirs
+ installall:V: installall.dirs
+ clean:V: clean.dirs test.clean
+ nuke:V: nuke.dirs
+ test:V: test.dirs
+
+ test:V:
+ cd test && mk $MKFLAGS test
+
+ test.clean:V:
+ cd test && mk $MKFLAGS clean
+
+ %.dirs:V:
+ for(i in $DIRS) @{
+ cd $i
+ echo mk $i
+ mk $MKFLAGS $stem
+ }
+
+ # review the 4e port against its base revision
+ base.diff:QE:
+ {
+ diff -bc <{hget $BASE ^ /sys/lib/git/common.rc ^/raw} /rc/bin/git/defs
+ for(i in $SCRIPTS)
+ diff -bc <{hget $BASE ^ /sys/src/cmd/git/$i ^ /raw} /rc/bin/git/$i
+ for(i in *.c mkfile)
+ diff -c <{hget $BASE ^ /sys/src/cmd/git/$i ^ /raw} $i
+ for(i in aux/*.c aux/diff/*.c aux/diff/mkfile)
+ diff -c <{hget $BASE ^ /sys/src/cmd/^`{echo $i | sed 's!aux/!!'} ^ /raw} $i
+ for(i in test/*.rc test/mkfile)
+ diff -c <{hget $BASE ^ /sys/src/cmd/git/$i ^ /raw} $i
+ for(i in /sys/man/1/git /sys/man/4/gitfs)
+ diff -c <{hget $BASE ^ $i ^ /raw} $i
+ status = ''
+ } | tee $target
/tmp/diff100000044333:803,809 - aux/patch.c:803,810
fail("open %s: %r", rejfile);
}
if(argc == 0){
- if((f = Bfdopen(0, OREAD)) == nil)
+ f = emalloc(sizeof(Biobuf));
+ if(Binit(f, 0, OREAD) == -1)
fail("open stdin: %r");
if((p = parse(f, "stdin")) == nil)
fail("parse patch: %r");
/tmp/diff100000044333:815,820 - aux/patch.c:816,822
}
freepatch(p);
Bterm(f);
+ free(f);
ok = finish(ok);
}else{
for(i = 0; ok && i < argc; i++){
/tmp/diff100000044340:271,279 - aux/walk.c:271,280
fmtinstall('M', dirmodefmt);
- if((bout = Bfdopen(1, OWRITE)) == nil)
+ if((bout = malloc(sizeof(Biobuf))) == nil)
+ sysfatal("malloc: %r");
+ if(Binit(bout, 1, OWRITE) == -1)
sysfatal("Bfdopen: %r");
- Blethal(bout, nil);
if(stfmt == nil){
if((stfmt = s_new()) == nil)
sysfatal("s_new: %r");
/tmp/diff100000044340:304,309 - aux/walk.c:305,311
free(d);
}
Bterm(bout);
+ free(bout);
exits(nil);
}
/tmp/diff100000044397:9,13 - aux/diff/mkfile:9,25
HFILES=diff.h
- BIN=/$objtype/bin
+ BIN=/$objtype/bin/git/aux
</sys/src/cmd/mkmany
+
+ $BIN/%: $BIN
+ $BIN:
+ mkdir -p $target
+
+ test:V:
+ cd test && mk $MKFLAGS test
+
+ test.clean:V:
+ cd test && mk $MKFLAGS clean
+
+ clean:V: test.clean
/tmp/diff100000044406:1,4 - test/mkfile:1,4
- </$objtype/mkfile
+ </$cputype/mkfile
TEST=\
add\
/tmp/diff100000044406:12,21 - test/mkfile:12,21
range\
rebase
- </sys/src/cmd/mktest
+ <mktest
$cputype.git:
- @{cd .. && objtype=$cputype mk install 'BIN=test/'$target}
+ @{mkdir -p $target; rfork n; bind -c $target /$objtype/bin/git; cd .. && objtype=$cputype mk install}
test:V: $cputype.git
/tmp/diff100000044413:665,673 - /sys/man/1/git:665,677
The contents of this file are used as fallbacks for the per-user config.
.SH SEE ALSO
.IR diff (1),
- .IR patch (1),
.IR replica (1),
.IR gitfs (4)
+ .br
+ Ori Bernstein,
+ ``A Git for 9'',
+ .I "Proceedings of the 10th International Workshop on Plan 9" ,
+ 2024.
.SH BUGS
Repositories with submodules are effectively read-only.
.PP
/tmp/diff100000044418:89,96 - /sys/man/4/gitfs:89,99
.SH "SEE ALSO"
.IR git (1)
- .IR hg (1)
- .IR hgfs (4)
+ .br
+ Ori Bernstein,
+ ``A Git for 9'',
+ .I "Proceedings of the 10th International Workshop on Plan 9" ,
+ 2024.
.SH BUGS
Symlinks are only partially supported.
|