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

Side by Side Diff: git_cl.py

Issue 27316002: Adding --directory option to git cl patch (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Follow review Created 7 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # Copyright (C) 2008 Evan Martin <martine@danga.com> 6 # Copyright (C) 2008 Evan Martin <martine@danga.com>
7 7
8 """A git-command for integrating reviews on Rietveld.""" 8 """A git-command for integrating reviews on Rietveld."""
9 9
10 from distutils.version import LooseVersion 10 from distutils.version import LooseVersion
(...skipping 1844 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 print('Are you sure you didn\'t mean \'git cl dcommit\'?') 1855 print('Are you sure you didn\'t mean \'git cl dcommit\'?')
1856 ask_for_data('[Press enter to push or ctrl-C to quit]') 1856 ask_for_data('[Press enter to push or ctrl-C to quit]')
1857 return SendUpstream(parser, args, 'push') 1857 return SendUpstream(parser, args, 'push')
1858 1858
1859 1859
1860 @subcommand.usage('<patch url or issue id>') 1860 @subcommand.usage('<patch url or issue id>')
1861 def CMDpatch(parser, args): 1861 def CMDpatch(parser, args):
1862 """Patches in a code review.""" 1862 """Patches in a code review."""
1863 parser.add_option('-b', dest='newbranch', 1863 parser.add_option('-b', dest='newbranch',
1864 help='create a new branch off trunk for the patch') 1864 help='create a new branch off trunk for the patch')
1865 parser.add_option('-f', action='store_true', dest='force', 1865 parser.add_option('-f', '--force', action='store_true',
1866 help='with -b, clobber any existing branch') 1866 help='with -b, clobber any existing branch')
1867 parser.add_option('--reject', action='store_true', dest='reject', 1867 parser.add_option('-d', '--directory', action='store', metavar='DIR',
1868 help='Change to the directory DIR immediately, '
1869 'before doing anything else.')
1870 parser.add_option('--reject', action='store_true',
1868 help='failed patches spew .rej files rather than ' 1871 help='failed patches spew .rej files rather than '
1869 'attempting a 3-way merge') 1872 'attempting a 3-way merge')
1870 parser.add_option('-n', '--no-commit', action='store_true', dest='nocommit', 1873 parser.add_option('-n', '--no-commit', action='store_true', dest='nocommit',
1871 help="don't commit after patch applies") 1874 help="don't commit after patch applies")
1872 (options, args) = parser.parse_args(args) 1875 (options, args) = parser.parse_args(args)
1873 if len(args) != 1: 1876 if len(args) != 1:
1874 parser.print_help() 1877 parser.print_help()
1875 return 1 1878 return 1
1876 issue_arg = args[0] 1879 issue_arg = args[0]
1877 1880
1878 # TODO(maruel): Use apply_issue.py 1881 # TODO(maruel): Use apply_issue.py
1879 # TODO(ukai): use gerrit-cherry-pick for gerrit repository? 1882 # TODO(ukai): use gerrit-cherry-pick for gerrit repository?
1880 1883
1881 if options.newbranch: 1884 if options.newbranch:
1882 if options.force: 1885 if options.force:
1883 RunGit(['branch', '-D', options.newbranch], 1886 RunGit(['branch', '-D', options.newbranch],
1884 stderr=subprocess2.PIPE, error_ok=True) 1887 stderr=subprocess2.PIPE, error_ok=True)
1885 RunGit(['checkout', '-b', options.newbranch, 1888 RunGit(['checkout', '-b', options.newbranch,
1886 Changelist().GetUpstreamBranch()]) 1889 Changelist().GetUpstreamBranch()])
1887 1890
1888 return PatchIssue(issue_arg, options.reject, options.nocommit) 1891 return PatchIssue(issue_arg, options.reject, options.nocommit,
1892 options.directory)
1889 1893
1890 1894
1891 def PatchIssue(issue_arg, reject, nocommit): 1895 def PatchIssue(issue_arg, reject, nocommit, directory):
1892 if type(issue_arg) is int or issue_arg.isdigit(): 1896 if type(issue_arg) is int or issue_arg.isdigit():
1893 # Input is an issue id. Figure out the URL. 1897 # Input is an issue id. Figure out the URL.
1894 issue = int(issue_arg) 1898 issue = int(issue_arg)
1895 cl = Changelist(issue=issue) 1899 cl = Changelist(issue=issue)
1896 patchset = cl.GetMostRecentPatchset() 1900 patchset = cl.GetMostRecentPatchset()
1897 patch_data = cl.GetPatchSetDiff(issue, patchset) 1901 patch_data = cl.GetPatchSetDiff(issue, patchset)
1898 else: 1902 else:
1899 # Assume it's a URL to the patch. Default to https. 1903 # Assume it's a URL to the patch. Default to https.
1900 issue_url = gclient_utils.UpgradeToHttps(issue_arg) 1904 issue_url = gclient_utils.UpgradeToHttps(issue_arg)
1901 match = re.match(r'.*?/issue(\d+)_(\d+).diff', issue_url) 1905 match = re.match(r'.*?/issue(\d+)_(\d+).diff', issue_url)
(...skipping 21 matching lines...) Expand all
1923 DieWithError('Git patch mungling failed.') 1927 DieWithError('Git patch mungling failed.')
1924 logging.info(patch_data) 1928 logging.info(patch_data)
1925 env = os.environ.copy() 1929 env = os.environ.copy()
1926 # 'cat' is a magical git string that disables pagers on all platforms. 1930 # 'cat' is a magical git string that disables pagers on all platforms.
1927 env['GIT_PAGER'] = 'cat' 1931 env['GIT_PAGER'] = 'cat'
1928 1932
1929 # We use "git apply" to apply the patch instead of "patch" so that we can 1933 # We use "git apply" to apply the patch instead of "patch" so that we can
1930 # pick up file adds. 1934 # pick up file adds.
1931 # The --index flag means: also insert into the index (so we catch adds). 1935 # The --index flag means: also insert into the index (so we catch adds).
1932 cmd = ['git', 'apply', '--index', '-p0'] 1936 cmd = ['git', 'apply', '--index', '-p0']
1937 if directory:
1938 cmd.extend(('--directory', directory))
1933 if reject: 1939 if reject:
1934 cmd.append('--reject') 1940 cmd.append('--reject')
1935 elif IsGitVersionAtLeast('1.7.12'): 1941 elif IsGitVersionAtLeast('1.7.12'):
1936 cmd.append('--3way') 1942 cmd.append('--3way')
1937 try: 1943 try:
1938 subprocess2.check_call(cmd, env=env, 1944 subprocess2.check_call(cmd, env=env,
1939 stdin=patch_data, stdout=subprocess2.VOID) 1945 stdin=patch_data, stdout=subprocess2.VOID)
1940 except subprocess2.CalledProcessError: 1946 except subprocess2.CalledProcessError:
1941 DieWithError('Failed to apply the patch') 1947 DieWithError('Failed to apply the patch')
1942 1948
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2153 """shows differences between local tree and last upload.""" 2159 """shows differences between local tree and last upload."""
2154 cl = Changelist() 2160 cl = Changelist()
2155 branch = cl.GetBranch() 2161 branch = cl.GetBranch()
2156 TMP_BRANCH = 'git-cl-diff' 2162 TMP_BRANCH = 'git-cl-diff'
2157 base_branch = RunGit(['merge-base', cl.GetUpstreamBranch(), 'HEAD']).strip() 2163 base_branch = RunGit(['merge-base', cl.GetUpstreamBranch(), 'HEAD']).strip()
2158 2164
2159 # Create a new branch based on the merge-base 2165 # Create a new branch based on the merge-base
2160 RunGit(['checkout', '-q', '-b', TMP_BRANCH, base_branch]) 2166 RunGit(['checkout', '-q', '-b', TMP_BRANCH, base_branch])
2161 try: 2167 try:
2162 # Patch in the latest changes from rietveld. 2168 # Patch in the latest changes from rietveld.
2163 rtn = PatchIssue(cl.GetIssue(), False, False) 2169 rtn = PatchIssue(cl.GetIssue(), False, False, None)
2164 if rtn != 0: 2170 if rtn != 0:
2165 return rtn 2171 return rtn
2166 2172
2167 # Switch back to starting brand and diff against the temporary 2173 # Switch back to starting brand and diff against the temporary
2168 # branch containing the latest rietveld patch. 2174 # branch containing the latest rietveld patch.
2169 subprocess2.check_call(['git', 'diff', TMP_BRANCH, branch]) 2175 subprocess2.check_call(['git', 'diff', TMP_BRANCH, branch])
2170 finally: 2176 finally:
2171 RunGit(['checkout', '-q', branch]) 2177 RunGit(['checkout', '-q', branch])
2172 RunGit(['branch', '-D', TMP_BRANCH]) 2178 RunGit(['branch', '-D', TMP_BRANCH])
2173 2179
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2302 ('AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' 2308 ('AppEngine is misbehaving and returned HTTP %d, again. Keep faith '
2303 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) 2309 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e)))
2304 2310
2305 2311
2306 if __name__ == '__main__': 2312 if __name__ == '__main__':
2307 # These affect sys.stdout so do it outside of main() to simplify mocks in 2313 # These affect sys.stdout so do it outside of main() to simplify mocks in
2308 # unit testing. 2314 # unit testing.
2309 fix_encoding.fix_encoding() 2315 fix_encoding.fix_encoding()
2310 colorama.init() 2316 colorama.init()
2311 sys.exit(main(sys.argv[1:])) 2317 sys.exit(main(sys.argv[1:]))
OLDNEW
« 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