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

cachethg: correct testing if repo argument is matching

Changeset 496ef4cf6121

Parent e1b2305f5685

by Simon Heimberg

Changes to one file · Browse files at 496ef4cf6121 Showing diff from parent e1b2305f5685 Diff from another changeset...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
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
143
144
145
146
147
148
149
150
151
152
153
154
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
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
143
144
145
146
147
148
149
150
151
152
153
154
 import os  from mercurial import hg, cmdutil, util, ui  import thgutil  import sys  try:   from mercurial.error import RepoError  except ImportError:   from mercurial.repo import RepoError    try:   from win32api import GetTickCount   CACHE_TIMEOUT = 5000  except ImportError:   from time import time as GetTickCount   CACHE_TIMEOUT = 5.0    UNCHANGED = "unchanged"  ADDED = "added"  MODIFIED = "modified"  UNKNOWN = "unknown"  IGNORED = "ignored"  NOT_IN_REPO = "n/a"    # file status cache  overlay_cache = {}  cache_tick_count = 0  cache_root = None  cache_pdir = None      def add_dirs(list):   dirs = set()   for f in list:   pdir = os.path.dirname(f)   if pdir in dirs:   continue   while pdir:   dirs.add(pdir)   pdir = os.path.dirname(pdir)   list.extend(dirs)      def get_state(upath, repo=None):   """   Get the state of a given path in source control.   """   global overlay_cache, cache_tick_count   global cache_root, cache_pdir     #print "called: _get_state(%s)" % path   tc = GetTickCount()     try:   # handle some Asian charsets   path = upath.encode('mbcs')   except:   path = upath   # check if path is cached   pdir = os.path.dirname(path)   if cache_pdir == pdir and overlay_cache:   if tc - cache_tick_count < CACHE_TIMEOUT:   status = overlay_cache.get(path, NOT_IN_REPO)   print "%s: %s (cached)" % (path, status)   return status   else:   print "Timed out!!"   overlay_cache.clear()   # path is a drive   if path.endswith(":\\"):   overlay_cache[path] = UNKNOWN   return NOT_IN_REPO   # open repo   if cache_pdir == pdir:   root = cache_root   else:   print "find new root"   cache_pdir = pdir   cache_root = root = thgutil.find_root(pdir)   print "_get_state: root = ", root   if root is None:   print "_get_state: not in repo"   overlay_cache = {None: None}   cache_tick_count = GetTickCount()   return NOT_IN_REPO   hgdir = os.path.join(root, '.hg', '')   if pdir == hgdir[:-1] or pdir.startswith(hgdir):   if not overlay_cache:   cache_tick_count = GetTickCount()   overlay_cache[pdir] = NOT_IN_REPO   return NOT_IN_REPO   try:   tc1 = GetTickCount() - if not repo or repo.root == cache_root: + if not repo or (repo.root != root and repo.root != os.path.realpath(root)):   repo = hg.repository(ui.ui(), path=root) - print "hg.repository() took %g ticks" % (GetTickCount() - tc1) + print "hg.repository() took %g ticks" % (GetTickCount() - tc1)   # check if to display overlay icons in this repo   overlayopt = repo.ui.config('tortoisehg', 'overlayicons', ' ').lower()   print "%s: repo overlayicons = " % path, overlayopt   if overlayopt == 'localdisk':   overlayopt = bool(thgutil.netdrive_status(path))   if not overlayopt or overlayopt in 'false off no'.split():   print "%s: overlayicons disabled" % path   overlay_cache = {None: None}   cache_tick_count = GetTickCount()   return NOT_IN_REPO   except RepoError:   # We aren't in a working tree   print "%s: not in repo" % pdir   if not overlay_cache:   cache_tick_count = GetTickCount()   overlay_cache[pdir] = IGNORED   return IGNORED   except StandardError, e:   print "error while handling %s:" % pdir   print e   if not overlay_cache:   cache_tick_count = GetTickCount()   overlay_cache[pdir] = UNKNOWN   return UNKNOWN   # get file status   tc1 = GetTickCount()     try:   matcher = cmdutil.match(repo, [pdir])   repostate = repo.status(match=matcher, ignored=True,   clean=True, unknown=True)   # add directory status to list   for grp in repostate:   add_dirs(grp)   except util.Abort, inst:   print "abort: %s" % inst   print "treat as unknown : %s" % path   return UNKNOWN     print "status() took %g ticks" % (GetTickCount() - tc1)   modified, added, removed, deleted, unknown, ignored, clean = repostate   # cached file info   tc = GetTickCount()   overlay_cache = {}   for grp, st in (   (ignored, IGNORED),   (unknown, UNKNOWN),   (clean, UNCHANGED),   (added, ADDED),   (removed, MODIFIED),   (deleted, MODIFIED),   (modified, MODIFIED)):   for f in grp:   fpath = os.path.join(root, os.path.normpath(f))   overlay_cache[fpath] = st   status = overlay_cache.get(path, UNKNOWN)   print "%s: %s" % (path, status)   cache_tick_count = GetTickCount()   return status