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 ResolveCommand( Command ):
24
from deployment import Deployment
31
30
def __init__( self ):
35
34
def print_help( self ):
48
47
print " " + the.program.name + " conflicts"
51
print " --quiet do not report changes to the home directory"
52
50
print " -r, --repo=REPO select the repo to check-out or create (defaults to 'home')"
53
51
print " -v, --verbose display information about what is being done"
54
52
print " --help display help and exit"
58
56
def parse_command_line( self ):
59
57
opts, args = getopt.gnu_getopt(
60
58
sys.argv[ 1: ], "r:v",
61
[ "quiet", "repo=", "verbose", "help" ] )
59
[ "repo=", "verbose", "help" ] )
62
60
for opt, optarg in opts:
65
elif opt in [ '--repo', '-r' ]:
66
if not re.search( '^[-a-zA-z0-9.]+$', optarg ):
61
if opt in [ '--repo', '-r' ]:
62
if not re.match( '^[-a-zA-z0-9.]+$', optarg ):
67
63
raise the.program.FatalError(
68
64
'invalid repository name: ' + optarg )
70
66
elif opt in [ '--verbose', '-v' ]:
72
68
elif opt == "--help":
75
71
# discard first argument (the command)
85
81
# set up repo and check it exists
82
the.set_repo( self.repo )
86
83
the.repo.check_dir_exists()
88
85
# initialise deployment (check it's valid)
89
86
deployment = Deployment()
90
87
deployment.check_ongoing( True )
94
# check for conflicts in repo
95
files = the.repo.vcs.get_conflicts()
97
message += 'conflicts in %s:\n %s' % \
98
( the.repo.name, '\n '.join( files ) )
100
# check for deployment conclicts
101
conflicts = deployment.get_conflicts()
103
message += 'deployment conflicts:\n %s' % \
91
conflicts = the.repo.vcs.has_conflicts()
93
message += 'Conflicts in %s:\n %s' % \
94
( the.repo.name, '\n '.join( conflicts ) )
95
conflicts = deployment.check_conflicts()
97
message += 'Deployment conflicts:\n %s' % \
104
98
'\n '.join( conflicts )
106
# stop if there are conflicts
108
raise the.program.FatalError(
109
'there were conflicts...\n' + message )
100
raise the.program.FatalError( 'there are conflicts:\n' + message )
111
102
# copy-out changes from repo
112
deployment.copy_out( self.quiet )
104
deployment.copy_out()
105
except deployment.Conflict as e:
106
raise the.program.FatalError( e.msg )
114
108
# now we've copied-out, revert any copied-in changes!
115
if the.verbose >= 1: print "reverting %s" % the.repo.dir
109
if the.verbose: print "reverting %s" % the.repo.dir
116
110
the.repo.vcs.revert()