GithubHelp home page GithubHelp logo

Oxidize `comtrya` about gitoxide HOT 4 OPEN

Byron avatar Byron commented on August 14, 2024
Oxidize `comtrya`

from gitoxide.

Comments (4)

rawkode avatar rawkode commented on August 14, 2024

Scratch that, let me try and implement this again and see what happens.

from gitoxide.

rawkode avatar rawkode commented on August 14, 2024

Hi @Byron,

I've updated GitSync to (which Comtrya uses) to use this for clone_repository()

    fn clone_repository(&self) -> Result<(), errors::GitSyncError> {
        info!("Attempting to clone {} to {:?}", self.repo, self.dir,);

        unsafe {
            match gix::interrupt::init_handler(1, || {}) {
                Ok(_) => (),
                Err(error) => {
                    return Err(GitSyncError::GenericError { error });
                }
            };
        }

        if !self.dir.exists() {
            match std::fs::create_dir_all(&self.dir) {
                Ok(_) => {}
                Err(error) => {
                    return Err(GitSyncError::GenericError { error });
                }
            }
        }

        let url = match gix::url::parse(self.repo.as_str().into()) {
            Ok(url) => url,
            Err(error) => {
                return Err(GitSyncError::GixParseError { error });
            }
        };

        let mut prepare_clone = match gix::prepare_clone(url, &self.dir) {
            Ok(prepared_fetch) => prepared_fetch,
            Err(error) => {
                return Err(GitSyncError::GixCloneError { error });
            }
        };

        let (mut prepare_checkout, _) = match prepare_clone
            .fetch_then_checkout(gix::progress::Discard, &gix::interrupt::IS_INTERRUPTED)
        {
            Ok(checkout) => checkout,
            Err(error) => {
                return Err(GitSyncError::GixCloneFetchError { error });
            }
        };

        match prepare_checkout
            .main_worktree(gix::progress::Discard, &gix::interrupt::IS_INTERRUPTED)
        {
            Ok(repository) => repository,
            Err(error) => {
                return Err(GitSyncError::GixCloneCheckoutError { error });
            }
        };

        Ok(())
    }

and this works well.

We also have a sync function, which is using gix::open(); but I can't work out how to fetch_then_checkout on an existing repository.

I've also tried just using clone_repository with the dir being the existing checkout, but it doesn't seem like HEAD is updated.

Any advice?

from gitoxide.

rawkode avatar rawkode commented on August 14, 2024

Draft PR

rawkode/gitsync#4

from gitoxide.

Byron avatar Byron commented on August 14, 2024

Thanks for trying it out!

and this works well.

Is the question-mark operation ? forbidden in your codebase? I am pretty sure clippy would take offence in not using it -error-handling seems unnecessarily verbose. Since it's an application, I'd recommend anyhow as well.

We also have a sync function, which is using gix::open(); but I can't work out how to fetch_then_checkout on an existing repository.

One cannot yet checkout into an existing repository, and I'd hope it refuses to do so into an existing non-empty directory as it would bluntly overwrite everything. It's only possible to checkout the initial clone.

It will take a while until git reset/checkout are possible, but this PR and it's follow-ups will lead there.

from gitoxide.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.