Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9, 0.9.1, and 0.9.1.1

merge with stable

Changeset 429f63e37356

Parents b54fad379ebb

Parents f663d3dc2675

by Steve Borho

Changes to 10 files · Browse files at 429f63e37356 Showing diff from parent b54fad379ebb f663d3dc2675 Diff from another changeset...

Change 1 of 1 Show Entire File hggtk/​hgthread.py Stacked
 
154
155
156
 
 
157
158
159
 
154
155
156
157
158
159
160
161
@@ -154,6 +154,8 @@
    def run(self):   try: + for k, v in self.ui.configitems('defaults'): + self.ui.setconfig('defaults', k, '')   ret = hglib.dispatch._dispatch(self.ui, self.args)   if ret:   self.ui.write(_('[command returned code %d]\n') % int(ret))
Change 1 of 1 Show Entire File thgtaskbar.py Stacked
 
317
318
319
 
320
321
322
 
 
 
 
 
 
 
323
324
325
 
317
318
319
320
321
 
 
322
323
324
325
326
327
328
329
330
331
@@ -317,9 +317,15 @@
  roots, notifypaths = getrepos([path])   if roots:   for r in sorted(roots): + tfn = os.path.join(r, '.hg', 'thgstatus')   try: - os.remove(os.path.join(r, '.hg', 'thgstatus')) - except OSError: + f = open(tfn, 'rb') + e = f.readline() + f.close() + if not e.startswith('@@noicons'): + os.remove(tfn) + except (IOError, OSError): + print "IOError or OSError while trying to remove %s" % tfn   pass   if notifypaths:   shlib.shell_notify(list(notifypaths))
Change 1 of 1 Show Entire File thgutil/​hglib.py Stacked
 
128
129
130
 
 
131
132
133
134
135
136
 
128
129
130
131
132
133
134
 
135
136
137
@@ -128,9 +128,10 @@
  for a in args:   q.put(str(a))   u = Qui() + for k, v in u.configitems('defaults'): + u.setconfig('defaults', k, '')   return dispatch._dispatch(u, list(args))   -  def displaytime(date):   return util.datestr(date, '%Y-%m-%d %H:%M:%S %1%2')  
Change 1 of 1 Show Entire File thgutil/​shlib.py Stacked
 
103
104
105
 
 
106
107
108
 
103
104
105
106
107
108
109
110
@@ -103,6 +103,8 @@
  for dn in sorted(dirstatus):   s = dirstatus[dn]   e = f.readline() + if e.startswith('@@noicons'): + break   if e == '' or e[0] != s or e[1:-1] != dn:   update = True   break
 
59
60
61
 
62
63
64
 
71
72
73
74
75
76
77
78
79
 
 
 
 
 
 
80
81
 
 
82
83
84
85
 
86
87
88
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
91
92
93
94
 
95
96
97
98
 
99
100
101
102
 
103
104
 
105
106
107
 
59
60
61
62
63
64
65
 
72
73
74
 
 
 
75
76
 
77
78
79
80
81
82
83
 
84
85
86
 
 
 
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
@@ -59,6 +59,7 @@
 int DirectoryStatus::read(const std::string& hgroot, const std::string& cwd)  {   v_.clear(); + noicons_ = false;     std::string p = hgroot + "\\.hg\\thgstatus";   @@ -71,37 +72,65 @@
  return 0;   }   - char state; - std::vector<char> path(MAX_PATH); -   DirectoryStatus::E e;   - while (fread(&state, sizeof(state), 1, f) == 1) + int res = 1; + const std::string noicons = "@@noicons"; + + std::vector<char> vline(200); + + for (;;)   { - e.status_ = state; + vline.clear(); + char t;   - path.clear(); - char t; - while (fread(&t, sizeof(t), 1, f) == 1 && t != '\n') + for (;;)   { - path.push_back(t); - if (path.size() > 1000) - return 0; + if (fread(&t, sizeof(t), 1, f) != 1) + goto close; + if (t == '\n') + break; + vline.push_back(t); + if (vline.size() > 1000) + { + res = 0; + goto close; + } + } + vline.push_back(0); + + std::string line = &vline[0]; + + if (line.substr(0, noicons.size()) == noicons) + { + noicons_ = true; + goto close; + } + + if (line.empty()) + goto close; + + e.status_ = line[0]; + + std::string path; + if (line.size() > 1) + { + path = line.c_str() + 1;   }   path.push_back('/'); - path.push_back(0);   - e.path_ = &path[0]; + e.path_ = path;     v_.push_back(e);   }   +close:   fclose(f);     TDEBUG_TRACE("DirectoryStatus::read(" << hgroot << "): done. " - << v_.size() << " entries read"); + << v_.size() << " entries read. noicons_ = " << noicons_ );   - return 1; + return res;  }    
 
