comparison mercurial/localrepo.py @ 2143:3053fc33f545

Show repo's revlog format on verify. Warn if some files use a different format.
author Thomas Arendsen Hein <thomas@intevation.de>
date Thu, 27 Apr 2006 21:58:47 +0200
parents 8a1e2a9c7013
children 43ce1c17e644
comparison
equal deleted inserted replaced
2142:8a1e2a9c7013 2143:3053fc33f545
1801 def verify(self): 1801 def verify(self):
1802 filelinkrevs = {} 1802 filelinkrevs = {}
1803 filenodes = {} 1803 filenodes = {}
1804 changesets = revisions = files = 0 1804 changesets = revisions = files = 0
1805 errors = [0] 1805 errors = [0]
1806 warnings = [0]
1806 neededmanifests = {} 1807 neededmanifests = {}
1807 1808
1808 def err(msg): 1809 def err(msg):
1809 self.ui.warn(msg + "\n") 1810 self.ui.warn(msg + "\n")
1810 errors[0] += 1 1811 errors[0] += 1
1812
1813 def warn(msg):
1814 self.ui.warn(msg + "\n")
1815 warnings[0] += 1
1811 1816
1812 def checksize(obj, name): 1817 def checksize(obj, name):
1813 d = obj.checksize() 1818 d = obj.checksize()
1814 if d[0]: 1819 if d[0]:
1815 err(_("%s data length off by %d bytes") % (name, d[0])) 1820 err(_("%s data length off by %d bytes") % (name, d[0]))
1816 if d[1]: 1821 if d[1]:
1817 err(_("%s index contains %d extra bytes") % (name, d[1])) 1822 err(_("%s index contains %d extra bytes") % (name, d[1]))
1823
1824 def checkversion(obj, name):
1825 if obj.version != revlog.REVLOGV0:
1826 if not revlogv1:
1827 warn(_("warning: `%s' uses revlog format 1") % name)
1828 elif revlogv1:
1829 warn(_("warning: `%s' uses revlog format 0") % name)
1830
1831 revlogv1 = self.revlogversion != revlog.REVLOGV0
1832 self.ui.status(_("repository uses revlog format %d\n") %
1833 (revlogv1 and 1 or 0))
1818 1834
1819 seen = {} 1835 seen = {}
1820 self.ui.status(_("checking changesets\n")) 1836 self.ui.status(_("checking changesets\n"))
1821 checksize(self.changelog, "changelog") 1837 checksize(self.changelog, "changelog")
1822 1838
1848 for f in changes[3]: 1864 for f in changes[3]:
1849 filelinkrevs.setdefault(f, []).append(i) 1865 filelinkrevs.setdefault(f, []).append(i)
1850 1866
1851 seen = {} 1867 seen = {}
1852 self.ui.status(_("checking manifests\n")) 1868 self.ui.status(_("checking manifests\n"))
1869 checkversion(self.manifest, "manifest")
1853 checksize(self.manifest, "manifest") 1870 checksize(self.manifest, "manifest")
1854 1871
1855 for i in range(self.manifest.count()): 1872 for i in range(self.manifest.count()):
1856 n = self.manifest.node(i) 1873 n = self.manifest.node(i)
1857 l = self.manifest.linkrev(n) 1874 l = self.manifest.linkrev(n)
1912 files += 1 1929 files += 1
1913 if not f: 1930 if not f:
1914 err(_("file without name in manifest %s") % short(n)) 1931 err(_("file without name in manifest %s") % short(n))
1915 continue 1932 continue
1916 fl = self.file(f) 1933 fl = self.file(f)
1934 checkversion(fl, f)
1917 checksize(fl, f) 1935 checksize(fl, f)
1918 1936
1919 nodes = {nullid: 1} 1937 nodes = {nullid: 1}
1920 seen = {} 1938 seen = {}
1921 for i in range(fl.count()): 1939 for i in range(fl.count()):
1960 err(_("node %s in manifests not in %s") % (hex(node), f)) 1978 err(_("node %s in manifests not in %s") % (hex(node), f))
1961 1979
1962 self.ui.status(_("%d files, %d changesets, %d total revisions\n") % 1980 self.ui.status(_("%d files, %d changesets, %d total revisions\n") %
1963 (files, changesets, revisions)) 1981 (files, changesets, revisions))
1964 1982
1983 if warnings[0]:
1984 self.ui.warn(_("%d warnings encountered!\n") % warnings[0])
1965 if errors[0]: 1985 if errors[0]:
1966 self.ui.warn(_("%d integrity errors encountered!\n") % errors[0]) 1986 self.ui.warn(_("%d integrity errors encountered!\n") % errors[0])
1967 return 1 1987 return 1
1968 1988
1969 # used to avoid circular references so destructors work 1989 # used to avoid circular references so destructors work