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, )
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
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)
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)
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)
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)
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)