mirror of
https://github.com/NixOS/nix.git
synced 2025-11-26 12:10:59 +01:00
This commit is contained in:
parent
f435abcdb6
commit
4c32f38047
13 changed files with 125 additions and 14 deletions
|
|
@ -178,7 +178,7 @@ static void initAndRun(int argc, char * * argv)
|
||||||
buildVerbosity = lvlVomit;
|
buildVerbosity = lvlVomit;
|
||||||
|
|
||||||
//we need to push back since arguments need to be passed on in the state wrapper script
|
//we need to push back since arguments need to be passed on in the state wrapper script
|
||||||
else if (arg == "--help") {
|
else if (arg == "--help" && programId != "nix-state") {
|
||||||
printHelp();
|
printHelp();
|
||||||
remaining.push_back(arg);
|
remaining.push_back(arg);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1837,6 +1837,11 @@ Path toNonSharedPathTxn(const Transaction & txn, const Path & statePath)
|
||||||
return returnedPath;
|
return returnedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LocalStore::getSharedWith(const Path & statePath1, Path & statePath2)
|
||||||
|
{
|
||||||
|
return querySharedStateTxn(noTxn, statePath1, statePath2);
|
||||||
|
}
|
||||||
|
|
||||||
PathSet toNonSharedPathSetTxn(const Transaction & txn, const PathSet & statePaths)
|
PathSet toNonSharedPathSetTxn(const Transaction & txn, const PathSet & statePaths)
|
||||||
{
|
{
|
||||||
PathSet real_statePaths;
|
PathSet real_statePaths;
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,8 @@ public:
|
||||||
|
|
||||||
void scanAndUpdateAllReferences(const Path & statePath, const bool recursive);
|
void scanAndUpdateAllReferences(const Path & statePath, const bool recursive);
|
||||||
|
|
||||||
|
bool getSharedWith(const Path & statePath1, Path & statePath2);
|
||||||
|
|
||||||
PathSet toNonSharedPathSet(const PathSet & statePaths);
|
PathSet toNonSharedPathSet(const PathSet & statePaths);
|
||||||
|
|
||||||
void revertToRevision(const Path & statePath, const unsigned int revision_arg, const bool recursive);
|
void revertToRevision(const Path & statePath, const unsigned int revision_arg, const bool recursive);
|
||||||
|
|
|
||||||
|
|
@ -286,7 +286,6 @@ Path RemoteStore::addTextToStore(const string & suffix, const string & s,
|
||||||
writeString(suffix, to);
|
writeString(suffix, to);
|
||||||
writeString(s, to);
|
writeString(s, to);
|
||||||
writeStringSet(references, to);
|
writeStringSet(references, to);
|
||||||
|
|
||||||
processStderr();
|
processStderr();
|
||||||
return readStorePath(from);
|
return readStorePath(from);
|
||||||
}
|
}
|
||||||
|
|
@ -310,7 +309,6 @@ Path RemoteStore::importPath(bool requireSignature, Source & source)
|
||||||
anyway. */
|
anyway. */
|
||||||
|
|
||||||
processStderr(0, &source);
|
processStderr(0, &source);
|
||||||
//Path path = readStorePath(from); //TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! remove
|
|
||||||
return readStorePath(from);
|
return readStorePath(from);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -504,6 +502,15 @@ void RemoteStore::scanAndUpdateAllReferences(const Path & statePath, const bool
|
||||||
readInt(from);
|
readInt(from);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RemoteStore::getSharedWith(const Path & statePath1, Path & statePath2)
|
||||||
|
{
|
||||||
|
writeInt(wopGetSharedWith, to);
|
||||||
|
writeString(statePath1, to);
|
||||||
|
processStderr();
|
||||||
|
statePath2 = readString(from);
|
||||||
|
unsigned int reply = readInt(from);
|
||||||
|
return reply != 0;
|
||||||
|
}
|
||||||
|
|
||||||
PathSet RemoteStore::toNonSharedPathSet(const PathSet & statePaths)
|
PathSet RemoteStore::toNonSharedPathSet(const PathSet & statePaths)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,8 @@ public:
|
||||||
|
|
||||||
void scanAndUpdateAllReferences(const Path & statePath, const bool recursive);
|
void scanAndUpdateAllReferences(const Path & statePath, const bool recursive);
|
||||||
|
|
||||||
|
bool getSharedWith(const Path & statePath1, Path & statePath2);
|
||||||
|
|
||||||
PathSet toNonSharedPathSet(const PathSet & statePaths);
|
PathSet toNonSharedPathSet(const PathSet & statePaths);
|
||||||
|
|
||||||
void revertToRevision(const Path & statePath, const unsigned int revision_arg, const bool recursive);
|
void revertToRevision(const Path & statePath, const unsigned int revision_arg, const bool recursive);
|
||||||
|
|
|
||||||
|
|
@ -237,6 +237,9 @@ public:
|
||||||
/* TODO */
|
/* TODO */
|
||||||
virtual void scanAndUpdateAllReferences(const Path & statePath, const bool recursive) = 0;
|
virtual void scanAndUpdateAllReferences(const Path & statePath, const bool recursive) = 0;
|
||||||
|
|
||||||
|
/* TODO */
|
||||||
|
virtual bool getSharedWith(const Path & statePath1, Path & statePath2) = 0;
|
||||||
|
|
||||||
/* TODO */
|
/* TODO */
|
||||||
virtual PathSet toNonSharedPathSet(const PathSet & statePaths) = 0;
|
virtual PathSet toNonSharedPathSet(const PathSet & statePaths) = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ typedef enum {
|
||||||
wopQueryAvailableStateRevisions,
|
wopQueryAvailableStateRevisions,
|
||||||
wopCommitStatePath,
|
wopCommitStatePath,
|
||||||
wopScanAndUpdateAllReferences,
|
wopScanAndUpdateAllReferences,
|
||||||
|
wopGetSharedWith,
|
||||||
wopToNonSharedPathSet,
|
wopToNonSharedPathSet,
|
||||||
wopRevertToRevision,
|
wopRevertToRevision,
|
||||||
wopShareState,
|
wopShareState,
|
||||||
|
|
|
||||||
|
|
@ -566,7 +566,7 @@ static void installDerivations(Globals & globals,
|
||||||
//&& the identifiers are equal
|
//&& the identifiers are equal
|
||||||
|
|
||||||
//TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
//TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
//TODO && (the users are equal || OR SHARED BETWEEN USERS)
|
//TODO && (the users are equal || OR SHARED BETWEEN USERS) isnt this already user specific?
|
||||||
//TODO
|
//TODO
|
||||||
if( newSharedState == ""
|
if( newSharedState == ""
|
||||||
&&
|
&&
|
||||||
|
|
@ -621,7 +621,6 @@ static void installDerivations(Globals & globals,
|
||||||
store->shareState(i->second, i->first, false);
|
store->shareState(i->second, i->first, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//**********************
|
//**********************
|
||||||
|
|
||||||
//Let the stateDirs in /nix/state point to the solidStateDependencies
|
//Let the stateDirs in /nix/state point to the solidStateDependencies
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,41 @@ Usage: nix-state [OPTIONS...] [ARGUMENTS...]
|
||||||
|
|
||||||
`nix-state' is a tool to manipulate the Nix state-store and to run programs.
|
`nix-state' is a tool to manipulate the Nix state-store and to run programs.
|
||||||
|
|
||||||
Operations:
|
Run Operations:
|
||||||
|
|
||||||
|
--run / -r: run and commit state
|
||||||
|
--commit-only: commit state
|
||||||
|
--run-only: run
|
||||||
|
--scan-only: scan for references
|
||||||
|
|
||||||
|
Run Options:
|
||||||
|
|
||||||
|
--scanreferences: set scan for references
|
||||||
|
--comment=...: Add a comment for commiting
|
||||||
|
|
||||||
|
Information:
|
||||||
|
|
||||||
|
--showstatepath: print the state path
|
||||||
|
--showderivations: print all derivations of this path
|
||||||
|
--showrevisions: show all revisions of the state path
|
||||||
|
--showsharedpaths: show where this path points to
|
||||||
--version: output version information
|
--version: output version information
|
||||||
--help: display help
|
--help: display help
|
||||||
|
|
||||||
|
Share state Operations:
|
||||||
|
|
||||||
|
--unshare: unshare this path
|
||||||
|
--share-with a b: make the path a point to the path b
|
||||||
|
|
||||||
|
Share state Options:
|
||||||
|
|
||||||
|
--unshare-branch-state:
|
||||||
|
--unshare-restore-old-state:
|
||||||
|
|
||||||
|
Revert state Operations:
|
||||||
|
|
||||||
|
--revert-to-revision=x: revert to revision x
|
||||||
|
|
||||||
|
Revert state Options:
|
||||||
|
|
||||||
|
--revert-to-revision-recursively: revert recursively
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -32,6 +32,8 @@ bool r_scanforReferences = false;
|
||||||
bool r_commit = true;
|
bool r_commit = true;
|
||||||
bool r_run = true;
|
bool r_run = true;
|
||||||
bool revert_recursively = false;
|
bool revert_recursively = false;
|
||||||
|
bool unshare_branch = false;
|
||||||
|
bool unshare_restore_old = false;
|
||||||
|
|
||||||
|
|
||||||
/************************* Build time Functions ******************************/
|
/************************* Build time Functions ******************************/
|
||||||
|
|
@ -243,6 +245,36 @@ static void queryAvailableStateRevisions(Strings opFlags, Strings opArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void opShowSharedPaths(Strings opFlags, Strings opArgs)
|
||||||
|
{
|
||||||
|
Path statePath = *(opArgs.begin());
|
||||||
|
if(!store->isValidStatePath(statePath))
|
||||||
|
throw UsageError(format("Path '%1%' is not a valid state path.") % statePath);
|
||||||
|
|
||||||
|
Path statePath1 = statePath;
|
||||||
|
Path statePath2;
|
||||||
|
bool isShared = false;
|
||||||
|
while(store->getSharedWith(statePath1, statePath2))
|
||||||
|
{
|
||||||
|
isShared = true;
|
||||||
|
printMsg(lvlError, format("Path '%1%' ---is shared with---> '%2%'") % statePath1 % statePath2);
|
||||||
|
statePath1 = statePath2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isShared)
|
||||||
|
printMsg(lvlError, format("Path '%1%' is not shared with another path") % statePath1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void opUnshare(Strings opFlags, Strings opArgs)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void opShareWith(Strings opFlags, Strings opArgs)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void opRunComponent(Strings opFlags, Strings opArgs)
|
static void opRunComponent(Strings opFlags, Strings opArgs)
|
||||||
{
|
{
|
||||||
|
|
@ -272,8 +304,15 @@ static void opRunComponent(Strings opFlags, Strings opArgs)
|
||||||
|
|
||||||
string root_args = "";
|
string root_args = "";
|
||||||
for (Strings::iterator i = root_program_args.begin(); i != root_program_args.end(); ++i){
|
for (Strings::iterator i = root_program_args.begin(); i != root_program_args.end(); ++i){
|
||||||
if(*i == "--help" || *i == "--version")
|
if(*i == "--help" || *i == "--version"){
|
||||||
|
printMsg(lvlError, format("Usage: try --statehelp for extended state help options"));
|
||||||
|
printMsg(lvlError, format("%1%") % padd("", '-', 54));
|
||||||
|
}
|
||||||
|
else if(*i == "--statehelp"){
|
||||||
printMsg(lvlError, format("%1%") % padd("", '-', 100));
|
printMsg(lvlError, format("%1%") % padd("", '-', 100));
|
||||||
|
printHelp();
|
||||||
|
}
|
||||||
|
|
||||||
//printMsg(lvlError, format("ARG %1%") % *i);
|
//printMsg(lvlError, format("ARG %1%") % *i);
|
||||||
root_args += " \"" + *i + "\"";
|
root_args += " \"" + *i + "\"";
|
||||||
|
|
||||||
|
|
@ -522,7 +561,6 @@ void run(Strings args)
|
||||||
Operation oldOp = op;
|
Operation oldOp = op;
|
||||||
|
|
||||||
//Run options
|
//Run options
|
||||||
|
|
||||||
if (arg == "--run" || arg == "-r") //run and commit
|
if (arg == "--run" || arg == "-r") //run and commit
|
||||||
op = opRunComponent;
|
op = opRunComponent;
|
||||||
else if (arg == "--commit-only"){
|
else if (arg == "--commit-only"){
|
||||||
|
|
@ -551,7 +589,6 @@ void run(Strings args)
|
||||||
|
|
||||||
|
|
||||||
//Info options
|
//Info options
|
||||||
|
|
||||||
else if (arg == "--showstatepath")
|
else if (arg == "--showstatepath")
|
||||||
op = opShowStatePath;
|
op = opShowStatePath;
|
||||||
else if (arg == "--showderivations")
|
else if (arg == "--showderivations")
|
||||||
|
|
@ -560,17 +597,28 @@ void run(Strings args)
|
||||||
op = queryAvailableStateRevisions;
|
op = queryAvailableStateRevisions;
|
||||||
|
|
||||||
|
|
||||||
//State options
|
//Revering 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")
|
else if (arg == "--revert-to-revision-recursively")
|
||||||
revert_recursively = true;
|
revert_recursively = true;
|
||||||
|
|
||||||
|
//Shared state options
|
||||||
|
else if (arg == "--showsharedpaths")
|
||||||
|
op = opShowSharedPaths;
|
||||||
|
else if (arg == "--unshare")
|
||||||
|
op = opUnshare;
|
||||||
|
else if (arg == "--unshare-branch-state")
|
||||||
|
unshare_branch = true;
|
||||||
|
else if (arg == "--unshare-restore-old-state")
|
||||||
|
unshare_restore_old = true;
|
||||||
|
else if (arg == "--share-with")
|
||||||
|
op = opShareWith;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
--share-from
|
--share-from
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -431,7 +431,7 @@ static void opRegisterSubstitutes(Strings opFlags, Strings opArgs)
|
||||||
Substitute sub;
|
Substitute sub;
|
||||||
PathSet references;
|
PathSet references;
|
||||||
|
|
||||||
//TODO TODO TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
|
//TODO TODO TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
PathSet stateReferences;
|
PathSet stateReferences;
|
||||||
|
|
||||||
getline(cin, srcPath);
|
getline(cin, srcPath);
|
||||||
|
|
|
||||||
|
|
@ -571,6 +571,17 @@ static void performOp(Source & from, Sink & to, unsigned int op)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case wopGetSharedWith: {
|
||||||
|
Path statePath1 = readString(from);
|
||||||
|
Path statePath2;
|
||||||
|
startWork();
|
||||||
|
bool result = store->getSharedWith(statePath1, statePath2);
|
||||||
|
stopWork();
|
||||||
|
writeString(statePath2, to);
|
||||||
|
writeInt(result, to);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case wopToNonSharedPathSet: {
|
case wopToNonSharedPathSet: {
|
||||||
PathSet statePaths = readStringSet(from);
|
PathSet statePaths = readStringSet(from);
|
||||||
startWork();
|
startWork();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue