@@ -25,13 +25,10 @@ func (m Migration) Reversible() bool {
2525
2626const keyFilenamePrefix = "key_"
2727
28- func isEncoded (name string ) bool {
29- if ! strings .HasPrefix (name , keyFilenamePrefix ) {
30- return false
31- }
28+ const keystoreRoot = "keystore"
3229
30+ func isEncoded (name string ) bool {
3331 _ , err := decode (name )
34-
3532 return err == nil
3633}
3734
@@ -52,49 +49,23 @@ func decode(name string) (string, error) {
5249 nameWithoutPrefix := strings .ToUpper (name [len (keyFilenamePrefix ):])
5350 data , err := base32 .StdEncoding .DecodeString (nameWithoutPrefix )
5451
55- if err != nil {
56- return "" , err
57- }
58-
59- decodedName := string (data [:])
60-
61- return decodedName , nil
52+ return string (data ), err
6253}
6354
6455func (m Migration ) Apply (opts migrate.Options ) error {
6556 log .Verbose = opts .Verbose
6657 log .Log ("applying %s repo migration" , m .Versions ())
6758
68- keystoreRoot := filepath .Join (opts .Path , "keystore" )
69- fileInfos , err := ioutil .ReadDir (keystoreRoot )
59+ err := m .encodeDecode (
60+ opts ,
61+ isEncoded , // skip if already encoded
62+ encode ,
63+ )
7064
7165 if err != nil {
7266 return err
7367 }
7468
75- for _ , info := range fileInfos {
76- if info .IsDir () {
77- log .Log ("skipping " , info .Name (), " as it is directory!" )
78- continue
79- }
80-
81- if isEncoded (info .Name ()) {
82- log .Log ("skipping " , info .Name (), " as it is already encoded!" )
83- continue
84- }
85-
86- log .VLog ("migrating key's filename: " , info .Name ())
87- encodedName , err := encode (info .Name ())
88- if err != nil {
89- return err
90- }
91-
92- os .Rename (
93- filepath .Join (keystoreRoot , info .Name ()),
94- filepath .Join (keystoreRoot , encodedName ),
95- )
96- }
97-
9869 err = mfsr .RepoPath (opts .Path ).WriteVersion ("9" )
9970 if err != nil {
10071 log .Error ("failed to update version file to 9" )
@@ -106,11 +77,8 @@ func (m Migration) Apply(opts migrate.Options) error {
10677 return nil
10778}
10879
109- func (m Migration ) Revert (opts migrate.Options ) error {
110- log .Verbose = opts .Verbose
111- log .Log ("reverting migration" )
112-
113- keystoreRoot := filepath .Join (opts .Path , "keystore" )
80+ func (m Migration ) encodeDecode (opts migrate.Options , shouldApplyCodec func (string ) bool , codec func (string ) (string , error )) error {
81+ keystoreRoot := filepath .Join (opts .Path , keystoreRoot )
11482 fileInfos , err := ioutil .ReadDir (keystoreRoot )
11583
11684 if err != nil {
@@ -119,25 +87,45 @@ func (m Migration) Revert(opts migrate.Options) error {
11987
12088 for _ , info := range fileInfos {
12189 if info .IsDir () {
122- log .Log ("skipping" , info .Name (), "as it is directory!" )
90+ log .Log ("skipping " , info .Name (), " as it is directory!" )
12391 continue
12492 }
12593
126- if ! isEncoded (info .Name ()) {
127- log .Log ("skipping" , info .Name (), "as it is not encoded !" )
94+ if shouldApplyCodec (info .Name ()) {
95+ log .Log ("skipping " , info .Name (), ". Already in expected format !" )
12896 continue
12997 }
13098
131- log .VLog ("reverting key's filename:" , info .Name ())
132- decodedName , err := decode (info .Name ())
99+ log .VLog ("Renaming key's filename: " , info .Name ())
100+ encodedName , err := codec (info .Name ())
133101 if err != nil {
134102 return err
135103 }
136104
137- os .Rename (
138- filepath .Join (keystoreRoot , info .Name ()),
139- filepath .Join (keystoreRoot , decodedName ),
140- )
105+ src := filepath .Join (keystoreRoot , info .Name ())
106+ dest := filepath .Join (keystoreRoot , encodedName )
107+
108+ if err := os .Rename (src , dest ); err != nil {
109+ return err
110+ }
111+ }
112+ return nil
113+ }
114+
115+ func (m Migration ) Revert (opts migrate.Options ) error {
116+ log .Verbose = opts .Verbose
117+ log .Log ("reverting migration" )
118+
119+ err := m .encodeDecode (
120+ opts ,
121+ func (name string ) bool {
122+ return ! isEncoded (name ) // skip if not encoded
123+ },
124+ decode ,
125+ )
126+
127+ if err != nil {
128+ return err
141129 }
142130
143131 err = mfsr .RepoPath (opts .Path ).WriteVersion ("8" )
0 commit comments