From d838f2b136fbe5a6543f6e7ec5cd37ac90756bca Mon Sep 17 00:00:00 2001 From: itchyny Date: Wed, 8 Jan 2020 09:00:08 +0900 Subject: [PATCH] remove renames with same source and destination --- mmv.go | 6 ++++++ mmv_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/mmv.go b/mmv.go index be8faf9..43460ce 100644 --- a/mmv.go +++ b/mmv.go @@ -61,6 +61,12 @@ func buildRenames(files map[string]string) ([]rename, error) { } revs[dst] = src } + for src, dst := range files { + if src == dst { + delete(files, src) + delete(revs, dst) + } + } var i int for _, dst := range files { if vs[dst] > 0 { diff --git a/mmv_test.go b/mmv_test.go index aa0df40..28bfef5 100644 --- a/mmv_test.go +++ b/mmv_test.go @@ -198,6 +198,30 @@ func TestRename(t *testing.T) { }, err: &sameDestinationError{"baz"}, }, + { + name: "same source and destination", + files: map[string]string{ + "foo/": "foo", + "bar/": "bar", + }, + cnt: 0, + contents: map[string]string{ + "foo": "0", + "bar": "1", + }, + expected: map[string]string{ + "foo": "0", + "bar": "1", + }, + }, + { + name: "same source and destination with error", + files: map[string]string{ + "foo/": "foo/", + "bar/": "foo", + }, + err: &sameDestinationError{"foo"}, + }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) {