// Change to repo dir but save current dir func (r *Repo) Pushd() { if r.popDir != "" { r.callback.Fatalf("Cannot Pushd twice") } oldwd, err := os.Getwd() if err != nil { r.callback.Fatalf("Can't get cwd %v", err) } err = os.Chdir(r.Path) if err != nil { r.callback.Fatalf("Can't chdir %v", err) } r.popDir = oldwd lfs.ResolveDirs() }
func cloneCommand(cmd *cobra.Command, args []string) { // We pass all args to git clone err := git.CloneWithoutFilters(args) if err != nil { Exit("Error(s) during clone:\n%v", err) } // now execute pull (need to be inside dir) cwd, err := os.Getwd() if err != nil { Exit("Unable to derive current working dir: %v", err) } // Either the last argument was a relative or local dir, or we have to // derive it from the clone URL clonedir, err := filepath.Abs(args[len(args)-1]) if err != nil || !lfs.DirExists(clonedir) { // Derive from clone URL instead base := path.Base(args[len(args)-1]) if strings.HasSuffix(base, ".git") { base = base[:len(base)-4] } clonedir, _ = filepath.Abs(base) if !lfs.DirExists(clonedir) { Exit("Unable to find clone dir at %q", clonedir) } } err = os.Chdir(clonedir) if err != nil { Exit("Unable to change directory to clone dir %q: %v", clonedir, err) } // Make sure we pop back to dir we started in at the end defer os.Chdir(cwd) // Also need to derive dirs now lfs.ResolveDirs() requireInRepo() // Now just call pull with default args lfs.Config.CurrentRemote = "origin" // always origin after clone pull(nil, nil) }