Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.0, 1.0.1, and 1.0.2

browse: use a class to cleanup tree creation

Changeset 4c7fa254318a

Parent ff0cede782a4

by Steve Borho

Changes to one file · Browse files at 4c7fa254318a Showing diff from parent ff0cede782a4 Diff from another changeset...

 
87
88
89
90
 
91
92
93
94
95
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
98
99
100
 
 
101
102
103
104
105
106
107
108
109
 
 
 
 
 
110
111
112
113
114
 
115
116
117
 
 
118
119
120
121
 
122
123
 
124
125
126
127
128
 
129
130
131
 
87
88
89
 
90
91
92
93
94
 
 
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 
 
112
113
114
115
116
 
 
 
 
 
 
117
118
119
120
121
122
123
124
 
 
125
126
 
 
127
128
129
130
131
 
132
133
 
134
135
136
137
138
 
139
140
141
142
@@ -87,45 +87,56 @@
  unknown='?' in filetypes)   except IOError:   pass - files = [] + filelist = []   # concatenate status output into a single list, then sort on filename   for l, s in ( (st[0], 'M'), (st[1], 'A'), (st[2], 'R'), (st[3], '!'),   (st[4], '?'), (st[5], 'I'), (st[6], 'C') ):   for m in l: - files.append([ m, s ]) - files.sort() + filelist.append([ m, s ]) + filelist.sort() + + class dirnode(object): + def __init__(self): + self.subdirs = {} + self.files = [] + self.statuses = set() + def addfile(self, filename, st): + self.files.append((filename, st)) + self.addstatus(st) + def addsubdir(self, dirname): + self.subdirs[dirname] = dirnode() + def addstatus(self, st): + self.statuses.add(st)     # Build tree data structure - modelroot = ({}, [], set()) - for name, filestatus in files: + modelroot = dirnode() + for name, filestatus in filelist:   dirs, basename = self.split(name)   curdir = modelroot   for dir in dirs: - if dir not in curdir[0]: - curdir[0][dir] = ({}, [], set()) - curdir[2].add(filestatus) - curdir = curdir[0][dir] - curdir[1].append((basename, filestatus)) - curdir[2].add(filestatus) + if dir not in curdir.subdirs: + curdir.addsubdir(dir) + curdir.addstatus(filestatus) + curdir = curdir.subdirs[dir] + curdir.addfile(basename, filestatus)     model = self.get_model()   model.clear() - def adddir(name, dirmodel, iter): - dirdict, files, dirstatus = dirmodel + def adddir(node, iter):   # insert subdirectories at this level (recursive) - for dname, nextmodel in dirdict.iteritems(): - statuslist = list(nextmodel[2]) + for dname, dirnode in node.subdirs.iteritems(): + statuslist = list(dirnode.statuses)   st = ''.join(statuslist)   row = [dname, False, hglib.toutf(dname), st]   piter = model.append(iter, row) - adddir(dname, nextmodel, piter) + adddir(dirnode, piter)   # insert files at this level - for fname, st in files: + for fname, st in node.files:   row = [fname, False, hglib.toutf(fname), st]   model.append(iter, row)     # insert directory tree into TreeModel - adddir('root', modelroot, model.get_iter_root()) + adddir(modelroot, model.get_iter_root())      def run(ui, *pats, **opts):