示例#1
0
def _asyncsavemetadata(root, nodes):
    """starts a separate process that fills metadata for the nodes

    This function creates a separate process and doesn't wait for it's
    completion. This was done to avoid slowing down pushes
    """

    maxnodes = 50
    if len(nodes) > maxnodes:
        return
    nodesargs = []
    for node in nodes:
        nodesargs.append("--node")
        nodesargs.append(node)
    with open(os.devnull, "w+b") as devnull:
        cmdline = [
            util.hgexecutable(),
            "debugfillinfinitepushmetadata",
            "-R",
            root,
        ] + nodesargs
        # Process will run in background. We don't care about the return code
        subprocess.Popen(
            cmdline,
            close_fds=True,
            shell=False,
            stdin=devnull,
            stdout=devnull,
            stderr=devnull,
        )
示例#2
0
    def _run(
        self,
        cmd,
        cwd=None,
        env=None,
        stderr=False,
        input=None,
        timeout=0,
        returncode=False,
    ):
        """Adapted from fbcode/scm/lib/_repo.py:Repository::run"""
        cmd = [util.hgexecutable(), "-R", self.repo.origroot] + cmd
        stdin = None
        if input:
            stdin = subprocess.PIPE
        p = self._spawn(
            cmd,
            cwd=cwd,
            env=env,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            stdin=stdin,
            timeout=timeout,
        )
        if input:
            if not isinstance(input, bytes):
                input = input.encode("utf-8")
            out, err = p.communicate(input=input)
        else:
            out, err = p.communicate()

        out = decodeutf8(out)
        err = decodeutf8(err)

        if p.returncode != 0 and returncode is False:
            self.ui.warn(_("run call failed!\n"))
            # Sometimes git or hg error output can be very big.
            # Let's limit stderr and stdout to 1000
            OUTPUT_LIMIT = 1000
            out = out[:OUTPUT_LIMIT]
            err = err[:OUTPUT_LIMIT]
            out = "STDOUT: %s\nSTDERR: %s\n" % (out, err)
            cmdstr = " ".join(
                [self._safe_bytes_to_str(entry) for entry in cmd])
            cmdstr += "\n%s" % out
            ex = subprocess.CalledProcessError(p.returncode, cmdstr)
            ex.output = out
            raise ex

        if out and self.printout:
            self.ui.warn(_("stdout: %s\n") % out)
        if err and self.printout:
            self.ui.warn(_("stderr: %s\n") % err)

        if returncode:
            return out, err, p.returncode

        if stderr:
            return out, err, None
        return out, "", None
示例#3
0
文件: repack.py 项目: leszfb/eden
def backgroundrepack(repo, incremental=True):
    cmd = [util.hgexecutable(), "-R", repo.origroot, "repack"]
    msg = _("(running background repack)\n")
    if incremental:
        cmd.append("--incremental")
        msg = _("(running background incremental repack)\n")

    if not repo.ui.quiet:
        repo.ui.write_err(msg)
    util.spawndetached(cmd)
示例#4
0
文件: repack.py 项目: x414e54/eden
def backgroundrepack(repo, incremental=True):
    cmd = [util.hgexecutable(), "-R", repo.origroot, "repack"]
    msg = _("(running background repack)\n")
    if incremental:
        cmd.append("--incremental")
        msg = _("(running background incremental repack)\n")

    cmd = " ".join(map(util.shellquote, cmd))

    repo.ui.status(msg)
    runshellcommand(cmd, encoding.environ)
示例#5
0
        def backgroundprefetch(
            self, revs, base=None, repack=False, pats=None, opts=None
        ):
            """Runs prefetch in background with optional repack"""
            cmd = [util.hgexecutable(), "-R", self.origroot, "prefetch"]
            if repack:
                cmd.append("--repack")
            if revs:
                cmd += ["-r", revs]
            if base:
                cmd += ["-b", base]

            util.spawndetached(cmd)
示例#6
0
        def backgroundprefetch(
            self, revs, base=None, repack=False, pats=None, opts=None
        ):
            """Runs prefetch in background with optional repack
            """
            cmd = [util.hgexecutable(), "-R", self.origroot, "prefetch"]
            if repack:
                cmd.append("--repack")
            if revs:
                cmd += ["-r", revs]
            if base:
                cmd += ["-b", base]
            cmd = " ".join(map(util.shellquote, cmd))

            runshellcommand(cmd, encoding.environ)
示例#7
0
 def _getlog(
     self,
     paths,
     start,
     end,
     limit=0,
     discover_changed_paths=True,
     strict_node_history=False,
 ):
     # Normalize path names, svn >= 1.5 only wants paths relative to
     # supplied URL
     relpaths = []
     for p in paths:
         if not p.startswith("/"):
             p = self.module + "/" + p
         relpaths.append(p.strip("/"))
     args = [
         self.baseurl,
         relpaths,
         start,
         end,
         limit,
         discover_changed_paths,
         strict_node_history,
     ]
     # developer config: convert.svn.debugsvnlog
     if not self.ui.configbool("convert", "svn.debugsvnlog"):
         return directlogstream(*args)
     arg = encodeargs(args)
     hgexe = util.hgexecutable()
     cmd = "%s debugsvnlog" % util.shellquote(hgexe)
     stdin, stdout = util.popen2(util.quotecommand(cmd))
     stdin.write(arg)
     try:
         stdin.close()
     except IOError:
         raise error.Abort(
             _("Mercurial failed to run itself, check" " hg executable is in PATH")
         )
     return logstream(stdout)