def setUp(self):
        os.environ["XDG_CACHE_HOME"] = tempfile.mkdtemp(prefix="gs_cache")
        self.repo_dir = tempfile.mkdtemp(prefix="gs_repo")
        self.repo = pygit2.init_repository(self.repo_dir)

        author = pygit2.Signature('Alice Author', '*****@*****.**')
        committer = pygit2.Signature('Cecil Committer', '*****@*****.**')
        tree = self.repo.TreeBuilder().write()

        parent = []
        self.commits = []
        for i in range(3):
            subject = "commit %d" % (i,)
            cid = self.repo.create_commit(
                "refs/heads/master",
                author,
                committer,
                "%s\n\nlog" % (subject,),
                tree,
                parent
            )
            parent = [cid]
            self.commits.append(str(cid))

        self.index = git_sort.SortIndex(self.repo)
Example #2
0
    def setUp(self):
        os.environ["XDG_CACHE_HOME"] = tempfile.mkdtemp(prefix="gs_cache")

        # setup stub linux repository
        os.environ["LINUX_GIT"] = tempfile.mkdtemp(prefix="gs_repo")
        self.repo = pygit2.init_repository(os.environ["LINUX_GIT"])

        author = pygit2.Signature('Alice Author', '*****@*****.**')
        committer = pygit2.Signature('Cecil Committer', '*****@*****.**')
        tree = self.repo.TreeBuilder().write()

        m0 = self.repo.create_commit("refs/heads/mainline", author, committer,
                                     "mainline 0\n\nlog", tree, [])

        n0 = self.repo.create_commit("refs/heads/net", author, committer,
                                     "net 0\n\nlog", tree, [m0])

        self.repo.checkout("refs/heads/mainline")
        m1 = self.repo.create_commit("refs/heads/mainline", author, committer,
                                     "mainline 1, merge net\n\nlog", tree,
                                     [m0, n0])

        m2 = self.repo.create_commit("refs/heads/mainline", author, committer,
                                     "mainline 2\n\nlog", tree, [m1])

        n1 = self.repo.create_commit("refs/heads/net", author, committer,
                                     "net 1\n\nlog", tree, [n0])

        n2 = self.repo.create_commit("refs/heads/net", author, committer,
                                     "net 2\n\nlog", tree, [n1])

        oot0 = self.repo.create_commit("refs/heads/oot", author, committer,
                                       "oot 0\n\nlog", tree, [m0])

        oot1 = self.repo.create_commit("refs/heads/oot", author, committer,
                                       "oot 1\n\nlog", tree, [oot0])

        k_org_canon_prefix = "git://git.kernel.org/pub/scm/linux/kernel/git/"
        origin_repo = k_org_canon_prefix + "torvalds/linux.git"
        self.repo.remotes.create("origin", origin_repo)
        self.repo.references.create("refs/remotes/origin/master", m2)

        net_repo = k_org_canon_prefix + "davem/net.git"
        self.repo.remotes.create("net", net_repo)
        self.repo.references.create("refs/remotes/net/master", n2)

        self.index = git_sort.SortIndex(self.repo)

        # setup stub kernel-source content
        self.ks_dir = tempfile.mkdtemp(prefix="gs_ks")
        patch_dir = os.path.join(self.ks_dir, "patches.suse")
        os.mkdir(patch_dir)
        os.chdir(patch_dir)
        tests.support.format_patch(self.repo.get(m0), mainline="v3.45-rc6")
        tests.support.format_patch(self.repo.get(n0), mainline="v3.45-rc6")
        tests.support.format_patch(self.repo.get(n1), repo=net_repo)
        tests.support.format_patch(self.repo.get(n2), repo=net_repo)
        tests.support.format_patch(self.repo.get(oot0))
        tests.support.format_patch(self.repo.get(oot1))
    def setUp(self):
        os.environ["XDG_CACHE_HOME"] = tempfile.mkdtemp(prefix="gs_cache")
        self.repo_dir = tempfile.mkdtemp(prefix="gs_repo")
        self.repo = pygit2.init_repository(self.repo_dir)

        author = pygit2.Signature('Alice Author', '*****@*****.**')
        committer = pygit2.Signature('Cecil Committer', '*****@*****.**')
        tree = self.repo.TreeBuilder().write()

        self.commits = []
        m0 = self.repo.create_commit(
            "refs/heads/mainline",
            author,
            committer,
            "mainline 0\n\nlog",
            tree,
            []
        )
        self.commits.append(self.repo.get(m0))
        self.repo.create_reference_direct("refs/tags/v4.8", m0, False)
        self.repo.create_tag("v4.9", m0, pygit2.GIT_REF_OID, committer,
                             "Linux 4.9")

        n0 = self.repo.create_commit(
            "refs/heads/net",
            author,
            committer,
            "net 0\n\nlog",
            tree,
            [m0]
        )
        self.commits.append(self.repo.get(n0))

        self.repo.checkout("refs/heads/mainline")

        m1 = self.repo.create_commit(
            "refs/heads/mainline",
            author,
            committer,
            "mainline 1, merge net\n\nlog",
            tree,
            [m0, n0]
        )
        self.repo.create_tag("v4.10", m1, pygit2.GIT_REF_OID, committer,
                             "Linux 4.10")

        self.repo.remotes.create("origin",
                                 "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git")
        self.repo.references.create("refs/remotes/origin/master", m1)

        self.repo.remotes.create("net",
                                 "git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git")
        self.repo.references.create("refs/remotes/net/master", n0)

        self.heads = {"mainline" : str(m1),
                      "net" : str(n0)}
        self.index = git_sort.SortIndex(self.repo)
    def setUp(self):
        os.environ["XDG_CACHE_HOME"] = tempfile.mkdtemp(prefix="gs_cache")

        # setup stub linux repository
        os.environ["LINUX_GIT"] = tempfile.mkdtemp(prefix="gs_repo")
        self.repo = pygit2.init_repository(os.environ["LINUX_GIT"])

        author = pygit2.Signature('Alice Author', '*****@*****.**')
        committer = pygit2.Signature('Cecil Committer', '*****@*****.**')
        tree = self.repo.TreeBuilder().write()

        parent = []
        commits = []
        for i in range(3):
            subject = "mainline %d" % (i, )
            cid = self.repo.create_commit("refs/heads/master", author,
                                          committer, "%s\n\nlog" % (subject, ),
                                          tree, parent)
            parent = [cid]
            commits.append(cid)
        self.commits = commits

        self.repo.remotes.create(
            "origin",
            "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git")
        self.repo.references.create("refs/remotes/origin/master", commits[-1])

        self.index = git_sort.SortIndex(self.repo)

        # setup stub kernel-source content
        self.ks_dir = tempfile.mkdtemp(prefix="gs_ks")
        patch_dir = os.path.join(self.ks_dir, "patches.suse")
        os.mkdir(patch_dir)
        os.chdir(patch_dir)
        for commit in commits:
            tests.support.format_patch(self.repo.get(commit),
                                       mainline="v3.45-rc6")
