Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Unified Diff: depot_tools/drover.py

Issue 651022: Add option --local allowing for merging changes into a local working copy.... (Closed) Base URL: http://src.chromium.org/svn/trunk/tools/depot_tools/
Patch Set: '' Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: depot_tools/drover.py
===================================================================
--- depot_tools/drover.py (revision 39600)
+++ depot_tools/drover.py (working copy)
@@ -24,6 +24,10 @@
--merge <revision> --branch <branch_num>
Example: %(app)s --merge 12345 --branch 187
+[Merge from trunk to local copy]
+--merge <revision> --local
+Example: %(app)s --merge 12345 --local
+
[Merge from branch to branch]
--merge <revision> --sbranch <branch_num> --branch <branch_num>
Example: %(app)s --merge 12345 --sbranch 248 --branch 249
@@ -96,6 +100,19 @@
return info
+def isSVNDirty():
+ command = 'svn status'
+ svn_status = subprocess.Popen(command,
+ shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE).stdout.readlines()
+ for line in svn_status:
+ match = re.search(r"^[^X?]", line)
+ if match:
+ return True
+
+ return False
+
def getAuthor(url, revision):
info = getSVNInfo(url, revision)
if (info.has_key("Last Changed Author")):
@@ -116,6 +133,16 @@
return True
return False
+def inCheckoutRoot(path):
+ info = getSVNInfo(path, "HEAD")
+ if (not info.has_key("Repository Root")):
+ return False
+ repo_root = info["Repository Root"];
+ info = getSVNInfo(os.path.dirname(os.path.abspath(path)), "HEAD")
+ if (info.get("Repository Root", None) != repo_root):
+ return True
+ return False
+
def getRevisionLog(url, revision):
"""Takes an svn url and gets the associated revision."""
command = 'svn log ' + url + " -r"+str(revision)
@@ -442,26 +469,37 @@
working = options.workdir or DEFAULT_WORKING
+ if options.local:
+ working = os.getcwd()
+ if not inCheckoutRoot(working):
+ print "'%s' appears not to be the root of a working copy" % working
+ sys.exit(1)
+ if isSVNDirty():
+ print "Working copy contains uncommitted files"
+ sys.exit(1)
+
command = 'svn log ' + url + " -r "+str(revision) + " -v"
os.system(command)
if not (options.revertbot or prompt("Is this the correct revision?")):
sys.exit(0)
- if (os.path.exists(working)):
+ if (os.path.exists(working)) and not options.local:
if not (options.revertbot or SKIP_CHECK_WORKING or
prompt("Working directory: '%s' already exists, clobber?" % working)):
sys.exit(0)
deltree(working)
- os.makedirs(working)
- os.chdir(working)
+ if not options.local:
+ os.makedirs(working)
+ os.chdir(working)
if options.merge:
action = "Merge"
- branch_url = BRANCH_URL.replace("$branch", options.branch)
- # Checkout everything but stuff that got added into a new dir
- checkoutRevision(url, revision, branch_url)
+ if not options.local:
+ branch_url = BRANCH_URL.replace("$branch", options.branch)
+ # Checkout everything but stuff that got added into a new dir
+ checkoutRevision(url, revision, branch_url)
# Merge everything that changed
mergeRevision(url, revision)
# "Export" files that were added from the source and add them to branch
@@ -498,6 +536,10 @@
change_cmd += ' --silent'
runGcl(change_cmd)
os.unlink(filename)
+
+ if options.local:
+ sys.exit(0)
+
print author
print revision
print ("gcl upload " + str(revision) +
@@ -532,6 +574,8 @@
help='Revision to merge from trunk to branch')
option_parser.add_option('-b', '--branch',
help='Branch to revert or merge from')
+ option_parser.add_option('-l', '--local', action='store_true',
+ help='Local working copy to merge to')
option_parser.add_option('-s', '--sbranch',
help='Source branch for merge')
option_parser.add_option('-r', '--revert', type="int",
@@ -551,8 +595,12 @@
option_parser.error("You need at least --merge or --revert")
sys.exit(1)
- if options.merge and not options.branch:
- option_parser.error("--merge requires a --branch")
+ if options.merge and not options.branch and not options.local:
+ option_parser.error("--merge requires either --branch or --local")
sys.exit(1)
+ if options.local and (options.revert or options.branch):
+ option_parser.error("--local cannot be used with --revert or --branch")
+ sys.exit(1)
+
sys.exit(main(options, args))
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698