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

Side by Side Diff: git_common.py

Issue 288323002: Make marked merge base invalid when the upstream changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | git_map.py » ('j') | git_map.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Monkeypatch IMapIterator so that Ctrl-C can kill everything properly. 5 # Monkeypatch IMapIterator so that Ctrl-C can kill everything properly.
6 # Derived from https://gist.github.com/aljungberg/626518 6 # Derived from https://gist.github.com/aljungberg/626518
7 import multiprocessing.pool 7 import multiprocessing.pool
8 from multiprocessing.pool import IMapIterator 8 from multiprocessing.pool import IMapIterator
9 def wrapper(func): 9 def wrapper(func):
10 def wrap(self, timeout=None): 10 def wrap(self, timeout=None):
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 345
346 return skipped, branch_tree 346 return skipped, branch_tree
347 347
348 348
349 def get_or_create_merge_base(branch, parent=None): 349 def get_or_create_merge_base(branch, parent=None):
350 """Finds the configured merge base for branch. 350 """Finds the configured merge base for branch.
351 351
352 If parent is supplied, it's used instead of calling upstream(branch). 352 If parent is supplied, it's used instead of calling upstream(branch).
353 """ 353 """
354 base = branch_config(branch, 'base') 354 base = branch_config(branch, 'base')
355 base_upstream = branch_config(branch, 'base-upstream')
355 parent = parent or upstream(branch) 356 parent = parent or upstream(branch)
357 if not parent:
358 return None
356 actual_merge_base = run('merge-base', parent, branch) 359 actual_merge_base = run('merge-base', parent, branch)
357 360
361 if base_upstream != parent:
362 base = None
363 base_upstream = None
364
358 def is_ancestor(a, b): 365 def is_ancestor(a, b):
359 return run_with_retcode('merge-base', '--is-ancestor', a, b) == 0 366 return run_with_retcode('merge-base', '--is-ancestor', a, b) == 0
360 367
361 if base: 368 if base:
362 if not is_ancestor(base, branch): 369 if not is_ancestor(base, branch):
363 logging.debug('Found WRONG pre-set merge-base for %s: %s', branch, base) 370 logging.debug('Found WRONG pre-set merge-base for %s: %s', branch, base)
364 base = None 371 base = None
365 elif is_ancestor(base, actual_merge_base): 372 elif is_ancestor(base, actual_merge_base):
366 logging.debug('Found OLD pre-set merge-base for %s: %s', branch, base) 373 logging.debug('Found OLD pre-set merge-base for %s: %s', branch, base)
367 base = None 374 base = None
368 else: 375 else:
369 logging.debug('Found pre-set merge-base for %s: %s', branch, base) 376 logging.debug('Found pre-set merge-base for %s: %s', branch, base)
370 377
371 if not base: 378 if not base:
372 base = actual_merge_base 379 base = actual_merge_base
373 manual_merge_base(branch, base) 380 manual_merge_base(branch, base, parent)
374 381
375 return base 382 return base
376 383
377 384
378 def hash_multi(*reflike): 385 def hash_multi(*reflike):
379 return run('rev-parse', *reflike).splitlines() 386 return run('rev-parse', *reflike).splitlines()
380 387
381 388
382 def hash_one(reflike): 389 def hash_one(reflike):
383 return run('rev-parse', reflike) 390 return run('rev-parse', reflike)
(...skipping 18 matching lines...) Expand all
402 ret = run('hash-object', '-t', kind, '-w', '--stdin', stdin=f) 409 ret = run('hash-object', '-t', kind, '-w', '--stdin', stdin=f)
403 f.close() 410 f.close()
404 return ret 411 return ret
405 412
406 413
407 def is_dormant(branch): 414 def is_dormant(branch):
408 # TODO(iannucci): Do an oldness check? 415 # TODO(iannucci): Do an oldness check?
409 return branch_config(branch, 'dormant', 'false') != 'false' 416 return branch_config(branch, 'dormant', 'false') != 'false'
410 417
411 418
412 def manual_merge_base(branch, base): 419 def manual_merge_base(branch, base, parent):
413 set_branch_config(branch, 'base', base) 420 set_branch_config(branch, 'base', base)
421 set_branch_config(branch, 'base-upstream', parent)
414 422
415 423
416 def mktree(treedict): 424 def mktree(treedict):
417 """Makes a git tree object and returns its hash. 425 """Makes a git tree object and returns its hash.
418 426
419 See |tree()| for the values of mode, type, and ref. 427 See |tree()| for the values of mode, type, and ref.
420 428
421 Args: 429 Args:
422 treedict - { name: (mode, type, ref) } 430 treedict - { name: (mode, type, ref) }
423 """ 431 """
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 run('rebase', *args) 476 run('rebase', *args)
469 return RebaseRet(True, '') 477 return RebaseRet(True, '')
470 except subprocess2.CalledProcessError as cpe: 478 except subprocess2.CalledProcessError as cpe:
471 if abort: 479 if abort:
472 run('rebase', '--abort') 480 run('rebase', '--abort')
473 return RebaseRet(False, cpe.stdout) 481 return RebaseRet(False, cpe.stdout)
474 482
475 483
476 def remove_merge_base(branch): 484 def remove_merge_base(branch):
477 del_branch_config(branch, 'base') 485 del_branch_config(branch, 'base')
486 del_branch_config(branch, 'base-upstream')
478 487
479 488
480 def root(): 489 def root():
481 return config('depot-tools.upstream', 'origin/master') 490 return config('depot-tools.upstream', 'origin/master')
482 491
483 492
484 def run(*cmd, **kwargs): 493 def run(*cmd, **kwargs):
485 """The same as run_with_stderr, except it only returns stdout.""" 494 """The same as run_with_stderr, except it only returns stdout."""
486 return run_with_stderr(*cmd, **kwargs)[0] 495 return run_with_stderr(*cmd, **kwargs)[0]
487 496
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 return None 659 return None
651 return ret 660 return ret
652 661
653 662
654 def upstream(branch): 663 def upstream(branch):
655 try: 664 try:
656 return run('rev-parse', '--abbrev-ref', '--symbolic-full-name', 665 return run('rev-parse', '--abbrev-ref', '--symbolic-full-name',
657 branch+'@{upstream}') 666 branch+'@{upstream}')
658 except subprocess2.CalledProcessError: 667 except subprocess2.CalledProcessError:
659 return None 668 return None
OLDNEW
« no previous file with comments | « no previous file | git_map.py » ('j') | git_map.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698