diff options
author | Matthew O'Gorman <mog@rldn.net> | 2016-01-07T01·15-0500 |
---|---|---|
committer | Matthew O'Gorman <mog@rldn.net> | 2018-03-02T02·47-0500 |
commit | 429154b74c7f4b4d679ae79bbc939049f537bfaf (patch) | |
tree | 8f393c37c7138cf16a23c2e364b9f5f0bcd765a1 /src/libstore/profiles.cc | |
parent | 4a000cbb39766812fccebfa7cf8b76ecca8f6e63 (diff) |
Implement --delete-generations + flag for keeping last N number of generations
Diffstat (limited to 'src/libstore/profiles.cc')
-rw-r--r-- | src/libstore/profiles.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libstore/profiles.cc b/src/libstore/profiles.cc index 4a607b584506..e6300cf05552 100644 --- a/src/libstore/profiles.cc +++ b/src/libstore/profiles.cc @@ -157,6 +157,29 @@ void deleteGenerations(const Path & profile, const std::set<unsigned int> & gens } } +void deleteGenerationsGreaterThan(const Path & profile, const string & max, bool dryRun) +{ + int max_keep = 0; + 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); + + int curGen; + Generations gens = findGenerations(profile, curGen); + + for (auto i = gens.rbegin(); i != gens.rend(); ++i) { + if (max_keep) { + max_keep--; + continue; + } + deleteGeneration2(profile, i->number, dryRun); + } +} void deleteOldGenerations(const Path & profile, bool dryRun) { |