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

merge with Adrian

Changeset ceb5521c0ab2

Parents 25ae007cf4b8

Parents d4bb3d7c4d60

by Steve Borho

Changes to 5 files · Browse files at ceb5521c0ab2 Showing diff from parent 25ae007cf4b8 d4bb3d7c4d60 Diff from another changeset...

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/​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   {