30
31
32
 
33
34
 
 
35
36
37
 
38
39
40
 
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@@ -30,11 +30,15 @@
    typedef std::vector<E> V;   V v_; + bool noicons_;    public: + DirectoryStatus(): noicons_(false) {} +   static DirectoryStatus* get(   const std::string& hgroot, const std::string& cwd);   char status(const std::string& relpath) const; + bool noicons() const { return noicons_; }    private:   int read(const std::string& hgroot, const std::string& cwd);
 
175
176
177
 
 
 
 
 
 
 
178
179
180
181
182
183
 
 
184
 
185
186
187
188
 
189
190
191
 
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
 
 
197
198
199
200
@@ -175,17 +175,26 @@
  relpath[i] = '/';   }   + DirectoryStatus* pdirsta = DirectoryStatus::get(cur.hgroot, cur.basedir); + if (pdirsta && pdirsta->noicons()) + { + last = cur; + return 0; + } +   if (cur.isdir)   {   if (!relpath.empty())   {   Dirstate* pds2 = Dirstatecache::get(cur.hgroot, cur.basedir);   if (pds2 && !pds2->root().getdir(relpath)) + { + last = cur;   return 0; // unknown dir -> no icon + }   }   - DirectoryStatus* pds = DirectoryStatus::get(cur.hgroot, cur.basedir); - outStatus = (pds ? pds->status(relpath) : '?'); + outStatus = (pdirsta ? pdirsta->status(relpath) : '?');   }   else   {
 
3
4
5
 
6
7
8
 
177
178
179
 
180
181
 
 
 
182
183
184
185
186
 
187
188
189
 
 
 
 
 
 
 
 
 
 
 
 
190
191
192
193
194
 
 
195
196
 
 
 
 
 
 
 
 
197
198
199
 
3
4
5
6
7
8
9
 
178
179
180
181
182
183
184
185
186
187
188
189
190
 
191
192
193
 
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
 
210
211
212
 
213
214
215
216
217
218
219
220
221
222
223
@@ -3,6 +3,7 @@
   #include <vector>  #include <assert.h> +#include <map>    #include <io.h>  #include "FCNTL.H" @@ -177,23 +178,46 @@
 }     +// not reentrant  HICON GetTortoiseIcon(const std::string& iconname)  { + typedef std::map<std::string, HICON> IconCacheT; + static IconCacheT iconcache_; +   std::string thgdir = GetTHgProgRoot();   if (thgdir.empty())   {   TDEBUG_TRACE("GetTortoiseIcon: THG root is empty"); - return NULL; + return 0;   }   - std::string iconpath = thgdir + "\\icons\\" + iconname; + const std::string iconpath = thgdir + "\\icons\\" + iconname; + + IconCacheT::const_iterator i = iconcache_.find(iconpath); + if (i != iconcache_.end()) + return i->second; + + if (iconcache_.size() > 200) + { + TDEBUG_TRACE("**** GetTortoiseIcon: error: too many icons in cache"); + return 0; + } +   HICON h = (HICON) LoadImageA(0, iconpath.c_str(), IMAGE_ICON,   16, 16, LR_LOADFROMFILE);   if (!h)   { - TDEBUG_TRACE(" GetTortoiseIcon: can't find " + iconpath); + TDEBUG_TRACE("GetTortoiseIcon: can't find " + iconpath); + return 0;   } - + + iconcache_[iconpath] = h; + + TDEBUG_TRACE( + "GetTortoiseIcon: added '" << iconpath << "' to iconcache_" + " (" << iconcache_.size() << " icons in cache)" + ); +   return h;  }