libv8 6.2.414.42.1 → 6.3.292.48.0beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/libv8/version.rb +1 -1
  4. data/vendor/depot_tools/PRESUBMIT.py +38 -0
  5. data/vendor/depot_tools/bootstrap/win/manifest.txt +3 -1
  6. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +2 -0
  7. data/vendor/depot_tools/checkout.py +1 -1
  8. data/vendor/depot_tools/cipd_manifest.txt +1 -1
  9. data/vendor/depot_tools/gclient_scm.py +23 -14
  10. data/vendor/depot_tools/gerrit_util.py +15 -10
  11. data/vendor/depot_tools/git_cl.py +23 -11
  12. data/vendor/depot_tools/git_drover.py +2 -1
  13. data/vendor/depot_tools/git_upstream_diff.py +2 -1
  14. data/vendor/depot_tools/gsutil.py +1 -1
  15. data/vendor/depot_tools/infra/config/recipes.cfg +1 -1
  16. data/vendor/depot_tools/presubmit_canned_checks.py +8 -1
  17. data/vendor/depot_tools/presubmit_support.py +2 -1
  18. data/vendor/depot_tools/recipes/README.recipes.md +56 -43
  19. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +1 -0
  20. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +1 -4
  21. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +105 -0
  22. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +5 -0
  23. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/__init__.py +6 -0
  24. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +25 -0
  25. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +12 -0
  26. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +75 -0
  27. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +12 -0
  28. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +10 -1
  29. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +13 -11
  30. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +2 -0
  31. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +2 -0
  32. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_rietveld_patch.json +2 -0
  33. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_rietveld_patch_new.json +2 -0
  34. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +2 -0
  35. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +2 -0
  36. data/vendor/depot_tools/recipes/trigger_recipe_roller.txt +1 -0
  37. data/vendor/depot_tools/roll_dep.py +116 -78
  38. data/vendor/depot_tools/scm.py +6 -4
  39. data/vendor/depot_tools/split_cl.py +45 -18
  40. metadata +7 -5
  41. data/patches/0005-avoid-constructor-inheritance-due-to-compilation-iss.patch +0 -81
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae3bfb049df0660c14d04089162524fcf968fbf7
4
- data.tar.gz: 79015a42851a71f3577cedebb35d5b683194a35f
3
+ metadata.gz: 61c3bf8a873f670cef6d2846cb09c8e6e8837160
4
+ data.tar.gz: 3ab377edad709714dfc61f7be3f37f3801ce1b3d
5
5
  SHA512:
6
- metadata.gz: cbcd9277974fb1c7a6d6e7840dce1ffbb6b9ef31a23f2a68d880aa32b5be26cf4e7d2ee1ce46ce14a0f3744b8674440bb40ec6a37cb36f72bac4a527555c8df0
7
- data.tar.gz: 1e8c56ef29095f11b6c414da21f7336a13b033b7e0b937087631b9292a62f27f313d2e898b4bd2d38e6f3e45c9e70184c6bfa77c959421ccda08320c363a8f9f
6
+ metadata.gz: 8645f9ffc99b2b8226880f664f088e76f49038138ed73984d546f88fb2a4bb07f659eb7540aa2694442cc6ea7327fbf39283c86d4c459ef44dd87bbecdc86fb6
7
+ data.tar.gz: 3fdcabaa1d2e7bebd1439a79a79fd0e52ffeebda196fd5b595895314e3128e0ae43a49b1fa17602ffdc1274db1df0eac5a4300f15a777aeaaafc122da70fdc6c
@@ -1,3 +1,7 @@
1
+ ### Unreleased
2
+
3
+ * Update upstream v8 version to 6.3.292.48
4
+
1
5
  ### v6.2.414.42.0, v6.2.414.42.1 - 2017-10-25
2
6
 
3
7
  * Update upstream v8 version to 6.2.414.42
@@ -1,3 +1,3 @@
1
1
  module Libv8
2
- VERSION = "6.2.414.42.1"
2
+ VERSION = "6.3.292.48.0beta1"
3
3
  end
@@ -12,6 +12,16 @@ import fnmatch
12
12
  import os
13
13
 
14
14
 
15
+ ENSURE_FILE_TEMPLATE = r'''
16
+ $VerifiedPlatform linux-386 linux-amd64 linux-arm64 linux-armv6l linux-mips64
17
+ $VerifiedPlatform linux-ppc64 linux-ppc64le linux-s390x
18
+ $VerifiedPlatform mac-amd64
19
+ $VerifiedPlatform windows-386 windows-amd64
20
+
21
+ %s %s
22
+ '''
23
+
24
+
15
25
  def DepotToolsPylint(input_api, output_api):
16
26
  """Gather all the pylint logic into one place to make it self-contained."""
17
27
  white_list = [
@@ -59,6 +69,34 @@ def CommonChecks(input_api, output_api, tests_to_black_list):
59
69
  tests.extend(unit_tests)
60
70
  else:
61
71
  print('Warning: not running unit tests on Windows')
72
+
73
+ # Validate CIPD manifests.
74
+ root = input_api.os_path.normpath(
75
+ input_api.os_path.abspath(input_api.PresubmitLocalPath()))
76
+ rel_file = lambda rel: input_api.os_path.join(root, rel)
77
+ cipd_manifests = set(rel_file(input_api.os_path.join(*x)) for x in (
78
+ ('cipd_manifest.txt',),
79
+ ('bootstrap', 'win', 'manifest.txt'),
80
+ ('bootstrap', 'win', 'manifest_bleeding_edge.txt'),
81
+
82
+ # Also generate a file for the cipd client itself.
83
+ ('cipd_client_version',),
84
+ ))
85
+ affected_manifests = input_api.AffectedFiles(
86
+ include_deletes=False,
87
+ file_filter=lambda x:
88
+ input_api.os_path.normpath(x.AbsoluteLocalPath()) in cipd_manifests)
89
+ for path in affected_manifests:
90
+ path = path.AbsoluteLocalPath()
91
+ if path.endswith('.txt'):
92
+ tests.append(input_api.canned_checks.CheckCIPDManifest(
93
+ input_api, output_api, path=path))
94
+ else:
95
+ pkg = 'infra/tools/cipd/${platform}'
96
+ ver = input_api.ReadFile(path)
97
+ tests.append(input_api.canned_checks.CheckCIPDManifest(
98
+ input_api, output_api, content=ENSURE_FILE_TEMPLATE % (pkg, ver)))
99
+
62
100
  results.extend(input_api.RunTests(tests))
63
101
  return results
64
102
 
@@ -11,8 +11,10 @@
11
11
  # string "cpython" and ends with the CIPD tag "version:VERSION". It uses this
12
12
  # to extract VERSION.
13
13
 
14
+ $VerifiedPlatform windows-386 windows-amd64
15
+
14
16
  @Subdir python
15
17
  infra/python/cpython/windows-386 version:2.7.6
16
18
 
17
19
  @Subdir git
18
- infra/git/${platform} version:2.15.0.chromium12
20
+ infra/git/windows-${arch} version:2.15.1.2.chromium12
@@ -11,6 +11,8 @@
11
11
  # string "cpython" and ends with the CIPD tag "version:VERSION". It uses this
12
12
  # to extract VERSION.
13
13
 
14
+ $VerifiedPlatform windows-386 windows-amd64
15
+
14
16
  @Subdir python
15
17
  infra/python/cpython/${platform} version:2.7.13.chromium7
16
18
 
@@ -301,7 +301,7 @@ class GitCheckout(CheckoutBase):
301
301
  if errors:
302
302
  raise PatchApplicationFailed(errors, verbose)
303
303
  found_files = self._check_output_git(
304
- ['diff', '--ignore-submodules',
304
+ ['-c', 'core.quotePath=false', 'diff', '--ignore-submodules',
305
305
  '--name-only', '--staged']).splitlines(False)
306
306
  if sorted(patches.filenames) != sorted(found_files):
307
307
  extra_files = sorted(set(found_files) - set(patches.filenames))
@@ -11,7 +11,7 @@ $VerifiedPlatform windows-386 windows-amd64
11
11
  infra/tools/luci/vpython/${platform} git_revision:a3d636052088db3daa48413b3e209eed4f5cb4ad
12
12
 
13
13
  # LUCI editor
14
- infra/tools/luci/led/${platform} git_revision:9010ba713ba6fc9982c412161150a5cd70d5b623
14
+ infra/tools/luci/led/${platform} git_revision:54b6b3102fbb15ca3e3bd762ff3df7b08057d653
15
15
 
16
16
  # Mac toolchain installer
17
17
  infra/tools/mac_toolchain/${os=mac}-${arch} git_revision:2b69be6203f56a970202d9b5984557c0453b4eb0
@@ -270,12 +270,19 @@ class GitWrapper(SCMWrapper):
270
270
  # time-stamp of the currently checked out revision.
271
271
  return self._Capture(['log', '-n', '1', '--format=%ai'])
272
272
 
273
+ def _GetDiffFilenames(self, base):
274
+ """Returns the names of files modified since base."""
275
+ return self._Capture(
276
+ # Filter to remove base if it is None.
277
+ filter(bool, ['-c', 'core.quotePath=false', 'diff', '--name-only', base])
278
+ ).split()
279
+
273
280
  def diff(self, options, _args, _file_list):
274
281
  try:
275
282
  merge_base = [self._Capture(['merge-base', 'HEAD', self.remote])]
276
283
  except subprocess2.CalledProcessError:
277
284
  merge_base = []
278
- self._Run(['diff'] + merge_base, options)
285
+ self._Run(['-c', 'core.quotePath=false', 'diff'] + merge_base, options)
279
286
 
280
287
  def pack(self, _options, _args, _file_list):
281
288
  """Generates a patch file which can be applied to the root of the
@@ -305,7 +312,8 @@ class GitWrapper(SCMWrapper):
305
312
  # actually in a broken state here. The index will have both 'a' and 'A',
306
313
  # but only one of them will exist on the disk. To progress, we delete
307
314
  # everything that status thinks is modified.
308
- output = self._Capture(['status', '--porcelain'], strip=False)
315
+ output = self._Capture([
316
+ '-c', 'core.quotePath=false', 'status', '--porcelain'], strip=False)
309
317
  for line in output.splitlines():
310
318
  # --porcelain (v1) looks like:
311
319
  # XY filename
@@ -324,7 +332,8 @@ class GitWrapper(SCMWrapper):
324
332
  self._Fetch(options, prune=True, quiet=options.verbose)
325
333
  self._Scrub(revision, options)
326
334
  if file_list is not None:
327
- files = self._Capture(['ls-files']).splitlines()
335
+ files = self._Capture(
336
+ ['-c', 'core.quotePath=false', 'ls-files']).splitlines()
328
337
  file_list.extend([os.path.join(self.checkout_path, f) for f in files])
329
338
 
330
339
  def _DisableHooks(self):
@@ -358,7 +367,6 @@ class GitWrapper(SCMWrapper):
358
367
  self.Print('FAILED to break lock: %s: %s' % (to_break, ex))
359
368
  raise
360
369
 
361
-
362
370
  def update(self, options, args, file_list):
363
371
  """Runs git to update or transparently checkout the working copy.
364
372
 
@@ -440,7 +448,8 @@ class GitWrapper(SCMWrapper):
440
448
  self._DeleteOrMove(options.force)
441
449
  self._Clone(revision, url, options)
442
450
  if file_list is not None:
443
- files = self._Capture(['ls-files']).splitlines()
451
+ files = self._Capture(
452
+ ['-c', 'core.quotePath=false', 'ls-files']).splitlines()
444
453
  file_list.extend([os.path.join(self.checkout_path, f) for f in files])
445
454
  if not verbose:
446
455
  # Make the output a little prettier. It's nice to have some whitespace
@@ -625,8 +634,7 @@ class GitWrapper(SCMWrapper):
625
634
  raise gclient_utils.Error(switch_error)
626
635
  else:
627
636
  # case 3 - the default case
628
- rebase_files = self._Capture(
629
- ['diff', upstream_branch, '--name-only']).split()
637
+ rebase_files = self._GetDiffFilenames(upstream_branch)
630
638
  if verbose:
631
639
  self.Print('Trying fast-forward merge to branch : %s' % upstream_branch)
632
640
  try:
@@ -719,7 +727,8 @@ class GitWrapper(SCMWrapper):
719
727
  # merge-base by default), so doesn't include untracked files. So we use
720
728
  # 'git ls-files --directory --others --exclude-standard' here directly.
721
729
  paths = scm.GIT.Capture(
722
- ['ls-files', '--directory', '--others', '--exclude-standard'],
730
+ ['-c', 'core.quotePath=false', 'ls-files',
731
+ '--directory', '--others', '--exclude-standard'],
723
732
  self.checkout_path)
724
733
  for path in (p for p in paths.splitlines() if p.endswith('/')):
725
734
  full_path = os.path.join(self.checkout_path, path)
@@ -729,7 +738,6 @@ class GitWrapper(SCMWrapper):
729
738
 
730
739
  return self._Capture(['rev-parse', '--verify', 'HEAD'])
731
740
 
732
-
733
741
  def revert(self, options, _args, file_list):
734
742
  """Reverts local modifications.
735
743
 
@@ -763,7 +771,7 @@ class GitWrapper(SCMWrapper):
763
771
  return self.update(options, [], file_list)
764
772
 
765
773
  if file_list is not None:
766
- files = self._Capture(['diff', deps_revision, '--name-only']).split()
774
+ files = self._GetDiffFilenames(deps_revision)
767
775
 
768
776
  self._Scrub(deps_revision, options)
769
777
  self._Run(['clean', '-f', '-d'], options)
@@ -788,10 +796,11 @@ class GitWrapper(SCMWrapper):
788
796
  merge_base = [self._Capture(['merge-base', 'HEAD', self.remote])]
789
797
  except subprocess2.CalledProcessError:
790
798
  merge_base = []
791
- self._Run(['diff', '--name-status'] + merge_base, options,
792
- stdout=self.out_fh, always=options.verbose)
799
+ self._Run(
800
+ ['-c', 'core.quotePath=false', 'diff', '--name-status'] + merge_base,
801
+ options, stdout=self.out_fh, always=options.verbose)
793
802
  if file_list is not None:
794
- files = self._Capture(['diff', '--name-only'] + merge_base).split()
803
+ files = self._GetDiffFilenames(merge_base[0] if merge_base else None)
795
804
  file_list.extend([os.path.join(self.checkout_path, f) for f in files])
796
805
 
797
806
  def GetUsableRev(self, rev, options):
@@ -956,7 +965,7 @@ class GitWrapper(SCMWrapper):
956
965
  branch=None, printed_path=False, merge=False):
957
966
  """Attempt to rebase onto either upstream or, if specified, newbase."""
958
967
  if files is not None:
959
- files.extend(self._Capture(['diff', upstream, '--name-only']).split())
968
+ files.extend(self._GetDiffFilenames(upstream))
960
969
  revision = upstream
961
970
  if newbase:
962
971
  revision = newbase
@@ -30,7 +30,9 @@ import gclient_utils
30
30
  from third_party import httplib2
31
31
 
32
32
  LOGGER = logging.getLogger()
33
- TRY_LIMIT = 5
33
+ # With a starting sleep time of 1 second, 2^n exponential backoff, and six
34
+ # total tries, the sleep time between the first and last tries will be 31s.
35
+ TRY_LIMIT = 6
34
36
 
35
37
 
36
38
  # Controls the transport protocol used to communicate with gerrit.
@@ -258,13 +260,6 @@ class GceAuthenticator(Authenticator):
258
260
  def _get(url, **kwargs):
259
261
  next_delay_sec = 1
260
262
  for i in xrange(TRY_LIMIT):
261
- if i > 0:
262
- # Retry server error status codes.
263
- LOGGER.info('Encountered server error; retrying after %d second(s).',
264
- next_delay_sec)
265
- time.sleep(next_delay_sec)
266
- next_delay_sec *= 2
267
-
268
263
  p = urlparse.urlparse(url)
269
264
  c = GetConnectionObject(protocol=p.scheme)
270
265
  resp, contents = c.request(url, 'GET', **kwargs)
@@ -272,6 +267,15 @@ class GceAuthenticator(Authenticator):
272
267
  if resp.status < httplib.INTERNAL_SERVER_ERROR:
273
268
  return (resp, contents)
274
269
 
270
+ # Retry server error status codes.
271
+ LOGGER.warn('Encountered server error')
272
+ if TRY_LIMIT - i > 1:
273
+ LOGGER.info('Will retry in %d seconds (%d more times)...',
274
+ next_delay_sec, TRY_LIMIT - i - 1)
275
+ time.sleep(next_delay_sec)
276
+ next_delay_sec *= 2
277
+
278
+
275
279
  @classmethod
276
280
  def _get_token_dict(cls):
277
281
  if cls._token_cache:
@@ -341,7 +345,7 @@ def ReadHttpResponse(conn, accept_statuses=frozenset([200])):
341
345
  Common additions include 204, 400, and 404.
342
346
  Returns: A string buffer containing the connection's reply.
343
347
  """
344
- sleep_time = 0.5
348
+ sleep_time = 1
345
349
  for idx in range(TRY_LIMIT):
346
350
  response, contents = conn.request(**conn.req_params)
347
351
 
@@ -377,7 +381,8 @@ def ReadHttpResponse(conn, accept_statuses=frozenset([200])):
377
381
  conn.req_params['uri'],
378
382
  http_version, http_version, response.status, response.reason)
379
383
  if TRY_LIMIT - idx > 1:
380
- LOGGER.warn('... will retry %d more times.', TRY_LIMIT - idx - 1)
384
+ LOGGER.info('Will retry in %d seconds (%d more times)...',
385
+ sleep_time, TRY_LIMIT - idx - 1)
381
386
  time.sleep(sleep_time)
382
387
  sleep_time = sleep_time * 2
383
388
  if response.status not in accept_statuses:
@@ -716,14 +716,18 @@ def write_try_results_json(output_file, builds):
716
716
  """
717
717
 
718
718
  def convert_build_dict(build):
719
+ """Extracts some of the information from one build dict."""
720
+ parameters = json.loads(build.get('parameters_json', '{}')) or {}
719
721
  return {
720
722
  'buildbucket_id': build.get('id'),
721
- 'status': build.get('status'),
722
- 'result': build.get('result'),
723
723
  'bucket': build.get('bucket'),
724
- 'builder_name': json.loads(
725
- build.get('parameters_json', '{}')).get('builder_name'),
724
+ 'builder_name': parameters.get('builder_name'),
725
+ 'created_ts': build.get('created_ts'),
726
+ 'experimental': build.get('experimental'),
726
727
  'failure_reason': build.get('failure_reason'),
728
+ 'result': build.get('result'),
729
+ 'status': build.get('status'),
730
+ 'tags': build.get('tags'),
727
731
  'url': build.get('url'),
728
732
  }
729
733
 
@@ -2574,7 +2578,9 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase):
2574
2578
 
2575
2579
  def GetMostRecentPatchset(self):
2576
2580
  data = self._GetChangeDetail(['CURRENT_REVISION'])
2577
- return data['revisions'][data['current_revision']]['_number']
2581
+ patchset = data['revisions'][data['current_revision']]['_number']
2582
+ self.SetPatchset(patchset)
2583
+ return patchset
2578
2584
 
2579
2585
  def FetchDescription(self, force=False):
2580
2586
  data = self._GetChangeDetail(['CURRENT_REVISION', 'CURRENT_COMMIT'],
@@ -3877,8 +3883,8 @@ class _GitCookiesChecker(object):
3877
3883
 
3878
3884
  @staticmethod
3879
3885
  def _parse_identity(identity):
3880
- """Parses identity "git-<ldap>.example.com" into <ldap> and domain."""
3881
- # Special case: users whose ldaps contain ".", which are generally not
3886
+ """Parses identity "git-<username>.domain" into <username> and domain."""
3887
+ # Special case: usernames that contain ".", which are generally not
3882
3888
  # distinguishable from sub-domains. But we do know typical domains:
3883
3889
  if identity.endswith('.chromium.org'):
3884
3890
  domain = 'chromium.org'
@@ -4427,7 +4433,7 @@ def CMDstatus(parser, args):
4427
4433
  if issueid:
4428
4434
  print(issueid)
4429
4435
  elif options.field == 'patch':
4430
- patchset = cl.GetPatchset()
4436
+ patchset = cl.GetMostRecentPatchset()
4431
4437
  if patchset:
4432
4438
  print(patchset)
4433
4439
  elif options.field == 'status':
@@ -5050,6 +5056,10 @@ def CMDsplit(parser, args):
5050
5056
  "$directory will be replaced by each CL's directory.")
5051
5057
  parser.add_option("-c", "--comment", dest="comment_file",
5052
5058
  help="A text file containing a CL comment.")
5059
+ parser.add_option("-n", "--dry-run", dest="dry_run", action='store_true',
5060
+ default=False,
5061
+ help="List the files and reviewers for each CL that would "
5062
+ "be created, but don't create branches or CLs.")
5053
5063
  options, _ = parser.parse_args(args)
5054
5064
 
5055
5065
  if not options.description_file:
@@ -5059,7 +5069,7 @@ def CMDsplit(parser, args):
5059
5069
  return CMDupload(OptionParser(), args)
5060
5070
 
5061
5071
  return split_cl.SplitCl(options.description_file, options.comment_file,
5062
- Changelist, WrappedCMDupload)
5072
+ Changelist, WrappedCMDupload, options.dry_run)
5063
5073
 
5064
5074
 
5065
5075
  @subcommand.usage('DEPRECATED')
@@ -5357,7 +5367,8 @@ def PushToGitWithAutoRebase(remote, branch, original_description,
5357
5367
  print('Your patch doesn\'t apply cleanly to \'%s\' HEAD @ %s, '
5358
5368
  'the following files have merge conflicts:' %
5359
5369
  (branch, parent_hash))
5360
- print(RunGit(['diff', '--name-status', '--diff-filter=U']).strip())
5370
+ print(RunGit(['-c', 'core.quotePath=false', 'diff',
5371
+ '--name-status', '--diff-filter=U']).strip())
5361
5372
  print('Please rebase your patch and try again.')
5362
5373
  RunGitWithCode(['cherry-pick', '--abort'])
5363
5374
  break
@@ -5878,7 +5889,8 @@ def CMDowners(parser, args):
5878
5889
  def BuildGitDiffCmd(diff_type, upstream_commit, args):
5879
5890
  """Generates a diff command."""
5880
5891
  # Generate diff for the current branch's changes.
5881
- diff_cmd = ['diff', '--no-ext-diff', '--no-prefix', diff_type,
5892
+ diff_cmd = ['-c', 'core.quotePath=false', 'diff',
5893
+ '--no-ext-diff', '--no-prefix', diff_type,
5882
5894
  upstream_commit, '--']
5883
5895
 
5884
5896
  if args:
@@ -262,7 +262,8 @@ class _Drover(object):
262
262
  # Files that have been deleted between branch and cherry-pick will not have
263
263
  # their skip-worktree bit set so set it manually for those files to avoid
264
264
  # git status incorrectly listing them as unstaged deletes.
265
- repo_status = self._run_git_command(['status', '--porcelain']).splitlines()
265
+ repo_status = self._run_git_command(
266
+ ['-c', 'core.quotePath=false', 'status', '--porcelain']).splitlines()
266
267
  extra_files = [f[3:] for f in repo_status if f[:2] == ' D']
267
268
  if extra_files:
268
269
  self._run_git_command_with_stdin(
@@ -34,7 +34,8 @@ def main(args):
34
34
  print 'fatal: No upstream configured for branch \'%s\'' % opts.branch
35
35
  return 1
36
36
 
37
- cmd = [git.GIT_EXE, 'diff', '--patience', '-C', '-C']
37
+ cmd = [git.GIT_EXE, '-c', 'core.quotePath=false',
38
+ 'diff', '--patience', '-C', '-C']
38
39
  if opts.wordwise:
39
40
  cmd += ['--word-diff=color', r'--word-diff-regex=(\w+|[^[:space:]])']
40
41
  cmd += [git.get_or_create_merge_base(opts.branch, par)]
@@ -156,7 +156,7 @@ def parse_args():
156
156
  bin_dir = os.environ.get('DEPOT_TOOLS_GSUTIL_BIN_DIR', DEFAULT_BIN_DIR)
157
157
 
158
158
  parser = argparse.ArgumentParser()
159
- parser.add_argument('--force-version', default='4.13')
159
+ parser.add_argument('--force-version', default='4.28')
160
160
  parser.add_argument('--clean', action='store_true',
161
161
  help='Clear any existing gsutil package, forcing a new download.')
162
162
  parser.add_argument('--fallback', default=DEFAULT_FALLBACK_GSUTIL)
@@ -15,7 +15,7 @@
15
15
  "deps": {
16
16
  "recipe_engine": {
17
17
  "branch": "master",
18
- "revision": "0f093b369402a86363de15a3fae0c98eab4c8e00",
18
+ "revision": "32e6ba22dd1c75f8b3276bb86112d10542d5e32b",
19
19
  "url": "https://chromium.googlesource.com/infra/luci/recipes-py.git"
20
20
  }
21
21
  },
@@ -1165,15 +1165,22 @@ def CheckCIPDManifest(input_api, output_api, path=None, content=None):
1165
1165
  if path:
1166
1166
  assert content is None, 'Cannot provide both "path" and "content".'
1167
1167
  cmd += ['-ensure-file', path]
1168
+ name = 'Check CIPD manifest %r' % path
1168
1169
  elif content:
1169
1170
  assert path is None, 'Cannot provide both "path" and "content".'
1170
1171
  cmd += ['-ensure-file=-']
1171
1172
  kwargs['stdin'] = content
1173
+ # quick and dirty parser to extract checked packages.
1174
+ packages = [
1175
+ l.split()[0] for l in (ll.strip() for ll in content.splitlines())
1176
+ if ' ' in l and not l.startswith('$')
1177
+ ]
1178
+ name = 'Check CIPD packages from string: %r' % (packages,)
1172
1179
  else:
1173
1180
  raise Exception('Exactly one of "path" or "content" must be provided.')
1174
1181
 
1175
1182
  return input_api.Command(
1176
- 'Check CIPD manifest',
1183
+ name,
1177
1184
  cmd,
1178
1185
  kwargs,
1179
1186
  output_api.PresubmitError)