1867 lock = None |
1867 lock = None |
1868 unbundle = remote.capable('unbundle') |
1868 unbundle = remote.capable('unbundle') |
1869 if not unbundle: |
1869 if not unbundle: |
1870 lock = remote.lock() |
1870 lock = remote.lock() |
1871 try: |
1871 try: |
|
1872 unfi = self.unfiltered() |
1872 # discovery |
1873 # discovery |
1873 fci = discovery.findcommonincoming |
1874 fci = discovery.findcommonincoming |
1874 commoninc = fci(self, remote, force=force) |
1875 commoninc = fci(unfi, remote, force=force) |
1875 common, inc, remoteheads = commoninc |
1876 common, inc, remoteheads = commoninc |
1876 fco = discovery.findcommonoutgoing |
1877 fco = discovery.findcommonoutgoing |
1877 outgoing = fco(self, remote, onlyheads=revs, |
1878 outgoing = fco(unfi, remote, onlyheads=revs, |
1878 commoninc=commoninc, force=force) |
1879 commoninc=commoninc, force=force) |
1879 |
1880 |
1880 |
1881 |
1881 if not outgoing.missing: |
1882 if not outgoing.missing: |
1882 # nothing to push |
1883 # nothing to push |
1883 scmutil.nochangesfound(self.ui, self, outgoing.excluded) |
1884 scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded) |
1884 ret = None |
1885 ret = None |
1885 else: |
1886 else: |
1886 # something to push |
1887 # something to push |
1887 if not force: |
1888 if not force: |
1888 # if self.obsstore == False --> no obsolete |
1889 # if self.obsstore == False --> no obsolete |
1889 # then, save the iteration |
1890 # then, save the iteration |
1890 if self.obsstore: |
1891 if unfi.obsstore: |
1891 # this message are here for 80 char limit reason |
1892 # this message are here for 80 char limit reason |
1892 mso = _("push includes obsolete changeset: %s!") |
1893 mso = _("push includes obsolete changeset: %s!") |
1893 msu = _("push includes unstable changeset: %s!") |
1894 msu = _("push includes unstable changeset: %s!") |
1894 msb = _("push includes bumped changeset: %s!") |
1895 msb = _("push includes bumped changeset: %s!") |
1895 # If we are to push if there is at least one |
1896 # If we are to push if there is at least one |
1896 # obsolete or unstable changeset in missing, at |
1897 # obsolete or unstable changeset in missing, at |
1897 # least one of the missinghead will be obsolete or |
1898 # least one of the missinghead will be obsolete or |
1898 # unstable. So checking heads only is ok |
1899 # unstable. So checking heads only is ok |
1899 for node in outgoing.missingheads: |
1900 for node in outgoing.missingheads: |
1900 ctx = self[node] |
1901 ctx = unfi[node] |
1901 if ctx.obsolete(): |
1902 if ctx.obsolete(): |
1902 raise util.Abort(mso % ctx) |
1903 raise util.Abort(mso % ctx) |
1903 elif ctx.unstable(): |
1904 elif ctx.unstable(): |
1904 raise util.Abort(msu % ctx) |
1905 raise util.Abort(msu % ctx) |
1905 elif ctx.bumped(): |
1906 elif ctx.bumped(): |
1906 raise util.Abort(msb % ctx) |
1907 raise util.Abort(msb % ctx) |
1907 discovery.checkheads(self, remote, outgoing, |
1908 discovery.checkheads(unfi, remote, outgoing, |
1908 remoteheads, newbranch, |
1909 remoteheads, newbranch, |
1909 bool(inc)) |
1910 bool(inc)) |
1910 |
1911 |
1911 # create a changegroup from local |
1912 # create a changegroup from local |
1912 if revs is None and not outgoing.excluded: |
1913 if revs is None and not outgoing.excluded: |
1955 # * missingheads part of common (::commonheads) |
1956 # * missingheads part of common (::commonheads) |
1956 common = set(outgoing.common) |
1957 common = set(outgoing.common) |
1957 cheads = [node for node in revs if node in common] |
1958 cheads = [node for node in revs if node in common] |
1958 # and |
1959 # and |
1959 # * commonheads parents on missing |
1960 # * commonheads parents on missing |
1960 revset = self.set('%ln and parents(roots(%ln))', |
1961 revset = unfi.set('%ln and parents(roots(%ln))', |
1961 outgoing.commonheads, |
1962 outgoing.commonheads, |
1962 outgoing.missing) |
1963 outgoing.missing) |
1963 cheads.extend(c.node() for c in revset) |
1964 cheads.extend(c.node() for c in revset) |
1964 # even when we don't push, exchanging phase data is useful |
1965 # even when we don't push, exchanging phase data is useful |
1965 remotephases = remote.listkeys('phases') |
1966 remotephases = remote.listkeys('phases') |
1978 ### Apply local phase on remote |
1979 ### Apply local phase on remote |
1979 |
1980 |
1980 # Get the list of all revs draft on remote by public here. |
1981 # Get the list of all revs draft on remote by public here. |
1981 # XXX Beware that revset break if droots is not strictly |
1982 # XXX Beware that revset break if droots is not strictly |
1982 # XXX root we may want to ensure it is but it is costly |
1983 # XXX root we may want to ensure it is but it is costly |
1983 outdated = self.set('heads((%ln::%ln) and public())', |
1984 outdated = unfi.set('heads((%ln::%ln) and public())', |
1984 droots, cheads) |
1985 droots, cheads) |
1985 for newremotehead in outdated: |
1986 for newremotehead in outdated: |
1986 r = remote.pushkey('phases', |
1987 r = remote.pushkey('phases', |
1987 newremotehead.hex(), |
1988 newremotehead.hex(), |
1988 str(phases.draft), |
1989 str(phases.draft), |