stash: annotate stashes with created directories
This commit is contained in:
parent
77f1965113
commit
b81aed66b6
43
jsvn
43
jsvn
@ -467,6 +467,8 @@ def get_unknowns(svn):
|
|||||||
return unknowns
|
return unknowns
|
||||||
|
|
||||||
def descendant_path(child, parent):
|
def descendant_path(child, parent):
|
||||||
|
if parent == '.':
|
||||||
|
parent = os.getcwd()
|
||||||
if child[0] != '/' and parent[0] == '/':
|
if child[0] != '/' and parent[0] == '/':
|
||||||
child = os.getcwd() + '/' + child
|
child = os.getcwd() + '/' + child
|
||||||
elif child[0] == '/' and parent[0] != '/':
|
elif child[0] == '/' and parent[0] != '/':
|
||||||
@ -560,6 +562,12 @@ def filter_add_output(fh, out, svn, config):
|
|||||||
out.write(line)
|
out.write(line)
|
||||||
out.write('\n')
|
out.write('\n')
|
||||||
|
|
||||||
|
def relpath(path):
|
||||||
|
cwdprefix = os.getcwd() + '/'
|
||||||
|
if path.startswith(cwdprefix):
|
||||||
|
return path[len(cwdprefix):]
|
||||||
|
return path
|
||||||
|
|
||||||
###########################################################################
|
###########################################################################
|
||||||
# Subcommand Handlers #
|
# Subcommand Handlers #
|
||||||
###########################################################################
|
###########################################################################
|
||||||
@ -1243,13 +1251,25 @@ def get_svn_contents_to_stash(targets, svn, out, keep, patch, externals):
|
|||||||
s_fh = open(s_fname, 'w')
|
s_fh = open(s_fname, 'w')
|
||||||
r_fh = open(r_fname, 'w')
|
r_fh = open(r_fname, 'w')
|
||||||
|
|
||||||
|
external_list = []
|
||||||
|
directories_added = []
|
||||||
|
status_cmd = [svn, 'status']
|
||||||
|
if not externals:
|
||||||
|
status_cmd += ['--ignore-externals']
|
||||||
|
status_proc = Popen(status_cmd, stdout=PIPE)
|
||||||
|
for line in iter(status_proc.stdout.readline, ''):
|
||||||
|
m = re.match(r"Performing status on external item at '(.*)':", line)
|
||||||
|
if m is not None:
|
||||||
|
external_list.append(m.group(1))
|
||||||
|
m = re.match(STATUS_LINE_REGEX, line)
|
||||||
|
if m is not None:
|
||||||
|
path = m.group(1)
|
||||||
|
if line[0] == 'A':
|
||||||
|
if os.path.isdir(path):
|
||||||
|
directories_added.append(relpath(path))
|
||||||
|
|
||||||
if externals and len(targets) == 0:
|
if externals and len(targets) == 0:
|
||||||
targets = ['.']
|
targets = ['.'] + external_list
|
||||||
proc = Popen([svn, 'status'], stdout=PIPE)
|
|
||||||
for line in iter(proc.stdout.readline, ''):
|
|
||||||
m = re.match(r"Performing status on external item at '(.*)':", line)
|
|
||||||
if m is not None:
|
|
||||||
targets.append(m.group(1))
|
|
||||||
|
|
||||||
svars = {
|
svars = {
|
||||||
'revert_list': [],
|
'revert_list': [],
|
||||||
@ -1364,6 +1384,17 @@ q: quit and abort stash
|
|||||||
if not svars['quit']:
|
if not svars['quit']:
|
||||||
flush_file('')
|
flush_file('')
|
||||||
|
|
||||||
|
for da in directories_added:
|
||||||
|
stash_da = len(targets) == 0
|
||||||
|
for t in targets:
|
||||||
|
if descendant_path(da, t):
|
||||||
|
stash_da = True
|
||||||
|
break
|
||||||
|
if stash_da:
|
||||||
|
s_fh.write('#dir: %s\n' % da)
|
||||||
|
if not da in svars['revert_list']:
|
||||||
|
svars['revert_list'].append(da)
|
||||||
|
|
||||||
s_fh.close()
|
s_fh.close()
|
||||||
r_fh.close()
|
r_fh.close()
|
||||||
if svars['quit']:
|
if svars['quit']:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user