Skip to content

checkout of a specific branch, tag or revision does not work #1930

Open
@sassman

Description

@sassman

Current behavior 😯

In cargo-generate/cargo-generate#1460 we try to get away from git2 and migrate to gix. It looks all promising so far, only one thing does not work. It is checking out a specific branch, tag or revision.

What gix does, (see the code https://github.com/cargo-generate/cargo-generate/pull/1460/files#diff-dbcccd0cf247f619f177ddeb85fe8dfc4eb4c71c0de0bb47ec839764c7d4918dR82) it checks out the default branch (in our test case it is main).

Expected behavior 🤔

when we configure the prepare_clone with the refsepc like in https://github.com/cargo-generate/cargo-generate/pull/1460/files#diff-dbcccd0cf247f619f177ddeb85fe8dfc4eb4c71c0de0bb47ec839764c7d4918dR72

or here the excerpt:

        let (mut prepare_checkout, _) = if let Some(branch) = self.branch {
            let mut opts = Options::default();
            let ref_spec = gix::refspec::parse(branch.as_str().into(), Operation::Fetch).unwrap();
            dbg!(ref_spec);
            opts.extra_refspecs.push(ref_spec.to_owned());

            prepare_clone.with_fetch_options(opts)

Then I would expect that calling

        let (repo, _) = prepare_checkout
            .main_worktree(gix::progress::Discard, &gix::interrupt::IS_INTERRUPTED)?;

would check out the specific branch, tag or revision.

Git behavior

git2 has a .checkout_tree that does behave exactly as described above

here is some sample code: https://github.com/cargo-generate/cargo-generate/blob/0e9471d4991764270de8940c7695d13f932c086b/src/git/clone_tool.rs#L183

Steps to reproduce 🕹

  1. in cargo-generate you can checkout the PR The kstring integration in gix-attributes is unsound #1460 (gh pr checkout 1460)
  2. let the tests run simply cargo test
  3. all failing tests (2) relate to this problem
  gix::tests::test_cloning_a_repo_at_revision
  gix::tests::test_cloning_a_repo_with_a_specific_branch

Metadata

Metadata

Assignees

No one assigned

    Labels

    acknowledgedan issue is accepted as shortcoming to be fixedwontfixThis will not be worked on

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions