Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.8, 0.8.1, and 0.8.2

thgutil: only rewrite thgstatus file if needed

Read the existing contents of the file first and rewrite it only if
it is not up-to-date.

Presumably better for flash drives.

Changeset 1e087bf4fa46

Parent a77b80f99a18

by Adrian Buehlmann

Changes to one file · Browse files at 1e087bf4fa46 Showing diff from parent a77b80f99a18 Diff from another changeset...

Change 1 of 2 Show Entire File thgutil/​shlib.py Stacked
 
80
81
82
 
83
84
85
 
86
87
88
 
92
93
94
95
96
97
98
99
100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
102
103
 
80
81
82
83
84
85
86
87
88
89
90
 
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
@@ -80,9 +80,11 @@
  tdelta = float(int(tref)) + 1.0 - tref   if (tdelta > 0.0):   time.sleep(tdelta) +   repo = hg.repository(ui, root) # a fresh repo object is needed   repostate = repo.status() # will update .hg/dirstate as a side effect   modified, added, removed, deleted = repostate[:4] +   dirstatus = {}   def dirname(f):   return '/'.join(f.split('/')[:-1]) @@ -92,12 +94,34 @@
  dirstatus[dirname(fn)] = 'm'   for fn in removed + deleted:   dirstatus[dirname(fn)] = 'r' - f = repo.opener('thgstatus', 'wb', atomictemp=True) - for dn in sorted(dirstatus): - s = dirstatus[dn] - f.write(s + dn + '\n') - ui.note("%s %s\n" % (s, dn)) - f.rename() + + update = False + f = None + try: + try: + f = repo.opener('thgstatus', 'rb') + for dn in sorted(dirstatus): + s = dirstatus[dn] + e = f.readline() + if e == '' or e[0] != s or e[1:-1] != dn: + update = True + break + if f.readline() != '': + # extra line in f, needs update + update = True + except IOError: + update = True + finally: + if f != None: + f.close() + + if update: + f = repo.opener('thgstatus', 'wb', atomictemp=True) + for dn in sorted(dirstatus): + s = dirstatus[dn] + f.write(s + dn + '\n') + ui.note("%s %s\n" % (s, dn)) + f.rename()    else:   def shell_notify(paths):