58 # be specifying the version(s) of Mercurial they are tested with, or |
58 # be specifying the version(s) of Mercurial they are tested with, or |
59 # leave the attribute unspecified. |
59 # leave the attribute unspecified. |
60 testedwith = 'internal' |
60 testedwith = 'internal' |
61 |
61 |
62 backupdir = 'shelve-backup' |
62 backupdir = 'shelve-backup' |
|
63 shelvedir = 'shelved' |
63 |
64 |
64 class shelvedfile(object): |
65 class shelvedfile(object): |
65 """Helper for the file storing a single shelve |
66 """Helper for the file storing a single shelve |
66 |
67 |
67 Handles common functions on shelve files (.hg/.patch) using |
68 Handles common functions on shelve files (.hg/.patch) using |
68 the vfs layer""" |
69 the vfs layer""" |
69 def __init__(self, repo, name, filetype=None): |
70 def __init__(self, repo, name, filetype=None): |
70 self.repo = repo |
71 self.repo = repo |
71 self.name = name |
72 self.name = name |
72 self.vfs = scmutil.vfs(repo.join('shelved')) |
73 self.vfs = scmutil.vfs(repo.join(shelvedir)) |
73 self.backupvfs = scmutil.vfs(repo.join(backupdir)) |
74 self.backupvfs = scmutil.vfs(repo.join(backupdir)) |
74 self.ui = self.repo.ui |
75 self.ui = self.repo.ui |
75 if filetype: |
76 if filetype: |
76 self.fname = name + '.' + filetype |
77 self.fname = name + '.' + filetype |
77 else: |
78 else: |
406 |
407 |
407 def cleanupcmd(ui, repo): |
408 def cleanupcmd(ui, repo): |
408 """subcommand that deletes all shelves""" |
409 """subcommand that deletes all shelves""" |
409 |
410 |
410 with repo.wlock(): |
411 with repo.wlock(): |
411 for (name, _type) in repo.vfs.readdir('shelved'): |
412 for (name, _type) in repo.vfs.readdir(shelvedir): |
412 suffix = name.rsplit('.', 1)[-1] |
413 suffix = name.rsplit('.', 1)[-1] |
413 if suffix in ('hg', 'patch'): |
414 if suffix in ('hg', 'patch'): |
414 shelvedfile(repo, name).movetobackup() |
415 shelvedfile(repo, name).movetobackup() |
415 cleanupoldbackups(repo) |
416 cleanupoldbackups(repo) |
416 |
417 |
430 raise error.Abort(_("shelved change '%s' not found") % name) |
431 raise error.Abort(_("shelved change '%s' not found") % name) |
431 |
432 |
432 def listshelves(repo): |
433 def listshelves(repo): |
433 """return all shelves in repo as list of (time, filename)""" |
434 """return all shelves in repo as list of (time, filename)""" |
434 try: |
435 try: |
435 names = repo.vfs.readdir('shelved') |
436 names = repo.vfs.readdir(shelvedir) |
436 except OSError as err: |
437 except OSError as err: |
437 if err.errno != errno.ENOENT: |
438 if err.errno != errno.ENOENT: |
438 raise |
439 raise |
439 return [] |
440 return [] |
440 info = [] |
441 info = [] |