/stdhome

To get this branch, use:
bzr branch http://bzr.ed.am/stdhome

« back to all changes in this revision

Viewing changes to lib/stdhome/deployment.py

  • Committer: Tim Marston
  • Date: 2021-07-05 19:14:32 UTC
  • Revision ID: tim@ed.am-20210705191432-243ayb7s2nmussvi
python3ification

Show diffs side-by-side

added added

removed removed

20
20
 
21
21
 
22
22
import os, re, shutil, filecmp, json
23
 
import the, util
24
 
from walker.copy_in import CopyInWalker
25
 
from walker.conflict import ConflictWalker
26
 
from walker.copy_out import CopyOutWalker
 
23
from . import the, util
 
24
from .walker.copy_in import CopyInWalker
 
25
from .walker.conflict import ConflictWalker
 
26
from .walker.copy_out import CopyOutWalker
27
27
 
28
28
 
29
29
class Deployment:
43
43
                """
44
44
 
45
45
                # list of files that were copied-in (or at least given the opportunity
46
 
        # to be) and updated through the vcs update.  This means that, while
47
 
        # there may have been conflicts during the update (which the user will
48
 
        # have to have dealt with in the repo), any conflicts arising with these
49
 
        # files in the home directory are no longer important and can be
50
 
        # ignored.  In short, this is a list of files that can safely be
51
 
        # deployed, regardless of the state of the home directory.
 
46
                # to be) and updated through the vcs update.  This means that, while
 
47
                # there may have been conflicts during the update (which the user will
 
48
                # have to have dealt with in the repo), any conflicts arising with these
 
49
                # files in the home directory are no longer important and can be
 
50
                # ignored.  In short, this is a list of files that can safely be
 
51
                # deployed, regardless of the state of the home directory.
52
52
                self.imported_files = None
53
53
 
54
54
                # list of files that were affected by a recent vcs update (so only these
67
67
                        return
68
68
 
69
69
                # read the file list
70
 
                if the.verbose >= 1: print "deployment state found; loading"
 
70
                if the.verbose >= 1: print("deployment state found; loading")
71
71
                f = open( file, 'r' )
72
72
                state = json.loads( f.read() )
73
73
 
74
74
                # unpack deployment state
75
 
                self.imported_files = state['imported_files'];
76
 
                self.initial_revno = state['initial_revno'];
77
 
                self.affected_files = state['affected_files'];
 
75
                if 'imported_files' in state:
 
76
                        self.imported_files = state['imported_files'];
 
77
                if 'initial_revno' in state:
 
78
                        self.initial_revno = state['initial_revno'];
 
79
                if 'affected_files' in state:
 
80
                        self.affected_files = state['affected_files'];
78
81
 
79
82
 
80
83
        def save_deployment_state( self ):
81
84
                """Save the current deployment state (so there will be a deployment ongoing).
82
85
                """
83
86
 
84
 
                if the.verbose >= 1: print "saving deployment state"
 
87
                if the.verbose >= 1: print("saving deployment state")
85
88
 
86
89
                # create metadata directory, as necessary
87
90
                if not os.path.isdir( the.full_mddir ):
109
112
                if( os.path.isfile( file ) ):
110
113
 
111
114
                        # delete it
112
 
                        if the.verbose >= 1: print "removing deployment state"
 
115
                        if the.verbose >= 1: print("removing deployment state")
113
116
                        os.unlink( file )
114
117
 
115
118
 
153
156
                        self.imported_files = list()
154
157
                else:
155
158
                        # copy in
156
 
                        if the.verbose >= 1: print "importing files..."
 
159
                        if the.verbose >= 1: print("importing files...")
157
160
                        walker = CopyInWalker()
158
161
                        walker.walk()
159
162
                        self.imported_files = walker.walk_list
188
191
                return walker.changed + walker.obstructed
189
192
 
190
193
 
191
 
        def copy_out( self ):
 
194
        def copy_out( self, quiet ):
192
195
                """Copy-out changed files from the repository to the home directory.  If the
193
196
                deployment state includes a list of affected files, then only those
194
197
                files are copied-out.
202
205
                        raise RuntimeError('logic error: deployment conflicts unchecked' )
203
206
 
204
207
                # copy out
205
 
                if the.verbose >= 1: print "exporting files..."
206
 
                walker = CopyOutWalker( self.affected_files )
 
208
                if the.verbose >= 1: print("exporting files...")
 
209
                walker = CopyOutWalker( self.affected_files, not quiet )
207
210
                walker.walk()
208
211
 
209
212
                # clear state
217
220
                                self.msg = "there is an ongoing deployment"
218
221
                        else:
219
222
                                self.msg = "there is no ongoing deployment"
220
 
 
221
 
 
222
 
        class CopyInConflicts( the.program.FatalError ):
223
 
 
224
 
                def __init__( self, conflicts ):
225
 
                        self.conflicts = conflicts