Show More
@@ -9,7 +9,7 b' from i18n import _' | |||
|
9 | 9 | from node import nullrev, nullid, hex |
|
10 | 10 | import mdiff, util, dagutil |
|
11 | 11 | import struct, os, bz2, zlib, tempfile |
|
12 | import discovery | |
|
12 | import discovery, error | |
|
13 | 13 | |
|
14 | 14 | _BUNDLE10_DELTA_HEADER = "20s20s20s20s" |
|
15 | 15 | |
@@ -514,3 +514,43 b' def changegroup(repo, basenodes, source)' | |||
|
514 | 514 | # to avoid a race we use changegroupsubset() (issue1320) |
|
515 | 515 | return changegroupsubset(repo, basenodes, repo.heads(), source) |
|
516 | 516 | |
|
517 | def addchangegroupfiles(repo, source, revmap, trp, pr, needfiles): | |
|
518 | revisions = 0 | |
|
519 | files = 0 | |
|
520 | while True: | |
|
521 | chunkdata = source.filelogheader() | |
|
522 | if not chunkdata: | |
|
523 | break | |
|
524 | f = chunkdata["filename"] | |
|
525 | repo.ui.debug("adding %s revisions\n" % f) | |
|
526 | pr() | |
|
527 | fl = repo.file(f) | |
|
528 | o = len(fl) | |
|
529 | if not fl.addgroup(source, revmap, trp): | |
|
530 | raise util.Abort(_("received file revlog group is empty")) | |
|
531 | revisions += len(fl) - o | |
|
532 | files += 1 | |
|
533 | if f in needfiles: | |
|
534 | needs = needfiles[f] | |
|
535 | for new in xrange(o, len(fl)): | |
|
536 | n = fl.node(new) | |
|
537 | if n in needs: | |
|
538 | needs.remove(n) | |
|
539 | else: | |
|
540 | raise util.Abort( | |
|
541 | _("received spurious file revlog entry")) | |
|
542 | if not needs: | |
|
543 | del needfiles[f] | |
|
544 | repo.ui.progress(_('files'), None) | |
|
545 | ||
|
546 | for f, needs in needfiles.iteritems(): | |
|
547 | fl = repo.file(f) | |
|
548 | for n in needs: | |
|
549 | try: | |
|
550 | fl.rev(n) | |
|
551 | except error.LookupError: | |
|
552 | raise util.Abort( | |
|
553 | _('missing file data for %s:%s - run hg verify') % | |
|
554 | (f, hex(n))) | |
|
555 | ||
|
556 | return revisions, files |
@@ -1775,8 +1775,12 b' class localrepository(object):' | |||
|
1775 | 1775 | pr.total = efiles |
|
1776 | 1776 | source.callback = None |
|
1777 | 1777 | |
|
1778 |
newrevs, newfiles = |
|
|
1779 |
|
|
|
1778 | newrevs, newfiles = changegroup.addchangegroupfiles(self, | |
|
1779 | source, | |
|
1780 | revmap, | |
|
1781 | trp, | |
|
1782 | pr, | |
|
1783 | needfiles) | |
|
1780 | 1784 | revisions += newrevs |
|
1781 | 1785 | files += newfiles |
|
1782 | 1786 | |
@@ -1864,46 +1868,6 b' class localrepository(object):' | |||
|
1864 | 1868 | else: |
|
1865 | 1869 | return dh + 1 |
|
1866 | 1870 | |
|
1867 | def addchangegroupfiles(self, source, revmap, trp, pr, needfiles): | |
|
1868 | revisions = 0 | |
|
1869 | files = 0 | |
|
1870 | while True: | |
|
1871 | chunkdata = source.filelogheader() | |
|
1872 | if not chunkdata: | |
|
1873 | break | |
|
1874 | f = chunkdata["filename"] | |
|
1875 | self.ui.debug("adding %s revisions\n" % f) | |
|
1876 | pr() | |
|
1877 | fl = self.file(f) | |
|
1878 | o = len(fl) | |
|
1879 | if not fl.addgroup(source, revmap, trp): | |
|
1880 | raise util.Abort(_("received file revlog group is empty")) | |
|
1881 | revisions += len(fl) - o | |
|
1882 | files += 1 | |
|
1883 | if f in needfiles: | |
|
1884 | needs = needfiles[f] | |
|
1885 | for new in xrange(o, len(fl)): | |
|
1886 | n = fl.node(new) | |
|
1887 | if n in needs: | |
|
1888 | needs.remove(n) | |
|
1889 | else: | |
|
1890 | raise util.Abort( | |
|
1891 | _("received spurious file revlog entry")) | |
|
1892 | if not needs: | |
|
1893 | del needfiles[f] | |
|
1894 | self.ui.progress(_('files'), None) | |
|
1895 | ||
|
1896 | for f, needs in needfiles.iteritems(): | |
|
1897 | fl = self.file(f) | |
|
1898 | for n in needs: | |
|
1899 | try: | |
|
1900 | fl.rev(n) | |
|
1901 | except error.LookupError: | |
|
1902 | raise util.Abort( | |
|
1903 | _('missing file data for %s:%s - run hg verify') % | |
|
1904 | (f, hex(n))) | |
|
1905 | ||
|
1906 | return revisions, files | |
|
1907 | 1871 | |
|
1908 | 1872 | def stream_in(self, remote, requirements): |
|
1909 | 1873 | lock = self.lock() |
General Comments 0
You need to be logged in to leave comments.
Login now