this updates issues that were addressed by people in pr

This commit is contained in:
Matthew O'Gorman 2016-05-19 15:42:54 -04:00
parent 429154b74c
commit 0312d30315
3 changed files with 14 additions and 13 deletions

View file

@ -157,15 +157,10 @@ void deleteGenerations(const Path & profile, const std::set<unsigned int> & gens
} }
} }
void deleteGenerationsGreaterThan(const Path & profile, const string & max, bool dryRun) void deleteGenerationsGreaterThan(const Path & profile, int max, bool dryRun)
{ {
int max_keep = 0; int max_keep = 0;
PathLocks lock; PathLocks lock;
if(max.size() < 2)
throw Error(format("invalid number of generations %1%") % max);
string str_max = string(max, 1, max.size());
if (!string2Int(str_max, max_keep) || max_keep == 0)
throw Error(format("invalid number of generations to keep %1%") % max);
lockProfile(lock, profile); lockProfile(lock, profile);
@ -173,11 +168,11 @@ void deleteGenerationsGreaterThan(const Path & profile, const string & max, bool
Generations gens = findGenerations(profile, curGen); Generations gens = findGenerations(profile, curGen);
for (auto i = gens.rbegin(); i != gens.rend(); ++i) { for (auto i = gens.rbegin(); i != gens.rend(); ++i) {
if (max_keep) { if (max) {
max_keep--; max--;
continue; continue;
} }
deleteGeneration2(profile, i->number, dryRun); deleteGeneration2(profile, i->number, dryRun);
} }
} }

View file

@ -39,7 +39,7 @@ void deleteGeneration(const Path & profile, unsigned int gen);
void deleteGenerations(const Path & profile, const std::set<unsigned int> & gensToDelete, bool dryRun); void deleteGenerations(const Path & profile, const std::set<unsigned int> & gensToDelete, bool dryRun);
void deleteGenerationsGreaterThan(const Path & profile, const string & max, bool dryRun); void deleteGenerationsGreaterThan(const Path & profile, const int max, bool dryRun);
void deleteOldGenerations(const Path & profile, bool dryRun); void deleteOldGenerations(const Path & profile, bool dryRun);

View file

@ -1285,7 +1285,13 @@ static void opDeleteGenerations(Globals & globals, Strings opFlags, Strings opAr
} else if (opArgs.size() == 1 && opArgs.front().find('d') != string::npos) { } else if (opArgs.size() == 1 && opArgs.front().find('d') != string::npos) {
deleteGenerationsOlderThan(globals.profile, opArgs.front(), globals.dryRun); deleteGenerationsOlderThan(globals.profile, opArgs.front(), globals.dryRun);
} else if (opArgs.size() == 1 && opArgs.front().find('+') != string::npos) { } else if (opArgs.size() == 1 && opArgs.front().find('+') != string::npos) {
deleteGenerationsGreaterThan(globals.profile, opArgs.front(), globals.dryRun); if(opArgs.front().size() < 2)
throw Error(format("invalid number of generations %1%") % opArgs.front());
string str_max = string(opArgs.front() 1, opArgs.front().size());
int max;
if (!string2Int(str_max, max) || max == 0)
throw Error(format("invalid number of generations to keep %1%") % opArgs.front());
deleteGenerationsGreaterThan(globals.profile, max, globals.dryRun);
} else { } else {
std::set<unsigned int> gens; std::set<unsigned int> gens;
for (auto & i : opArgs) { for (auto & i : opArgs) {