Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 30960:c8081ea63591
debugcommands: move 'debugpathcomplete' in the new module
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Wed, 01 Feb 2017 17:47:35 +0100 |
parents | 9e39d196cdf5 |
children | 7103122495e2 |
comparison
equal
deleted
inserted
replaced
30959:9e39d196cdf5 | 30960:c8081ea63591 |
---|---|
1858 Returns 0 on success, 1 if errors are encountered. | 1858 Returns 0 on success, 1 if errors are encountered. |
1859 """ | 1859 """ |
1860 with repo.wlock(False): | 1860 with repo.wlock(False): |
1861 return cmdutil.copy(ui, repo, pats, opts) | 1861 return cmdutil.copy(ui, repo, pats, opts) |
1862 | 1862 |
1863 @command('debugpathcomplete', | |
1864 [('f', 'full', None, _('complete an entire path')), | |
1865 ('n', 'normal', None, _('show only normal files')), | |
1866 ('a', 'added', None, _('show only added files')), | |
1867 ('r', 'removed', None, _('show only removed files'))], | |
1868 _('FILESPEC...')) | |
1869 def debugpathcomplete(ui, repo, *specs, **opts): | |
1870 '''complete part or all of a tracked path | |
1871 | |
1872 This command supports shells that offer path name completion. It | |
1873 currently completes only files already known to the dirstate. | |
1874 | |
1875 Completion extends only to the next path segment unless | |
1876 --full is specified, in which case entire paths are used.''' | |
1877 | |
1878 def complete(path, acceptable): | |
1879 dirstate = repo.dirstate | |
1880 spec = os.path.normpath(os.path.join(pycompat.getcwd(), path)) | |
1881 rootdir = repo.root + pycompat.ossep | |
1882 if spec != repo.root and not spec.startswith(rootdir): | |
1883 return [], [] | |
1884 if os.path.isdir(spec): | |
1885 spec += '/' | |
1886 spec = spec[len(rootdir):] | |
1887 fixpaths = pycompat.ossep != '/' | |
1888 if fixpaths: | |
1889 spec = spec.replace(pycompat.ossep, '/') | |
1890 speclen = len(spec) | |
1891 fullpaths = opts['full'] | |
1892 files, dirs = set(), set() | |
1893 adddir, addfile = dirs.add, files.add | |
1894 for f, st in dirstate.iteritems(): | |
1895 if f.startswith(spec) and st[0] in acceptable: | |
1896 if fixpaths: | |
1897 f = f.replace('/', pycompat.ossep) | |
1898 if fullpaths: | |
1899 addfile(f) | |
1900 continue | |
1901 s = f.find(pycompat.ossep, speclen) | |
1902 if s >= 0: | |
1903 adddir(f[:s]) | |
1904 else: | |
1905 addfile(f) | |
1906 return files, dirs | |
1907 | |
1908 acceptable = '' | |
1909 if opts['normal']: | |
1910 acceptable += 'nm' | |
1911 if opts['added']: | |
1912 acceptable += 'a' | |
1913 if opts['removed']: | |
1914 acceptable += 'r' | |
1915 cwd = repo.getcwd() | |
1916 if not specs: | |
1917 specs = ['.'] | |
1918 | |
1919 files, dirs = set(), set() | |
1920 for spec in specs: | |
1921 f, d = complete(spec, acceptable or 'nmar') | |
1922 files.update(f) | |
1923 dirs.update(d) | |
1924 files.update(dirs) | |
1925 ui.write('\n'.join(repo.pathto(p, cwd) for p in sorted(files))) | |
1926 ui.write('\n') | |
1927 | |
1928 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True) | 1863 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True) |
1929 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts): | 1864 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts): |
1930 '''access the pushkey key/value protocol | 1865 '''access the pushkey key/value protocol |
1931 | 1866 |
1932 With two args, list the keys in the given namespace. | 1867 With two args, list the keys in the given namespace. |