1*f5c631daSSadaf Ebrahimi# Copyright 2014, VIXL authors 2*f5c631daSSadaf Ebrahimi# All rights reserved. 3*f5c631daSSadaf Ebrahimi# 4*f5c631daSSadaf Ebrahimi# Redistribution and use in source and binary forms, with or without 5*f5c631daSSadaf Ebrahimi# modification, are permitted provided that the following conditions are met: 6*f5c631daSSadaf Ebrahimi# 7*f5c631daSSadaf Ebrahimi# * Redistributions of source code must retain the above copyright notice, 8*f5c631daSSadaf Ebrahimi# this list of conditions and the following disclaimer. 9*f5c631daSSadaf Ebrahimi# * Redistributions in binary form must reproduce the above copyright notice, 10*f5c631daSSadaf Ebrahimi# this list of conditions and the following disclaimer in the documentation 11*f5c631daSSadaf Ebrahimi# and/or other materials provided with the distribution. 12*f5c631daSSadaf Ebrahimi# * Neither the name of ARM Limited nor the names of its contributors may be 13*f5c631daSSadaf Ebrahimi# used to endorse or promote products derived from this software without 14*f5c631daSSadaf Ebrahimi# specific prior written permission. 15*f5c631daSSadaf Ebrahimi# 16*f5c631daSSadaf Ebrahimi# THIS SOFTWARE IS PROVIDED BY ARM LIMITED AND CONTRIBUTORS "AS IS" AND ANY 17*f5c631daSSadaf Ebrahimi# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18*f5c631daSSadaf Ebrahimi# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19*f5c631daSSadaf Ebrahimi# DISCLAIMED. IN NO EVENT SHALL ARM LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, 20*f5c631daSSadaf Ebrahimi# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21*f5c631daSSadaf Ebrahimi# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 22*f5c631daSSadaf Ebrahimi# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23*f5c631daSSadaf Ebrahimi# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24*f5c631daSSadaf Ebrahimi# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 25*f5c631daSSadaf Ebrahimi# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*f5c631daSSadaf Ebrahimi 27*f5c631daSSadaf Ebrahimiimport re 28*f5c631daSSadaf Ebrahimiimport util 29*f5c631daSSadaf Ebrahimiimport os.path 30*f5c631daSSadaf Ebrahimifrom pipes import quote 31*f5c631daSSadaf Ebrahimi 32*f5c631daSSadaf Ebrahimidef is_git_repository_root(path): 33*f5c631daSSadaf Ebrahimi command = 'git -C ' + quote(path) + ' rev-parse --show-toplevel' 34*f5c631daSSadaf Ebrahimi status, toplevel = util.getstatusoutput(command) 35*f5c631daSSadaf Ebrahimi if status != 0: return False 36*f5c631daSSadaf Ebrahimi return os.path.samefile(toplevel, path) 37*f5c631daSSadaf Ebrahimi 38*f5c631daSSadaf Ebrahimidef get_tracked_files(): 39*f5c631daSSadaf Ebrahimi command = 'git ls-tree HEAD -r --full-tree --name-only' 40*f5c631daSSadaf Ebrahimi 41*f5c631daSSadaf Ebrahimi status, tracked = util.getstatusoutput(command) 42*f5c631daSSadaf Ebrahimi if status != 0: util.abort('Failed to list tracked files.') 43*f5c631daSSadaf Ebrahimi 44*f5c631daSSadaf Ebrahimi return tracked 45*f5c631daSSadaf Ebrahimi 46*f5c631daSSadaf Ebrahimi 47*f5c631daSSadaf Ebrahimi# Get untracked files in src/, test/, and tools/. 48*f5c631daSSadaf Ebrahimidef get_untracked_files(): 49*f5c631daSSadaf Ebrahimi status, output = util.getstatusoutput('git status -s') 50*f5c631daSSadaf Ebrahimi if status != 0: util.abort('Failed to get git status.') 51*f5c631daSSadaf Ebrahimi 52*f5c631daSSadaf Ebrahimi untracked_regexp = re.compile('\?\?.*(src/|test/|tools/).*(.cc$|.h$)') 53*f5c631daSSadaf Ebrahimi files_in_watched_folder = lambda n: untracked_regexp.search(n) != None 54*f5c631daSSadaf Ebrahimi untracked_files = filter(files_in_watched_folder, output.split('\n')) 55*f5c631daSSadaf Ebrahimi 56*f5c631daSSadaf Ebrahimi return untracked_files 57