mirror of
https://github.com/NixOS/nix.git
synced 2025-11-26 04:00:59 +01:00
Fixed showrevisions. added commit/run/scan only options
This commit is contained in:
parent
30cf65af26
commit
ec7b0afb08
3 changed files with 74 additions and 55 deletions
|
|
@ -214,7 +214,11 @@ public:
|
||||||
/* TODO */
|
/* TODO */
|
||||||
virtual void setStateRevisions(const RevisionClosure & revisions, const Path & rootStatePath, const string & comment) = 0;
|
virtual void setStateRevisions(const RevisionClosure & revisions, const Path & rootStatePath, const string & comment) = 0;
|
||||||
|
|
||||||
/* TODO */
|
/*
|
||||||
|
* TODO Not sure wheter this comment is 100% correct
|
||||||
|
* Querys all available state revision closures.
|
||||||
|
* (e.g. a references scan can change this)
|
||||||
|
*/
|
||||||
virtual bool queryStateRevisions(const Path & statePath, RevisionClosure & revisions, RevisionClosureTS & timestamps, const unsigned int revision) = 0;
|
virtual bool queryStateRevisions(const Path & statePath, RevisionClosure & revisions, RevisionClosureTS & timestamps, const unsigned int revision) = 0;
|
||||||
|
|
||||||
/* TODO */
|
/* TODO */
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,9 @@ string stateIdentifier;
|
||||||
string username;
|
string username;
|
||||||
string comment;
|
string comment;
|
||||||
unsigned int revision_arg;
|
unsigned int revision_arg;
|
||||||
bool scanforReferences = false;
|
bool r_scanforReferences = false;
|
||||||
bool only_commit = false;
|
bool r_commit = true;
|
||||||
|
bool r_run = true;
|
||||||
bool revert_recursively = false;
|
bool revert_recursively = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -261,12 +262,11 @@ static void opRunComponent(Strings opFlags, Strings opArgs)
|
||||||
//WARNING: we need to watch out for deadlocks!
|
//WARNING: we need to watch out for deadlocks!
|
||||||
//add locks ... ?
|
//add locks ... ?
|
||||||
//svn lock ... ?
|
//svn lock ... ?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//******************* Run ****************************
|
//******************* Run ****************************
|
||||||
|
|
||||||
if(!only_commit){
|
if(r_run){
|
||||||
if( ! FileExist(root_componentPath + root_binary) )
|
if( ! FileExist(root_componentPath + root_binary) )
|
||||||
throw Error(format("You must specify the full binary path: '%1%'") % (root_componentPath + root_binary));
|
throw Error(format("You must specify the full binary path: '%1%'") % (root_componentPath + root_binary));
|
||||||
|
|
||||||
|
|
@ -285,35 +285,37 @@ static void opRunComponent(Strings opFlags, Strings opArgs)
|
||||||
executeShellCommand(root_componentPath + root_binary + root_args);
|
executeShellCommand(root_componentPath + root_binary + root_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
Transaction txn;
|
Transaction txn;
|
||||||
//createStoreTransaction(txn);
|
//createStoreTransaction(txn);
|
||||||
|
|
||||||
//******************* Scan for new references if neccecary
|
//******************* Scan for new references if neccecary
|
||||||
if(scanforReferences)
|
if(r_scanforReferences)
|
||||||
store->scanAndUpdateAllReferences(root_statePath, true); //TODO make recursive a paramter?
|
store->scanAndUpdateAllReferences(root_statePath, true); //TODO make recursive a paramter?
|
||||||
|
|
||||||
//get all current (maybe updated by the scan) dependecies (if neccecary | recusively) of all state components that need to be updated
|
|
||||||
PathSet statePaths;
|
|
||||||
store->storePathRequisites(root_componentPath, false, statePaths, false, true, 0);
|
|
||||||
statePaths.insert(root_statePath);
|
|
||||||
|
|
||||||
//Start transaction TODO
|
|
||||||
|
|
||||||
//Replace all shared paths in the set for their real paths
|
|
||||||
statePaths = store->toNonSharedPathSet(statePaths);
|
|
||||||
|
|
||||||
//******************* With everything in place, we call the commit script on all statePaths (in)directly referenced **********************
|
//******************* With everything in place, we call the commit script on all statePaths (in)directly referenced **********************
|
||||||
|
|
||||||
//Commit all statePaths
|
if(r_commit){
|
||||||
RevisionClosure rivisionMapping;
|
//get all current (maybe updated by the scan) dependecies (if neccecary | recusively) of all state components that need to be updated
|
||||||
for (PathSet::iterator i = statePaths.begin(); i != statePaths.end(); ++i) //TODO first commit own state path?
|
PathSet statePaths;
|
||||||
rivisionMapping[*i] = store->commitStatePath(*i);
|
store->storePathRequisites(root_componentPath, false, statePaths, false, true, 0);
|
||||||
|
statePaths.insert(root_statePath);
|
||||||
|
|
||||||
//Save new revisions
|
//Start transaction TODO
|
||||||
store->setStateRevisions(rivisionMapping, root_statePath, comment); //TODO how about the txn?
|
|
||||||
|
//Replace all shared paths in the set for their real paths
|
||||||
|
statePaths = store->toNonSharedPathSet(statePaths);
|
||||||
|
|
||||||
|
//Commit all statePaths
|
||||||
|
RevisionClosure rivisionMapping;
|
||||||
|
for (PathSet::iterator i = statePaths.begin(); i != statePaths.end(); ++i) //TODO first commit own state path?
|
||||||
|
rivisionMapping[*i] = store->commitStatePath(*i);
|
||||||
|
|
||||||
|
//Save new revisions
|
||||||
|
store->setStateRevisions(rivisionMapping, root_statePath, comment); //TODO how about the txn?
|
||||||
|
}
|
||||||
|
|
||||||
//Commit transaction
|
//Commit transaction
|
||||||
//txn.commit();
|
//txn.commit();
|
||||||
|
|
@ -323,17 +325,11 @@ static void opRunComponent(Strings opFlags, Strings opArgs)
|
||||||
RevisionClosureTS empty;
|
RevisionClosureTS empty;
|
||||||
bool b = store->queryStateRevisions(root_statePath, getRivisions, empty, 0);
|
bool b = store->queryStateRevisions(root_statePath, getRivisions, empty, 0);
|
||||||
for (RevisionClosure::iterator i = getRivisions.begin(); i != getRivisions.end(); ++i){
|
for (RevisionClosure::iterator i = getRivisions.begin(); i != getRivisions.end(); ++i){
|
||||||
printMsg(lvlError, format("State '%1%' has revision") % (*i).first);
|
//printMsg(lvlError, format("State '%1%' has revision") % (*i).first);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void testUI(unsigned int i)
|
|
||||||
{
|
|
||||||
printMsg(lvlError, format("Int: %1%") % i);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void run(Strings args)
|
void run(Strings args)
|
||||||
{
|
{
|
||||||
Strings opFlags, opArgs;
|
Strings opFlags, opArgs;
|
||||||
|
|
@ -499,44 +495,66 @@ void run(Strings args)
|
||||||
|
|
||||||
Operation oldOp = op;
|
Operation oldOp = op;
|
||||||
|
|
||||||
if (arg == "--run" || arg == "-r")
|
//Run options
|
||||||
|
|
||||||
|
if (arg == "--run" || arg == "-r") //run and commit
|
||||||
op = opRunComponent;
|
op = opRunComponent;
|
||||||
else if (arg == "--commit-only"){
|
else if (arg == "--commit-only"){
|
||||||
op = opRunComponent;
|
op = opRunComponent;
|
||||||
only_commit = true;
|
r_commit = true;
|
||||||
|
r_run = false;
|
||||||
|
r_scanforReferences = false;
|
||||||
}
|
}
|
||||||
|
else if (arg == "--run-only"){
|
||||||
|
op = opRunComponent;
|
||||||
|
r_commit = false;
|
||||||
|
r_run = true;
|
||||||
|
r_scanforReferences = false;
|
||||||
|
}
|
||||||
|
else if (arg == "--scan-only"){
|
||||||
|
op = opRunComponent;
|
||||||
|
r_commit = false;
|
||||||
|
r_run = false;
|
||||||
|
r_scanforReferences = true;
|
||||||
|
}
|
||||||
|
else if (arg == "--scanreferences"){
|
||||||
|
r_scanforReferences = true;
|
||||||
|
}
|
||||||
|
else if (arg.substr(0,10) == "--comment=")
|
||||||
|
comment = arg.substr(10,arg.length());
|
||||||
|
|
||||||
|
|
||||||
|
//Info options
|
||||||
|
|
||||||
else if (arg == "--showstatepath")
|
else if (arg == "--showstatepath")
|
||||||
op = opShowStatePath;
|
op = opShowStatePath;
|
||||||
else if (arg == "--showderivations")
|
else if (arg == "--showderivations")
|
||||||
op = opShowDerivations;
|
op = opShowDerivations;
|
||||||
else if (arg == "--showrevisions")
|
else if (arg == "--showrevisions")
|
||||||
op = queryAvailableStateRevisions;
|
op = queryAvailableStateRevisions;
|
||||||
|
|
||||||
|
|
||||||
|
//State options
|
||||||
|
|
||||||
else if (arg.substr(0,21) == "--revert-to-revision="){
|
else if (arg.substr(0,21) == "--revert-to-revision="){
|
||||||
op = revertToRevision;
|
op = revertToRevision;
|
||||||
bool succeed = string2UnsignedInt(arg.substr(21,arg.length()), revision_arg);
|
bool succeed = string2UnsignedInt(arg.substr(21,arg.length()), revision_arg);
|
||||||
if(!succeed)
|
if(!succeed)
|
||||||
throw UsageError("The given revision is not a valid number");
|
throw UsageError("The given revision is not a valid number");
|
||||||
}
|
}
|
||||||
|
else if (arg.substr(0,10) == "--revert-to-revision-recursively")
|
||||||
/*
|
revert_recursively = true;
|
||||||
--run-without-commit
|
|
||||||
|
|
||||||
--show-revision-path=....
|
|
||||||
|
|
||||||
--showrevisions
|
|
||||||
|
|
||||||
--revert-to-revision=
|
|
||||||
|
|
||||||
|
/*
|
||||||
--share-from
|
--share-from
|
||||||
|
|
||||||
--unshare
|
--unshare
|
||||||
|
*/
|
||||||
OPTIONAL
|
|
||||||
|
|
||||||
--scanreferences
|
//Maybe
|
||||||
|
|
||||||
/////////////////////
|
/*
|
||||||
|
|
||||||
--backup ?
|
--backup ?
|
||||||
|
|
||||||
--exclude-commit-paths
|
--exclude-commit-paths
|
||||||
|
|
@ -547,16 +565,13 @@ void run(Strings args)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
else if (arg == "--scanreferences")
|
//Manipulate options....
|
||||||
scanforReferences = true;
|
|
||||||
else if (arg.substr(0,13) == "--identifier=")
|
else if (arg.substr(0,13) == "--identifier=")
|
||||||
stateIdentifier = arg.substr(13,arg.length());
|
stateIdentifier = arg.substr(13,arg.length());
|
||||||
else if (arg.substr(0,7) == "--user=")
|
else if (arg.substr(0,7) == "--user=")
|
||||||
username = arg.substr(7,arg.length());
|
username = arg.substr(7,arg.length());
|
||||||
else if (arg.substr(0,10) == "--comment=")
|
|
||||||
comment = arg.substr(10,arg.length());
|
|
||||||
else if (arg.substr(0,10) == "--revert-to-revision-recursively")
|
|
||||||
revert_recursively = true;
|
|
||||||
else
|
else
|
||||||
opArgs.push_back(arg);
|
opArgs.push_back(arg);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -248,7 +248,7 @@ static void performOp(Source & from, Sink & to, unsigned int op)
|
||||||
}
|
}
|
||||||
|
|
||||||
case wopIsValidStatePath: {
|
case wopIsValidStatePath: {
|
||||||
Path path = readStorePath(from);
|
Path path = readString(from); //TODO readStatePath
|
||||||
startWork();
|
startWork();
|
||||||
bool result = store->isValidStatePath(path);
|
bool result = store->isValidStatePath(path);
|
||||||
stopWork();
|
stopWork();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue