Plan 9 from Bell Labs’s /usr/web/sources/contrib/yk/root/sys/src/cmd/git/base.diff

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


/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.

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.