From c72ef05a2a4d65c7d245aa867840d35f5c886144 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 29 May 2014 18:05:52 +0400 Subject: [PATCH] Support for -no-remove while merging snapshots. #57 --- cmd/snapshot_merge.go | 10 ++++++-- system/t05_snapshot/merge.py | 48 ++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/cmd/snapshot_merge.go b/cmd/snapshot_merge.go index 8982b28b..b2480bfe 100644 --- a/cmd/snapshot_merge.go +++ b/cmd/snapshot_merge.go @@ -29,10 +29,15 @@ func aptlySnapshotMerge(cmd *commander.Command, args []string) error { } latest := context.flags.Lookup("latest").Value.Get().(bool) - overrideMatching := !latest + noRemove := context.flags.Lookup("no-remove").Value.Get().(bool) + + if noRemove && latest { + return fmt.Errorf("-no-remove and -latest can't be specified together") + } + + overrideMatching := !latest && !noRemove result := sources[0].RefList() - for i := 1; i < len(sources); i++ { result = result.Merge(sources[i].RefList(), overrideMatching) } @@ -79,6 +84,7 @@ Example: } cmd.Flag.Bool("latest", false, "use only the latest version of each package") + cmd.Flag.Bool("no-remove", false, "don't remove duplicate arch/name packages") return cmd } diff --git a/system/t05_snapshot/merge.py b/system/t05_snapshot/merge.py index 78034844..7eb54448 100644 --- a/system/t05_snapshot/merge.py +++ b/system/t05_snapshot/merge.py @@ -136,3 +136,51 @@ class MergeSnapshot8Test(BaseTest): ] runCmd = "aptly snapshot diff snap4 snap5" expectedCode = 0 + + +class MergeSnapshot9Test(BaseTest): + """ + merge snapshots: -no-remove + """ + fixtureDB = True + fixtureCmds = [ + "aptly snapshot create snap1 from mirror wheezy-main", + "aptly snapshot create snap2 from mirror wheezy-non-free", + "aptly snapshot create snap3 from mirror wheezy-backports", + ] + runCmd = "aptly snapshot merge -no-remove snap4 snap1 snap2 snap3" + expectedCode = 0 + + def check(self): + def remove_created_at(s): + return re.sub(r"Created At: [0-9:A-Za-z -]+\n", "", s) + + self.check_output() + self.check_cmd_output("aptly snapshot show -with-packages snap4", "snapshot_show", match_prepare=remove_created_at) + + +class MergeSnapshot10Test(BaseTest): + """ + merge snapshots: compare -no-remove and regular + """ + fixtureDB = True + fixtureCmds = [ + "aptly snapshot create snap1 from mirror wheezy-main", + "aptly snapshot create snap2 from mirror wheezy-non-free", + "aptly snapshot create snap3 from mirror wheezy-backports", + "aptly snapshot merge snap4 snap3 snap2 snap1", + "aptly snapshot merge -no-remove snap5 snap3 snap2 snap1", + ] + runCmd = "aptly snapshot diff snap4 snap5" + expectedCode = 0 + + +class MergeSnapshot11Test(BaseTest): + """ + merge snapshots: -no-remove & -latest conflict + """ + fixtureCmds = [ + "aptly snapshot create snap1 empty" + ] + runCmd = "aptly snapshot merge -no-remove -latest snap2 snap1" + expectedCode = 1