Mercurial > hg
comparison contrib/shrink-revlog.py @ 11294:7b5d05e0fb1e
shrink-revlog: use util.mktempcopy() to preserve mode of index file.
(There's still a chmod() call to manually preserve the mode of the
data file.)
author | Greg Ward <greg-hg@gerg.ca> |
---|---|
date | Thu, 03 Jun 2010 10:18:33 -0400 |
parents | f73baa069113 |
children | 3e46d76eaabf |
comparison
equal
deleted
inserted
replaced
11293:0e5ce2325795 | 11294:7b5d05e0fb1e |
---|---|
188 raise util.Abort(_('shrinking the changelog ' | 188 raise util.Abort(_('shrinking the changelog ' |
189 'will corrupt your repository')) | 189 'will corrupt your repository')) |
190 | 190 |
191 ui.write(_('shrinking %s\n') % indexfn) | 191 ui.write(_('shrinking %s\n') % indexfn) |
192 prefix = os.path.basename(indexfn)[:-1] | 192 prefix = os.path.basename(indexfn)[:-1] |
193 (tmpfd, tmpindexfn) = tempfile.mkstemp(dir=os.path.dirname(indexfn), | 193 tmpindexfn = util.mktempcopy(indexfn, emptyok=True) |
194 prefix=prefix, | |
195 suffix='.i') | |
196 os.close(tmpfd) | |
197 | 194 |
198 r1 = revlog.revlog(util.opener(os.getcwd(), audit=False), indexfn) | 195 r1 = revlog.revlog(util.opener(os.getcwd(), audit=False), indexfn) |
199 r2 = revlog.revlog(util.opener(os.getcwd(), audit=False), tmpindexfn) | 196 r2 = revlog.revlog(util.opener(os.getcwd(), audit=False), tmpindexfn) |
200 | 197 |
201 datafn, tmpdatafn = r1.datafile, r2.datafile | 198 datafn, tmpdatafn = r1.datafile, r2.datafile |
253 # racy, both files cannot be renamed atomically | 250 # racy, both files cannot be renamed atomically |
254 # copy files | 251 # copy files |
255 util.os_link(indexfn, oldindexfn) | 252 util.os_link(indexfn, oldindexfn) |
256 ignoremissing(util.os_link)(datafn, olddatafn) | 253 ignoremissing(util.os_link)(datafn, olddatafn) |
257 | 254 |
258 # mkstemp() creates files only readable by the owner | |
259 os.chmod(tmpindexfn, os.stat(indexfn).st_mode) | |
260 | |
261 # rename | 255 # rename |
262 util.rename(tmpindexfn, indexfn) | 256 util.rename(tmpindexfn, indexfn) |
263 try: | 257 try: |
264 os.chmod(tmpdatafn, os.stat(datafn).st_mode) | 258 os.chmod(tmpdatafn, os.stat(datafn).st_mode) |
265 util.rename(tmpdatafn, datafn) | 259 util.rename(tmpdatafn, datafn) |