##// END OF EJS Templates
Move hg from storing files in data with base64 encoding to full...
mpm@selenic.com -
r110:c37c7f78 default
parent child Browse files
Show More
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms
6 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 import sys, struct, sha, socket, os, time, base64, re, urllib2
8 import sys, struct, sha, socket, os, time, re, urllib2
9 9 import urllib
10 10 from mercurial import byterange
11 11 from mercurial.transaction import *
@@ -14,16 +14,7 b' from difflib import SequenceMatcher'
14 14
15 15 class filelog(revlog):
16 16 def __init__(self, opener, path):
17 s = self.encodepath(path)
18 revlog.__init__(self, opener, os.path.join("data", s + "i"),
19 os.path.join("data", s))
20
21 def encodepath(self, path):
22 s = sha.sha(path).digest()
23 s = base64.encodestring(s)[:-3]
24 s = re.sub("\+", "%", s)
25 s = re.sub("/", "_", s)
26 return s
17 revlog.__init__(self, opener, path + ".i", path + ".d")
27 18
28 19 def read(self, node):
29 20 return self.revision(node)
@@ -210,11 +201,17 b' def opener(base):'
210 201
211 202 f = os.path.join(p, path)
212 203
213 if mode != "r" and os.path.isfile(f):
214 s = os.stat(f)
215 if s.st_nlink > 1:
216 file(f + ".tmp", "w").write(file(f).read())
217 os.rename(f+".tmp", f)
204 if mode != "r":
205 try:
206 s = os.stat(f)
207 except OSError:
208 d = os.path.dirname(f)
209 if not os.path.isdir(d):
210 os.makedirs(d)
211 else:
212 if s.st_nlink > 1:
213 file(f + ".tmp", "w").write(file(f).read())
214 os.rename(f+".tmp", f)
218 215
219 216 return file(f, mode)
220 217
General Comments 0
You need to be logged in to leave comments. Login now