Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
-import sys, os, glob, popen2
+import sys, os, popen2
from stgit.utils import *
return None
def _input(cmd, file_desc):
- p = popen2.Popen3(cmd)
+ p = popen2.Popen3(cmd, True)
while True:
line = file_desc.readline()
if not line:
raise GitException, '%s failed' % str(cmd)
def _output(cmd):
- p=popen2.Popen3(cmd)
+ p=popen2.Popen3(cmd, True)
string = p.fromchild.read()
if p.wait():
raise GitException, '%s failed' % str(cmd)
return string
def _output_one_line(cmd, file_desc = None):
- p=popen2.Popen3(cmd)
+ p=popen2.Popen3(cmd, True)
if file_desc != None:
for line in file_desc:
p.tochild.write(line)
return string
def _output_lines(cmd):
- p=popen2.Popen3(cmd)
+ p=popen2.Popen3(cmd, True)
lines = p.fromchild.readlines()
if p.wait():
raise GitException, '%s failed' % str(cmd)
noexclude = True):
"""Returns a list of pairs - [status, filename]
"""
- os.system('git-update-index --refresh > /dev/null')
+ refresh_index()
cache_files = []
__head = None
+def refresh_index():
+ """Refresh index with stat() information from the working directory.
+ """
+ __run('git-update-index -q --unmerged --refresh')
+
def rev_parse(git_id):
"""Parse the string and return a verified SHA1 id
"""
def switch_branch(name):
"""Switch to a git branch
"""
+ global __head
+
new_head = os.path.join('refs', 'heads', name)
if not branch_exists(new_head):
raise GitException, 'Branch "%s" does not exist' % name
tree_id = rev_parse(new_head + '^0')
if tree_id != get_head():
+ refresh_index()
if __run('git-read-tree -u -m', [get_head(), tree_id]) != 0:
raise GitException, 'git-read-tree failed (local changes maybe?)'
__head = tree_id
def rm(files, force = False):
"""Remove a file from the repository
"""
- if force:
- git_opt = '--force-remove'
- else:
- git_opt = '--remove'
-
if not force:
for f in files:
if os.path.exists(f):
"""Perform a 3-way merge between base, head1 and head2 into the
local tree
"""
+ refresh_index()
if __run('git-read-tree -u -m', [base, head1, head2]) != 0:
raise GitException, 'git-read-tree failed (local changes maybe?)'
# this can fail if there are conflicts
- if os.system('git-merge-index -o -q gitmergeonefile.py -a') != 0:
- raise GitException, 'git-merge-cache failed (possible conflicts)'
+ if __run('git-merge-index -o -q gitmergeonefile.py -a') != 0:
+ raise GitException, 'git-merge-index failed (possible conflicts)'
def status(files = [], modified = False, new = False, deleted = False,
conflict = False, unknown = False, noexclude = False):
if rev2:
diff_str = _output(['git-diff-tree', '-p', rev1, rev2] + files)
else:
- os.system('git-update-index --refresh > /dev/null')
+ refresh_index()
diff_str = _output(['git-diff-index', '-p', rev1] + files)
if out_fd:
def switch(tree_id):
"""Switch the tree to the given id
"""
+ refresh_index()
if __run('git-read-tree -u -m', [get_head(), tree_id]) != 0:
raise GitException, 'git-read-tree failed (local changes maybe?)'
return False
return True
- os.system('git-update-index --refresh > /dev/null')
+ refresh_index()
if base:
orig_head = get_head()