From afb445957d50b857926a1f8cfd524b3ecae2db81 Mon Sep 17 00:00:00 2001 From: Wouter den Breejen Date: Sun, 8 Jul 2007 22:59:44 +0000 Subject: [PATCH] States can now be (recursively) rolled back and forward :) --- scripts/nix-restorerevision.sh | 8 +++++--- scripts/nix-restorerevision.sh.in | 8 +++++--- src/libstore/local-store.cc | 3 +-- src/nix-state/nix-state.cc | 24 ++++++++++++++---------- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/scripts/nix-restorerevision.sh b/scripts/nix-restorerevision.sh index 60cea74bd..bdf69673f 100755 --- a/scripts/nix-restorerevision.sh +++ b/scripts/nix-restorerevision.sh @@ -3,11 +3,13 @@ svnbin=$1 torevision=$2 repos=$3 +statepath=$4 -if [ "$#" != 3 ] ; then +if [ "$#" != 4 ] ; then echo "Incorrect number of arguments" exit 1; fi -$svnbin merge -r HEAD:$2 $3 - +cd $statepath +$svnbin merge -r HEAD:$torevision $repos +cd - diff --git a/scripts/nix-restorerevision.sh.in b/scripts/nix-restorerevision.sh.in index 60cea74bd..bdf69673f 100755 --- a/scripts/nix-restorerevision.sh.in +++ b/scripts/nix-restorerevision.sh.in @@ -3,11 +3,13 @@ svnbin=$1 torevision=$2 repos=$3 +statepath=$4 -if [ "$#" != 3 ] ; then +if [ "$#" != 4 ] ; then echo "Incorrect number of arguments" exit 1; fi -$svnbin merge -r HEAD:$2 $3 - +cd $statepath +$svnbin merge -r HEAD:$torevision $repos +cd - diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 85609ee8e..570f7f530 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -196,9 +196,8 @@ LocalStore::LocalStore(bool reserveSpace) dbComponentStateReferrers = nixDB.openTable("referrers_c_s", true); dbStateComponentReferrers = nixDB.openTable("referrers_s_c", true); dbStateStateReferrers = nixDB.openTable("referrers_s_s", true); - dbStateRevisions = nixDB.openTable("staterevisions", true); + dbStateRevisions = nixDB.openTable("staterevisions"); - int curSchema = 0; Path schemaFN = nixDBPath + "/schema"; if (pathExists(schemaFN)) { diff --git a/src/nix-state/nix-state.cc b/src/nix-state/nix-state.cc index a6b3261b4..da176463b 100644 --- a/src/nix-state/nix-state.cc +++ b/src/nix-state/nix-state.cc @@ -237,11 +237,14 @@ static void queryAvailableStateRevisions(Strings opFlags, Strings opArgs) return; } - string revisions_txt=""; + //Sort ourselfes to create a nice output + vector revisions_sort; for (RevisionNumbers::iterator i = revisions.begin(); i != revisions.end(); ++i) - { + revisions_sort.push_back(*i); + sort(revisions_sort.begin(), revisions_sort.end()); + string revisions_txt=""; + for (vector::iterator i = revisions_sort.begin(); i != revisions_sort.end(); ++i) revisions_txt += int2String(*i) + " "; - } printMsg(lvlError, format("Available Revisions: %1%") % revisions_txt); } @@ -282,7 +285,10 @@ static void revertToRevision(Strings opFlags, Strings opArgs) p_args.push_back(nixSVNPath + "/svn"); p_args.push_back(int2String(revision_arg)); p_args.push_back("file://" + repos); + p_args.push_back(statePath); string output = runProgram(nixLibexecDir + "/nix/nix-restorerevision.sh", true, p_args); //run + + printMsg(lvlError, format("Reverted statePath '%1%' to revision: %2%") % statePath % int2String(revision_arg)); } } @@ -570,9 +576,12 @@ void run(Strings args) op = opShowDerivations; else if (arg == "--showrevisions") op = queryAvailableStateRevisions; - else if (arg.substr(0,21) == "--revert-to-revision=") + else if (arg.substr(0,21) == "--revert-to-revision="){ op = revertToRevision; - + bool succeed = string2Int(arg.substr(21,arg.length()), revision_arg); + if(!succeed) + throw UsageError("The given revision is not a valid number"); + } /* @@ -604,11 +613,6 @@ void run(Strings args) */ - else if (arg.substr(0,21) == "--revert-to-revision="){ - bool succeed = string2Int(arg.substr(21,arg.length()), revision_arg); - if(!succeed) - throw UsageError("The given revision is not a valid number"); - } else if (arg.substr(0,13) == "--identifier=") stateIdentifier = arg.substr(13,arg.length()); else if (arg.substr(0,7) == "--user=")