diff options
Diffstat (limited to 'git_config.py')
-rw-r--r-- | git_config.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/git_config.py b/git_config.py index 13fbda24..5fb61d21 100644 --- a/git_config.py +++ b/git_config.py | |||
@@ -59,18 +59,23 @@ ID_RE = re.compile(r'^[0-9a-f]{40}$') | |||
59 | 59 | ||
60 | REVIEW_CACHE = dict() | 60 | REVIEW_CACHE = dict() |
61 | 61 | ||
62 | |||
62 | def IsChange(rev): | 63 | def IsChange(rev): |
63 | return rev.startswith(R_CHANGES) | 64 | return rev.startswith(R_CHANGES) |
64 | 65 | ||
66 | |||
65 | def IsId(rev): | 67 | def IsId(rev): |
66 | return ID_RE.match(rev) | 68 | return ID_RE.match(rev) |
67 | 69 | ||
70 | |||
68 | def IsTag(rev): | 71 | def IsTag(rev): |
69 | return rev.startswith(R_TAGS) | 72 | return rev.startswith(R_TAGS) |
70 | 73 | ||
74 | |||
71 | def IsImmutable(rev): | 75 | def IsImmutable(rev): |
72 | return IsChange(rev) or IsId(rev) or IsTag(rev) | 76 | return IsChange(rev) or IsId(rev) or IsTag(rev) |
73 | 77 | ||
78 | |||
74 | def _key(name): | 79 | def _key(name): |
75 | parts = name.split('.') | 80 | parts = name.split('.') |
76 | if len(parts) < 2: | 81 | if len(parts) < 2: |
@@ -79,6 +84,7 @@ def _key(name): | |||
79 | parts[-1] = parts[-1].lower() | 84 | parts[-1] = parts[-1].lower() |
80 | return '.'.join(parts) | 85 | return '.'.join(parts) |
81 | 86 | ||
87 | |||
82 | class GitConfig(object): | 88 | class GitConfig(object): |
83 | _ForUser = None | 89 | _ForUser = None |
84 | 90 | ||
@@ -392,6 +398,7 @@ _master_keys = set() | |||
392 | _ssh_master = True | 398 | _ssh_master = True |
393 | _master_keys_lock = None | 399 | _master_keys_lock = None |
394 | 400 | ||
401 | |||
395 | def init_ssh(): | 402 | def init_ssh(): |
396 | """Should be called once at the start of repo to init ssh master handling. | 403 | """Should be called once at the start of repo to init ssh master handling. |
397 | 404 | ||
@@ -401,6 +408,7 @@ def init_ssh(): | |||
401 | assert _master_keys_lock is None, "Should only call init_ssh once" | 408 | assert _master_keys_lock is None, "Should only call init_ssh once" |
402 | _master_keys_lock = _threading.Lock() | 409 | _master_keys_lock = _threading.Lock() |
403 | 410 | ||
411 | |||
404 | def _open_ssh(host, port=None): | 412 | def _open_ssh(host, port=None): |
405 | global _ssh_master | 413 | global _ssh_master |
406 | 414 | ||
@@ -479,6 +487,7 @@ def _open_ssh(host, port=None): | |||
479 | finally: | 487 | finally: |
480 | _master_keys_lock.release() | 488 | _master_keys_lock.release() |
481 | 489 | ||
490 | |||
482 | def close_ssh(): | 491 | def close_ssh(): |
483 | global _master_keys_lock | 492 | global _master_keys_lock |
484 | 493 | ||
@@ -503,15 +512,18 @@ def close_ssh(): | |||
503 | # We're done with the lock, so we can delete it. | 512 | # We're done with the lock, so we can delete it. |
504 | _master_keys_lock = None | 513 | _master_keys_lock = None |
505 | 514 | ||
515 | |||
506 | URI_SCP = re.compile(r'^([^@:]*@?[^:/]{1,}):') | 516 | URI_SCP = re.compile(r'^([^@:]*@?[^:/]{1,}):') |
507 | URI_ALL = re.compile(r'^([a-z][a-z+-]*)://([^@/]*@?[^/]*)/') | 517 | URI_ALL = re.compile(r'^([a-z][a-z+-]*)://([^@/]*@?[^/]*)/') |
508 | 518 | ||
519 | |||
509 | def GetSchemeFromUrl(url): | 520 | def GetSchemeFromUrl(url): |
510 | m = URI_ALL.match(url) | 521 | m = URI_ALL.match(url) |
511 | if m: | 522 | if m: |
512 | return m.group(1) | 523 | return m.group(1) |
513 | return None | 524 | return None |
514 | 525 | ||
526 | |||
515 | @contextlib.contextmanager | 527 | @contextlib.contextmanager |
516 | def GetUrlCookieFile(url, quiet): | 528 | def GetUrlCookieFile(url, quiet): |
517 | if url.startswith('persistent-'): | 529 | if url.startswith('persistent-'): |
@@ -552,6 +564,7 @@ def GetUrlCookieFile(url, quiet): | |||
552 | cookiefile = os.path.expanduser(cookiefile) | 564 | cookiefile = os.path.expanduser(cookiefile) |
553 | yield cookiefile, None | 565 | yield cookiefile, None |
554 | 566 | ||
567 | |||
555 | def _preconnect(url): | 568 | def _preconnect(url): |
556 | m = URI_ALL.match(url) | 569 | m = URI_ALL.match(url) |
557 | if m: | 570 | if m: |
@@ -572,9 +585,11 @@ def _preconnect(url): | |||
572 | 585 | ||
573 | return False | 586 | return False |
574 | 587 | ||
588 | |||
575 | class Remote(object): | 589 | class Remote(object): |
576 | """Configuration options related to a remote. | 590 | """Configuration options related to a remote. |
577 | """ | 591 | """ |
592 | |||
578 | def __init__(self, config, name): | 593 | def __init__(self, config, name): |
579 | self._config = config | 594 | self._config = config |
580 | self.name = name | 595 | self.name = name |
@@ -735,6 +750,7 @@ class Remote(object): | |||
735 | class Branch(object): | 750 | class Branch(object): |
736 | """Configuration options related to a single branch. | 751 | """Configuration options related to a single branch. |
737 | """ | 752 | """ |
753 | |||
738 | def __init__(self, config, name): | 754 | def __init__(self, config, name): |
739 | self._config = config | 755 | self._config = config |
740 | self.name = name | 756 | self.name = name |