예제 #1
0
def test_rev_options_to_display() -> None:
    """
    Test RevOptions.to_display().
    """
    # The choice of VersionControl class doesn't matter here since
    # the implementation is the same for all of them.
    rev_options = RevOptions(Git)
    assert rev_options.to_display() == ""

    rev_options = RevOptions(Git, "master")
    assert rev_options.to_display() == " (to revision master)"
예제 #2
0
    def fetch_new(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None:
        rev_display = rev_options.to_display()
        logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest))
        if self.get_git_version() >= (2, 17):
            # Git added support for partial clone in 2.17
            # https://git-scm.com/docs/partial-clone
            # Speeds up cloning by functioning without a complete copy of repository
            self.run_command(
                make_command(
                    "clone",
                    "--filter=blob:none",
                    "-q",
                    url,
                    dest,
                )
            )
        else:
            self.run_command(make_command("clone", "-q", url, dest))

        if rev_options.rev:
            # Then a specific revision was requested.
            rev_options = self.resolve_revision(dest, url, rev_options)
            branch_name = getattr(rev_options, "branch_name", None)
            logger.debug("Rev options %s, branch_name %s", rev_options, branch_name)
            if branch_name is None:
                # Only do a checkout if the current commit id doesn't match
                # the requested revision.
                if not self.is_commit_id_equal(dest, rev_options.rev):
                    cmd_args = make_command(
                        "checkout",
                        "-q",
                        rev_options.to_args(),
                    )
                    self.run_command(cmd_args, cwd=dest)
            elif self.get_current_branch(dest) != branch_name:
                # Then a specific branch was requested, and that branch
                # is not yet checked out.
                track_branch = f"origin/{branch_name}"
                cmd_args = [
                    "checkout",
                    "-b",
                    branch_name,
                    "--track",
                    track_branch,
                ]
                self.run_command(cmd_args, cwd=dest)
        else:
            sha = self.get_revision(dest)
            rev_options = rev_options.make_new(sha)

        logger.info("Resolved %s to commit %s", url, rev_options.rev)

        #: repo may contain submodules
        self.update_submodules(dest)
예제 #3
0
 def fetch_new(self, dest: str, url: HiddenText,
               rev_options: RevOptions) -> None:
     rev_display = rev_options.to_display()
     logger.info(
         "Checking out %s%s to %s",
         url,
         rev_display,
         display_path(dest),
     )
     cmd_args = make_command("branch", "-q", rev_options.to_args(), url,
                             dest)
     self.run_command(cmd_args)
예제 #4
0
 def fetch_new(self, dest: str, url: HiddenText,
               rev_options: RevOptions) -> None:
     rev_display = rev_options.to_display()
     logger.info(
         "Cloning hg %s%s to %s",
         url,
         rev_display,
         display_path(dest),
     )
     self.run_command(make_command("clone", "--noupdate", "-q", url, dest))
     self.run_command(
         make_command("update", "-q", rev_options.to_args()),
         cwd=dest,
     )
예제 #5
0
 def fetch_new(self, dest: str, url: HiddenText, rev_options: RevOptions,
               verbosity: int) -> None:
     rev_display = rev_options.to_display()
     logger.info(
         "Checking out %s%s to %s",
         url,
         rev_display,
         display_path(dest),
     )
     if verbosity <= 0:
         flag = "--quiet"
     elif verbosity == 1:
         flag = ""
     else:
         flag = f"-{'v'*verbosity}"
     cmd_args = make_command("branch", flag, rev_options.to_args(), url,
                             dest)
     self.run_command(cmd_args)
예제 #6
0
 def fetch_new(self, dest: str, url: HiddenText, rev_options: RevOptions,
               verbosity: int) -> None:
     rev_display = rev_options.to_display()
     logger.info(
         "Checking out %s%s to %s",
         url,
         rev_display,
         display_path(dest),
     )
     if verbosity <= 0:
         flag = "--quiet"
     else:
         flag = ""
     cmd_args = make_command(
         "checkout",
         flag,
         self.get_remote_call_options(),
         rev_options.to_args(),
         url,
         dest,
     )
     self.run_command(cmd_args)
예제 #7
0
 def fetch_new(
     self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int
 ) -> None:
     rev_display = rev_options.to_display()
     logger.info(
         "Cloning hg %s%s to %s",
         url,
         rev_display,
         display_path(dest),
     )
     if verbosity <= 0:
         flags: Tuple[str, ...] = ("--quiet",)
     elif verbosity == 1:
         flags = ()
     elif verbosity == 2:
         flags = ("--verbose",)
     else:
         flags = ("--verbose", "--debug")
     self.run_command(make_command("clone", "--noupdate", *flags, url, dest))
     self.run_command(
         make_command("update", *flags, rev_options.to_args()),
         cwd=dest,
     )