# HG changeset patch # User Francisco J Ballesteros # Date 1316019533 -7200 # Node ID fdc9b4c0f74c4a89b744942a742649a897947212 # Parent ed29067d02325e6c28b1ab60938fc18f77412286 pm: fixes This is the third time in a row I type this. Thanks to such a nice code review tool. How a miss plan 9. Disregard a previous issue 5020044. pm failed because I made a mistake when calling it (gave a category name) and it didnt notice it failed. enough said. Double check the change, the pkg server was offline and couldnt test it too much. R=nix-dev CC=nix-dev http://codereview.appspot.com/5018043 diff -r ed29067d0232 -r fdc9b4c0f74c rc/bin/pm/install --- a/rc/bin/pm/install Wed Sep 14 18:54:25 2011 +0200 +++ b/rc/bin/pm/install Wed Sep 14 18:58:53 2011 +0200 @@ -23,8 +23,15 @@ } verb='' force=n -if(! ~ $#flagv 0) verb=v -if(! ~ $#flagf 0) force=y +flags='' +if(! ~ $#flagv 0) { + verb=v + flags=-v +} +if(! ~ $#flagf 0) { + force=y + flags=($flags -f) +} if (~ $#* 0) { echo Need at least one package name @@ -48,30 +55,40 @@ } +fn fail { + echo $* >[1=2] + exit fail +} + if (! test -e $ROOT^/contrib/packages/installed) { touch $ROOT^/contrib/packages/installed } -for (PKGNAME in $*) { - @{ +cd $PKGROOT^/contrib/packages || exit 'dir not found' +names=() +for(name in $*) { + if(~ $name */*){ + names=($names $name) + } + if not { + names=($names $name/*) + } +} +for (PKGNAME in $names) { + @{ echo '###Installing package '^$PKGNAME^'###' # Go to the directory if it exists - if (! test -e $PKGROOT^/contrib/packages/^$PKGNAME) { - echo $PKGNAME^: No such package found in $PKGROOT^/contrib/packages/^$PKGNAME - exit 'no such package' - } - cd $PKGROOT^/contrib/packages/^$PKGNAME + cd $PKGROOT^/contrib/packages/^$PKGNAME || fail $PKGNAME: No such package in $PKGROOT^/contrib/packages # You need to do mk pull before running mk install if (! test -e root.tgz) { echo $PKGNAME^: pulling - if(! pm/pull $PKGNAME){ - echo pull of $PKGNAME failed >[1=2] - exit pull - } + pm/pull $PKGNAME || fail $PKGNAME: pull failed } - if (grep '^'^$PKGNAME^'$' $ROOT^/contrib/packages/installed >[2=1] >/dev/null) { echo $PKGNAME^: already installed} + if (grep '^'^$PKGNAME^'$' $ROOT^/contrib/packages/installed >[2=1] >/dev/null) { + echo $PKGNAME^: already installed, skipping. + } if not { # Install all the dependencies for (i in `{cat dep}) { @@ -79,8 +96,8 @@ @{ echo $PKGNAME^: Also installing dependency: $i cd $PKGROOT^/contrib/packages/$i - pm/pull $i - pm/install $i + pm/pull $i || fail $i: pull failed + pm/install $i || fail $i: install failed } } if not { @@ -90,17 +107,19 @@ if(! ~ $force y) checkoverwrites - echo $PKGNAME^: Unpacking the root archive... - tar xzTf root.tgz - @{builtin cd root && tar cif /fd/1 .} | @ {builtin cd $ROOT && tar x$verb^Tf /fd/0} - rm -r root - tar ztf root.tgz > root.lst + echo $PKGNAME: Unpacking the root archive... + tar xzTf root.tgz || fail $PKGNAME: unpack failed. + test -d root || fail $PKGNAME: root not found. + { @{builtin cd root && tar cif /fd/1 .} | @ {builtin cd $ROOT && tar x$verb^Tf /fd/0} + } || fail $PKGNAME: unpack failed. + rm -fr root + tar ztf root.tgz > root.lst || fail $PKGNAME: list. rm -f root.tgz # inform the world that this package is now installed echo $PKGNAME >> $ROOT^/contrib/packages/installed - sort $ROOT^/contrib/packages/installed > /tmp/installed-sorted - mv /tmp/installed-sorted $ROOT^/contrib/packages/installed - echo $PKGNAME^: successfully installed. + sort $ROOT^/contrib/packages/installed > $ROOT^/contrib/packages/installed.new + mv $ROOT^/contrib/packages/installed.new $ROOT^/contrib/packages/installed + echo $PKGNAME^: installed. } } } diff -r ed29067d0232 -r fdc9b4c0f74c rc/bin/pm/pull --- a/rc/bin/pm/pull Wed Sep 14 18:54:25 2011 +0200 +++ b/rc/bin/pm/pull Wed Sep 14 18:58:53 2011 +0200 @@ -14,22 +14,33 @@ PKGSERVER=jfloren.net } -if (~ $#* 0) { - echo Need at least one package name - exit 'invalid arg' +fn fail { + echo $* >[1=2] + exit fail } -for (PKGNAME in $*) { +if (~ $#* 0) { + fail Need at least one package name +} + +cd $PKGROOT^/contrib/packages || exit 'dir not found' +names=() +for(name in $*) { + if(~ $name */*){ + names=($names $name) + } + if not { + names=($names $name/*) + } +} +for (PKGNAME in $names) { @{ # Go to the directory if it exists - if (! test -e $PKGROOT^/contrib/packages/^$PKGNAME) { - echo $PKGNAME^: No such package found in $PKGROOT^/contrib/packages/^$PKGNAME - exit 'no such package' - } - cd $PKGROOT^/contrib/packages/^$PKGNAME + cd $PKGROOT^/contrib/packages/^$PKGNAME || fail $PKGNAME: No such package in $PKGROOT^/contrib/packages echo -n Fetching root.tgz... - hget -o root.tgz http://^$PKGSERVER^/contrib/packages/^$PKGNAME^/root.tgz + hget -o root.tgz http://^$PKGSERVER^/contrib/packages/^$PKGNAME^/root.tgz || fail hget failed echo Done. } } +exit '' diff -r ed29067d0232 -r fdc9b4c0f74c rc/bin/pm/remove --- a/rc/bin/pm/remove Wed Sep 14 18:54:25 2011 +0200 +++ b/rc/bin/pm/remove Wed Sep 14 18:58:53 2011 +0200 @@ -2,6 +2,11 @@ rfork en +fn fail { + echo $* >[1=2] + exit fail +} + if (~ $#PKGROOT 0) { PKGROOT=/ } @@ -19,16 +24,22 @@ touch $ROOT^/contrib/packages/installed } -for (PKGNAME in $*) { +cd $PKGROOT^/contrib/packages || exit 'dir not found' +names=() +for(name in $*) { + if(~ $name */*){ + names=($names $name) + } + if not { + names=($names $name/*) + } +} +for (PKGNAME in $names) { @{ echo '###Removing package '^$PKGNAME^'###' # Go to the directory if it exists - if (! test -e $PKGROOT^/contrib/packages/^$PKGNAME) { - echo $PKGNAME^: No such package found in $PKGROOT^/contrib/packages/^$PKGNAME - exit 'no such package' - } - cd $PKGROOT^/contrib/packages/^$PKGNAME + cd $PKGROOT^/contrib/packages/^$PKGNAME || fail $PKGNAME: No such package in $PKGROOT^/contrib/packages if (! grep $PKGNAME $ROOT^/contrib/packages/installed >[2=1] >/dev/null) { echo $PKGNAME^: Already removed! @@ -56,3 +67,4 @@ } } } +exit ''