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)