From e3034da88bad0257b2380dcfe3d8052bf1d2f358 Mon Sep 17 00:00:00 2001 From: Wouter den Breejen Date: Mon, 23 Jul 2007 14:36:36 +0000 Subject: [PATCH] --- configure.ac | 1 + scripts/Makefile.am | 4 +- scripts/nix-statecommit.sh | 203 --------------------------------- scripts/nix-statecommit.sh.in | 207 ---------------------------------- src/Makefile.am | 2 +- src/libstore/Makefile.am | 3 +- src/libstore/store-state.cc | 18 ++- src/nix-state/nix-state.cc | 2 +- 8 files changed, 22 insertions(+), 418 deletions(-) delete mode 100755 scripts/nix-statecommit.sh delete mode 100755 scripts/nix-statecommit.sh.in diff --git a/configure.ac b/configure.ac index bb9741638..a1b2f6b3b 100644 --- a/configure.ac +++ b/configure.ac @@ -277,6 +277,7 @@ AC_CONFIG_FILES([Makefile src/libutil/Makefile src/libstore/Makefile src/libmain/Makefile + src/libext3cow/Makefile src/nix-store/Makefile src/nix-state/Makefile src/nix-hash/Makefile diff --git a/scripts/Makefile.am b/scripts/Makefile.am index e387220c9..b3afe45fd 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -4,7 +4,7 @@ bin_SCRIPTS = nix-collect-garbage \ nix-pack-closure nix-unpack-closure \ nix-copy-closure -noinst_SCRIPTS = nix-profile.sh generate-patches.pl find-runtime-roots.pl nix-statecommit.sh nix-readrevisions.sh nix-restorerevision.sh +noinst_SCRIPTS = nix-profile.sh generate-patches.pl find-runtime-roots.pl nix-readrevisions.sh nix-restorerevision.sh nix-pull nix-push: readmanifest.pm readconfig.pm download-using-manifests.pl @@ -17,7 +17,6 @@ install-exec-local: readmanifest.pm download-using-manifests.pl find-runtime-roo $(INSTALL_PROGRAM) download-using-manifests.pl $(DESTDIR)$(libexecdir)/nix $(INSTALL_PROGRAM) find-runtime-roots.pl $(DESTDIR)$(libexecdir)/nix $(INSTALL_PROGRAM) generate-patches.pl $(DESTDIR)$(libexecdir)/nix - $(INSTALL_PROGRAM) nix-statecommit.sh $(DESTDIR)$(libexecdir)/nix $(INSTALL_PROGRAM) nix-readrevisions.sh $(DESTDIR)$(libexecdir)/nix $(INSTALL_PROGRAM) nix-restorerevision.sh $(DESTDIR)$(libexecdir)/nix $(INSTALL) -d $(DESTDIR)$(sysconfdir)/nix @@ -36,6 +35,5 @@ EXTRA_DIST = nix-collect-garbage.in \ nix-pack-closure.in nix-unpack-closure.in \ nix-copy-closure.in \ find-runtime-roots.pl.in \ - nix-statecommit.sh.in \ nix-readrevisions.sh.in \ nix-restorerevision.sh.in diff --git a/scripts/nix-statecommit.sh b/scripts/nix-statecommit.sh deleted file mode 100755 index 70cd73daa..000000000 --- a/scripts/nix-statecommit.sh +++ /dev/null @@ -1,203 +0,0 @@ -#! /bin/sh -# we cant do a -e since ... svn can fail ??? TODO... - -#check if there are enough arguments, if not, exit with an error - -debug=""; #set to "" for no debugging, set to "echo " to debug the commands - -if [ "$#" != 6 ] && [ "$#" != 7 ] ; then - echo "Incorrect number of arguments" - exit 1; -fi - -if [ "$deletesvn" != "" ] && [ "$deletesvn" != "1" ]; then - echo "The last argument (DELETE svn folders) must be either empty (recommended) or 1" - exit 1; -fi - -svnbin=$1 -subversionedpaths=( $2 ) #arrays -subversionedpathsCommitBools=( $3 ) -nonversionedpaths=( $4 ) -checkout=$5 -statepath=$6 -deletesvn=$7 #this flag can be set to 1 to DELETE all .svn folders and NOT commit - - -if [ "$debug" != "" ] ; then - echo svnbin: $svnbin - echo subversionedpaths: ${subversionedpaths[@]} - echo subversionedpathsCommitBools: ${subversionedpathsCommitBools[@]} - echo nonversionedpaths: ${nonversionedpaths[@]} - echo checkouts: $checkout - echo statepath: $statepath - echo deletesvn: $deletesvn -fi - -# TODO: we need a solution for symlinks, svn doesnt support them - -# -# -# -# -function subversionSingleStateDir { - - excludelist=( "." ".." ".svn" ); - - checkForSVNDelete $1; #check for deleted files/folders (TODO does this also need to be here ???) - - cd $1; - #echo cd $1; - - empty=$(ls) - - if [ "$empty" = "" ] ; then - allsubitems=(); #no subfiles / dirs - else - allsubitems=( $(echo *) $(echo .*) ) #there are subfiles / dirs,also adds hidden items - fi - - for subitem in ${allsubitems[@]} - do - if [ "$subitem" = ".svn" ]; then - allsubitems=( $($svnbin -N stat | sed -n '/^?/p' | sed 's/? //' | tr -d "\12") ) #there are subfiles, and theyre already versioned - - if [ "$deletesvn" = "1" ]; then - rm -rf .svn/ - fi - fi - done - - #echo "Allsubitems ${allsubitems[@]}" - - subitems=(); - for subitem in ${allsubitems[@]} #add all, were going to exlucde explicity stated direct versioned-subdirs or explicity stated nonversioned-subdirs - do #this is only to prevent some warnings, ultimately we would like svn add to have a option 'exclude dirs' - - exclude=0; - - for excl in ${excludelist[@]} #check if the subitem is in the list of excluded dirs - do - if [ "$excl" = "$subitem" ]; then - exclude=1; - #echo "exclude $excl" - fi - done - - subitem="$(pwd)/$subitem"; #create the full path - - if test -d $subitem; then #the subitem (file or a dir) may be a dir, so we add a / to the end - subitem="$subitem/"; - fi - - for svnp in ${subversionedpaths[@]} #check if the subitem is in the list of subverioned paths - do - if [ "$svnp" = "$subitem" ]; then - exclude=1; - #echo "exclude versioned $svnp" - fi - done - - for nonvp in ${nonversionedpaths[@]} #check if the subitem is in the list of dirs that aren't supposed to be versioned - do - if [ "$nonvp" = "$subitem" ]; then - exclude=1; - #echo "exclude nonversioned $svnp" - fi - done - - if [ $exclude = 0 ]; then #Exclude the subitem if nessecary - subitems[${#subitems[*]}]=$subitem - fi - done - - echo Adding subitems ${subitems[@]} - - for item in ${subitems[@]} - do - if test -d $item; then #add or go recursive subitems - if [ "$deletesvn" != "1" ]; then - $debug $svnbin -N add $item #NON recursively add the dir - fi - subversionSingleStateDir $item - else - if [ "$deletesvn" != "1" ]; then - $debug $svnbin add $item - fi - fi - done - -} - -# -# Takes a dir or file, checks for deleted files / folders and svn delete's them -# - -function checkForSVNDelete { - - #echo checking for deleted items: $1; - allsubitems=( $($svnbin -N stat $1 | sed -n '/^!/p' | sed 's/! //' | tr -d "\12") ) #select all deleted files - #echo "All deleted subitems ${allsubitems[@]}" - - for subitem in ${allsubitems[@]} #then svn delete them - do - $debug $svnbin delete $subitem - done -} - -# -# -# -# - -if ! test -d "${statepath}/.svn/"; then #if the root dir exists but is not yet an svn dir: checkout repos, if it doenst exits (is removed or something) than we dont do anything - if [ "$deletesvn" != "1" ]; then #TODO !!!!!!!!!!!!!!! we shouldnt checkout !!!!!!!!!!!!!!!!! - $debug $checkout; - fi -fi - -i=0 -for path in ${subversionedpaths[@]} -do - - checkForSVNDelete $path; #check if path or file is deleted - - if test -d $path; then #if the dir doesnt exist, than we dont hav to do anything - cd $path; - - if [ "${subversionedpathsCommitBools[$i]}" = "true" ]; then #Check if we need to commit this folder - echo "Entering $path" - - if ! test -d "${path}/.svn/"; then #Dir: Also add yourself if nessecary - if [ "$deletesvn" != "1" ]; then - $debug $svnbin -N add $path - fi - fi - - subversionSingleStateDir $path; - fi - - cd - &> /dev/null; - let "i+=1" - fi - - if test -f $path; then #if its a file, see if it needs to be added - - if [ "${subversionedpathsCommitBools[$i]}" = "true" ]; then #Check if we need to commit this file - - alreadyversioned=$(svn -N stat $path ) - if [ "$alreadyversioned" != "" ]; then - echo "Subversioning $path" - $debug $svnbin add $path - fi - fi - fi - -done - -cd $statepath #now that everything is added we go back to the 'root' path and commit -if [ "$deletesvn" != "1" ]; then - $debug $svnbin -m "" commit; - $debug $svnbin up "" commit; #do a svn up to update the local revision number ... (the contents stays the same) -fi - diff --git a/scripts/nix-statecommit.sh.in b/scripts/nix-statecommit.sh.in deleted file mode 100755 index fe0501f16..000000000 --- a/scripts/nix-statecommit.sh.in +++ /dev/null @@ -1,207 +0,0 @@ -#! /bin/sh -# we cant do a -e since ... svn can fail ??? TODO... - -#check if there are enough arguments, if not, exit with an error - -debug=""; #set to "" for no debugging, set to "echo " to debug the commands - -if [ "$#" != 6 ] && [ "$#" != 7 ] ; then - echo "Incorrect number of arguments" - exit 1; -fi - -if [ "$deletesvn" != "" ] && [ "$deletesvn" != "1" ]; then - echo "The last argument (DELETE svn folders) must be either empty (recommended) or 1" - exit 1; -fi - -svnbin=$1 -subversionedpaths=( $2 ) #arrays -subversionedpathsCommitBools=( $3 ) -nonversionedpaths=( $4 ) -checkout=$5 -statepath=$6 -deletesvn=$7 #this flag can be set to 1 to DELETE all .svn folders and NOT commit - - -if [ "$debug" != "" ] ; then - echo svnbin: $svnbin - echo subversionedpaths: ${subversionedpaths[@]} - echo subversionedpathsCommitBools: ${subversionedpathsCommitBools[@]} - echo nonversionedpaths: ${nonversionedpaths[@]} - echo checkouts: $checkout - echo statepath: $statepath - echo deletesvn: $deletesvn -fi - -# TODO: we need a solution for symlinks, svn doesnt support them - -# -# -# -# -function subversionSingleStateDir { - - excludelist=( "." ".." ".svn" ); - - checkForSVNDelete $1; #check for deleted files/folders (TODO does this also need to be here ???) - - cd $1; - #echo cd $1; - - empty=$(ls) - - if [ "$empty" = "" ] ; then - allsubitems=(); #no subfiles / dirs - else - allsubitems=( $(echo *) $(echo .*) ) #there are subfiles / dirs,also adds hidden items - fi - - for subitem in ${allsubitems[@]} - do - if [ "$subitem" = ".svn" ]; then - allsubitems=( $($svnbin -N stat | sed -n '/^?/p' | sed 's/? //' | tr -d "\12") ) #there are subfiles, and theyre already versioned - - if [ "$deletesvn" = "1" ]; then - rm -rf .svn/ - fi - fi - done - - #echo "Allsubitems ${allsubitems[@]}" - - subitems=(); - for subitem in ${allsubitems[@]} #add all, were going to exlucde explicity stated direct versioned-subdirs or explicity stated nonversioned-subdirs - do #this is only to prevent some warnings, ultimately we would like svn add to have a option 'exclude dirs' - - exclude=0; - - for excl in ${excludelist[@]} #check if the subitem is in the list of excluded dirs - do - if [ "$excl" = "$subitem" ]; then - exclude=1; - #echo "exclude $excl" - fi - done - - subitem="$(pwd)/$subitem"; #create the full path - - if test -d $subitem; then #the subitem (file or a dir) may be a dir, so we add a / to the end - subitem="$subitem/"; - fi - - for svnp in ${subversionedpaths[@]} #check if the subitem is in the list of subverioned paths - do - if [ "$svnp" = "$subitem" ]; then - exclude=1; - #echo "exclude versioned $svnp" - fi - done - - for nonvp in ${nonversionedpaths[@]} #check if the subitem is in the list of dirs that aren't supposed to be versioned - do - if [ "$nonvp" = "$subitem" ]; then - exclude=1; - #echo "exclude nonversioned $svnp" - fi - done - - if [ $exclude = 0 ]; then #Exclude the subitem if nessecary - subitems[${#subitems[*]}]=$subitem - fi - done - - echo Adding subitems ${subitems[@]} - - for item in ${subitems[@]} - do - if test -d $item; then #add or go recursive subitems - if [ "$deletesvn" != "1" ]; then - $debug $svnbin -N add $item #NON recursively add the dir - fi - subversionSingleStateDir $item - else - if [ "$deletesvn" != "1" ]; then - $debug $svnbin add $item - fi - fi - done - -} - -# -# Takes a dir or file, checks for deleted files / folders and svn delete's them -# - -function checkForSVNDelete { - - #echo checking for deleted items: $1; - allsubitems=( $($svnbin -N stat $1 | sed -n '/^!/p' | sed 's/! //' | tr -d "\12") ) #select all deleted files - #echo "All deleted subitems ${allsubitems[@]}" - - for subitem in ${allsubitems[@]} #then svn delete them - do - $debug $svnbin delete $subitem - done -} - -# -# -# -# - -if ! test -d "${statepath}/.svn/"; then #if the root dir exists but is not yet an svn dir: checkout repos, if it doenst exits (is removed or something) than we dont do anything - if [ "$deletesvn" != "1" ]; then #TODO !!!!!!!!!!!!!!! we shouldnt checkout !!!!!!!!!!!!!!!!! - $debug $checkout; - fi -fi - -i=0 -for path in ${subversionedpaths[@]} -do - - checkForSVNDelete $path; #check if path or file is deleted - - if test -d $path; then #if the dir doesnt exist, than we dont hav to do anything - cd $path; - - if [ "${subversionedpathsCommitBools[$i]}" = "true" ]; then #Check if we need to commit this folder - echo "Entering $path" - - if ! test -d "${path}/.svn/"; then #Dir: Also add yourself if nessecary - if [ "$deletesvn" != "1" ]; then - $debug $svnbin -N add $path - fi - fi - - subversionSingleStateDir $path; - fi - - cd - &> /dev/null; - let "i+=1" - fi - - if test -f $path; then #if its a file, see if it needs to be added - - if [ "${subversionedpathsCommitBools[$i]}" = "true" ]; then #Check if we need to commit this file - - alreadyversioned=$(svn -N stat $path ) - if [ "$alreadyversioned" != "" ]; then - echo "Subversioning $path" - $debug $svnbin add $path - fi - fi - fi - -done - -cd $statepath #now that everything is added we go back to the 'root' path and commit -if [ "$deletesvn" != "1" ]; then - - #TODO this could be done transactional... - - $debug $svnbin up "" commit; #do a svn up to get the new changes - $debug $svnbin -m "" commit; - $debug $svnbin up "" commit; #do a svn up to update the local revision number ... (the contents stays the same) -fi - diff --git a/src/Makefile.am b/src/Makefile.am index b344fca8d..9e7925dd0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = bin2c boost libutil libstore libmain nix-store nix-hash \ +SUBDIRS = bin2c boost libutil libext3cow libstore libmain nix-store nix-hash \ libexpr nix-instantiate nix-env nix-worker nix-setuid-helper \ nix-log2xml bsdiff-4.3 nix-state diff --git a/src/libstore/Makefile.am b/src/libstore/Makefile.am index 9e31d7a92..484ba6f4e 100644 --- a/src/libstore/Makefile.am +++ b/src/libstore/Makefile.am @@ -10,6 +10,7 @@ pkginclude_HEADERS = \ worker-protocol.hh store-state.hh libstore_la_LIBADD = ../libutil/libutil.la \ + ../libext3cow/libext3cow.la \ ../boost/format/libformat.la BUILT_SOURCES = derivations-ast.cc derivations-ast.hh @@ -17,7 +18,7 @@ BUILT_SOURCES = derivations-ast.cc derivations-ast.hh EXTRA_DIST = derivations-ast.def derivations-ast.cc AM_CXXFLAGS = -Wall \ - -I$(srcdir)/.. ${bdb_include} ${aterm_include} -I$(srcdir)/../libutil -I$(srcdir)/../nix-state + -I$(srcdir)/.. ${bdb_include} ${aterm_include} -I$(srcdir)/../libutil -I$(srcdir)/../nix-state -I$(srcdir)/../libext3cow derivations-ast.cc derivations-ast.hh: ../aterm-helper.pl derivations-ast.def $(perl) $(srcdir)/../aterm-helper.pl derivations-ast.hh derivations-ast.cc < $(srcdir)/derivations-ast.def diff --git a/src/libstore/store-state.cc b/src/libstore/store-state.cc index 1a3e73f60..7522597fa 100644 --- a/src/libstore/store-state.cc +++ b/src/libstore/store-state.cc @@ -14,6 +14,7 @@ #include "local-store.hh" #include "misc.hh" #include "archive.hh" +#include "snapshot.hh" namespace nix { @@ -29,9 +30,12 @@ void updatedStateDerivation(Path storePath) void createStateDirs(const DerivationStateOutputDirs & stateOutputDirs, const DerivationStateOutputs & stateOutputs) { + Path statePath = stateOutputs.find("state")->second.statepath; string stateDir = statePath; + /* + string svnbin = nixSVNPath + "/svn"; string svnadminbin = nixSVNPath + "/svnadmin"; @@ -89,6 +93,8 @@ void createStateDirs(const DerivationStateOutputDirs & stateOutputDirs, const De //Initialize the counters for the statePaths that have an interval to 0 vector empty; store->setStatePathsInterval(intervalPaths, empty, true); + + */ } void commitStatePathTxn(const Transaction & txn, const Path & statePath) @@ -223,6 +229,13 @@ void updateRevisionsRecursivelyTxn(const Transaction & txn, const Path & statePa int readRevisionNumber(Path statePath) { + string s = "/media/ext3cow/cca/"; + const char* ss = s.c_str(); + unsigned int i = take_snapshot(ss); + printMsg(lvlError, format("SS: '%1%'") % i); + + //////// + /* string svnbin = nixSVNPath + "/svn"; RevisionNumbers revisions; @@ -243,8 +256,9 @@ int readRevisionNumber(Path statePath) if(!succeed) throw Error(format("Cannot read revision number of path '%1%'") % repos); - return revision; + return revision; + */ + return 0; } - } diff --git a/src/nix-state/nix-state.cc b/src/nix-state/nix-state.cc index 8ce2f747a..227928920 100644 --- a/src/nix-state/nix-state.cc +++ b/src/nix-state/nix-state.cc @@ -551,7 +551,7 @@ void run(Strings args) //updateRevisionNumbers("/nix/state/xf582zrz6xl677llr07rvskgsi3dli1d-hellohardcodedstateworld-dep1-1.0-test"); //return; - + /* test */ for (Strings::iterator i = args.begin(); i != args.end(); ) {