def __check_base_dir():
return os.path.isdir(base_dir)
-def __tree_status(files = [], tree_id = 'HEAD', unknown = False, noexclude = True):
+def __tree_status(files = [], tree_id = 'HEAD', unknown = False,
+ noexclude = True):
"""Returns a list of pairs - [status, filename]
"""
os.system('git-update-cache --refresh > /dev/null')
# unknown files
if unknown:
- exclude_file = os.path.join(base_dir, 'exclude')
- base_exclude = [ '--exclude=*.[ao]', '--exclude=.*' '--exclude=TAGS',
- '--exclude=tags', '--exclude=*~', '--exclude=#*',
- '--exclude-per-directory=.gitignore' ]
- extra_exclude = []
+ exclude_file = os.path.join(base_dir, 'info', 'exclude')
+ base_exclude = ['--exclude=%s' % s for s in
+ ['*.[ao]', '*.pyc', '.*', '*~', '#*', 'TAGS', 'tags']]
+ base_exclude.append('--exclude-per-directory=.gitignore')
+
if os.path.exists(exclude_file):
- extra_exclude.append('--exclude-from=%s' % exclude_file)
+ extra_exclude = '--exclude-from=%s' % exclude_file
+ else:
+ extra_exclude = []
if noexclude:
extra_exclude = base_exclude = []
- lines = _output_lines(['git-ls-files', '--others' ] + base_exclude
+
+ lines = _output_lines(['git-ls-files', '--others'] + base_exclude
+ extra_exclude)
cache_files += [('?', line.strip()) for line in lines]
# get the commit message
f = file('.commitmsg', 'w+')
- if message[-1] == '\n':
+ if message[-1:] == '\n':
f.write(message)
else:
print >> f, message
raise GitException, 'git-read-tree failed (local changes maybe?)'
# this can fail if there are conflicts
- if os.system('git-merge-cache -o gitmergeonefile.py -a') != 0:
+ if os.system('git-merge-cache -o -q gitmergeonefile.py -a') != 0:
raise GitException, 'git-merge-cache failed (possible conflicts)'
def status(files = [], modified = False, new = False, deleted = False,
# checkout doesn't remove files
map(os.remove, rm_files)
-def pull(location, head = None, tag = None):
- """Fetch changes from the remote repository. At the moment, just
- use the 'git fetch' scripts
+def pull(repository = 'origin', refspec = None):
+ """Pull changes from the remote repository. At the moment, just
+ use the 'git pull' command
"""
- args = [location]
- if head:
- args += [head]
- elif tag:
- args += ['tag', tag]
+ args = [repository]
+ if refspec:
+ args.append(refspec)
if __run('git pull', args) != 0:
- raise GitException, 'Failed "git fetch %s"' % location
+ raise GitException, 'Failed "git pull %s"' % repository
def apply_patch(filename = None):
"""Apply a patch onto the current index. There must not be any