// logPreviousVersions scans history for all previous versions of LFS pointers // from 'since' up to (but not including) the final state at ref func logPreviousSHAs(ref string, since time.Time) (chan *WrappedPointer, error) { logArgs := []string{"log", fmt.Sprintf("--since=%v", git.FormatGitDate(since)), } // Add standard search args to find lfs references logArgs = append(logArgs, logLfsSearchArgs...) // ending at ref logArgs = append(logArgs, ref) cmd, err := startCommand("git", logArgs...) if err != nil { return nil, err } cmd.Stdin.Close() pchan := make(chan *WrappedPointer, chanBufSize) // we pull out deletions, since we want the previous SHAs at commits in the range // this means we pick up all previous versions that could have been checked // out in the date range, not just if the commit which *introduced* them is in the range go parseLogOutputToPointers(cmd.Stdout, LogDiffDeletions, nil, nil, pchan) return pchan, nil }
func commitAtDate(atDate time.Time, committerName, committerEmail, msg string) error { var args []string if committerName != "" && committerEmail != "" { args = append(args, "-c", fmt.Sprintf("user.name=%v", committerName)) args = append(args, "-c", fmt.Sprintf("user.email=%v", committerEmail)) } args = append(args, "commit", "--allow-empty", "-m", msg) cmd := exec.Command("git", args...) env := os.Environ() // set GIT_COMMITTER_DATE environment var e.g. "Fri Jun 21 20:26:41 2013 +0900" if atDate.IsZero() { env = append(env, "GIT_COMMITTER_DATE=") } else { env = append(env, fmt.Sprintf("GIT_COMMITTER_DATE=%v", git.FormatGitDate(atDate))) } cmd.Env = env out, err := cmd.CombinedOutput() if err != nil { return fmt.Errorf("%v %v", err, string(out)) } return nil }
// logPreviousVersions scans history for all previous versions of LFS pointers // from 'since' up to (but not including) the final state at ref func logPreviousSHAs(ref string, since time.Time) (*PointerChannelWrapper, error) { logArgs := []string{"log", fmt.Sprintf("--since=%v", git.FormatGitDate(since)), } // Add standard search args to find lfs references logArgs = append(logArgs, logLfsSearchArgs...) // ending at ref logArgs = append(logArgs, ref) cmd, err := startCommand("git", logArgs...) if err != nil { return nil, err } cmd.Stdin.Close() pchan := make(chan *WrappedPointer, chanBufSize) errchan := make(chan error, 1) // we pull out deletions, since we want the previous SHAs at commits in the range // this means we pick up all previous versions that could have been checked // out in the date range, not just if the commit which *introduced* them is in the range go func() { parseLogOutputToPointers(cmd.Stdout, LogDiffDeletions, nil, nil, pchan) stderr, _ := ioutil.ReadAll(cmd.Stderr) err := cmd.Wait() if err != nil { errchan <- fmt.Errorf("Error in git log: %v %v", err, string(stderr)) } close(pchan) close(errchan) }() return NewPointerChannelWrapper(pchan, errchan), nil }