15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import re 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import sys 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from http_client_local import HttpClientLocal 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GIT_HASH_PATTERN = re.compile(r'^[0-9a-fA-F]{40}$') 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def GetOSName(platform_name=sys.platform): 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if platform_name == 'cygwin' or platform_name.startswith('win'): 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 'win' 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) elif platform_name.startswith('linux'): 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 'unix' 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) elif platform_name.startswith('darwin'): 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 'mac' 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else: 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return platform_name 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def IsGitHash(revision): 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return GIT_HASH_PATTERN.match(str(revision)) 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def GetHttpClient(): 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) # TODO(stgao): return implementation for appengine when running on appengine. 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return HttpClientLocal 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccidef JoinLineNumbers(line_numbers, accepted_gap=1): 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci """Join line numbers into line blocks. 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Args: 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci line_numbers: a list of line number. 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci accepted_gap: if two line numbers are within the give gap, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci they would be combined together into a block. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Eg: for (1, 2, 3, 6, 7, 8, 12), if |accepted_gap| = 1, result 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci would be 1-3, 6-8, 12; if |accepted_gap| = 3, result would be 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1-8, 12; if |accepted_gap| =4, result would be 1-12. 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci """ 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if not line_numbers: 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return '' 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci line_numbers = map(int, line_numbers) 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci line_numbers.sort() 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci block = [] 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci start_line_number = line_numbers[0] 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_line_number = start_line_number 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for current_line_number in line_numbers[1:]: 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if last_line_number + accepted_gap < current_line_number: 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if start_line_number == last_line_number: 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci block.append('%d' % start_line_number) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else: 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci block.append('%d-%d' % (start_line_number, last_line_number)) 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci start_line_number = current_line_number 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_line_number = current_line_number 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else: 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if start_line_number == last_line_number: 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci block.append('%d' % start_line_number) 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else: 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci block.append('%d-%d' % (start_line_number, last_line_number)) 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ', '.join(block) 69