22
22
import sys, re, getopt
23
from command import Command
24
import stdhome.the as the
25
from stdhome.deployment import Deployment
28
class UpdateCommand( Command ):
24
from deployment import Deployment
31
30
def __init__( self ):
90
89
the.set_repo( self.repo )
91
90
the.repo.check_dir_exists()
93
# initialise deployment (and check it)
92
# initialise deployment (check it's valid)
94
93
deployment = Deployment()
95
94
deployment.check_ongoing( False )
104
103
# copy-in changes to repo
106
105
deployment.copy_in()
107
except deployment.CopyInConflicts as e:
108
raise the.program.FatalError(
109
'Files in %s differ too severly from %s:\n %s\n' % \
110
( the.home_dir, the.repo.dir, '\n '.join( e.conflicts ) ) )
106
except( deployment.Conflict, deployment.DeploymentOngoing ) as e:
107
raise the.program.FatalError( e.msg )
112
109
# perform vcs update
113
110
if the.verbose: print "updating %s" % the.repo.dir
114
updated_files = the.repo.vcs.update()
111
the.repo.vcs.update()
113
# check for conflicts
118
# check for conflicts in repo
119
115
files = the.repo.vcs.get_conflicts()
121
message += 'conflicts in %s:\n %s' % \
117
message += 'Conflicts in %s:\n %s' % \
122
118
( the.repo.name, '\n '.join( files ) )
124
# check for deployment conclicts
125
conflicts = deployment.get_conflicts( updated_files )
127
message += 'deployment conflicts:\n %s' % \
128
'\n '.join( conflicts )
130
# stop if there are conflicts
119
files = deployment.get_conflicts()
121
message += 'Deployment conflicts:\n %s' % \
132
124
raise the.program.FatalError(
133
125
'there were conflicts...\n' + message )
134
127
# copy-out changes from repo
135
deployment.copy_out()
129
deployment.copy_out()
130
except deployment.Conflict as e:
131
raise the.program.FatalError( e.msg )
137
133
# now we've copied-out, revert any copied-in changes!
138
134
if the.verbose: print "reverting %s" % the.repo.dir