Example #5
0
        "-u",
        "--upstream",
        action="store_true",
        help="Move patches upstream between subsystem sections "
        "as appropriate. Default: false.")
    parser.add_argument("series",
                        nargs="?",
                        metavar="series.conf",
                        help="series.conf file which will be modified in "
                        "place. Default: if stdin is a terminal, "
                        "\"series.conf\"; otherwise, read input from stdin.")
    args = parser.parse_args()

    repo_path = lib.repo_path()
    repo = pygit2.Repository(repo_path)
    index = git_sort.SortIndex(repo)

    filter_mode = False
    if args.series is None:
        if sys.stdin.isatty():
            path = "series.conf"
        else:
            filter_mode = True
    else:
        path = args.series
    if filter_mode:
        f = sys.stdin
    else:
        try:
            f = open(path)
        except FileNotFoundError as err:
Example #6
0
def sequence_insert(series, rev, top):
    """
    top is the top applied patch, None if none are applied.

    Caller must chdir to where the entries in series can be found.

    Returns the name of the new top patch and how many must be applied/popped.
    """
    git_dir = repo_path()
    repo = pygit2.Repository(git_dir)
    index = git_sort.SortIndex(repo)

    try:
        commit = str(repo.revparse_single(rev).id)
    except ValueError:
        raise exc.KSError("\"%s\" is not a valid revision." % (rev, ))
    except KeyError:
        raise exc.KSError("Revision \"%s\" not found in \"%s\"." % (
            rev,
            git_dir,
        ))

    marker = "# new commit"
    new_entry = InputEntry(marker)
    try:
        new_entry.dest = index.lookup(commit)
    except git_sort.GSKeyError:
        raise exc.KSError(
            "Commit %s not found in git-sort index. If it is from a "
            "repository and branch pair which is not listed in \"remotes\", "
            "please add it and submit a patch." % (commit, ))
    new_entry.dest_head = new_entry.dest.head

    try:
        before, inside, after = series_conf.split(series)
    except exc.KSNotFound as err:
        raise exc.KSError(err)
    before, after = map(series_conf.filter_series, (
        before,
        after,
    ))
    current_patches = flatten(
        [before, series_conf.filter_series(inside), after])

    if top is None:
        top_index = 0
    else:
        top_index = current_patches.index(top) + 1

    input_entries = parse_inside(index, inside, False)
    input_entries.append(new_entry)

    sorted_entries = series_sort(index, input_entries)
    new_patches = flatten([
        before,
        [line.strip() for lines in sorted_entries.values() for line in lines],
        after,
    ])
    commit_pos = new_patches.index(marker)
    if commit_pos == 0:
        # should be inserted first in series
        name = ""
    else:
        name = new_patches[commit_pos - 1]
    del new_patches[commit_pos]

    if new_patches != current_patches:
        raise exc.KSError("Subseries is not sorted. "
                          "Please run scripts/series_sort.py.")

    return (
        name,
        commit_pos - top_index,
    )