2014-07-26 00:24:27 -04:00
|
|
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package git
|
|
|
|
|
|
|
|
import (
|
2014-07-26 02:28:04 -04:00
|
|
|
"bytes"
|
|
|
|
"container/list"
|
2015-07-26 07:22:17 -04:00
|
|
|
"fmt"
|
2014-10-06 17:50:00 -04:00
|
|
|
"os"
|
2014-07-26 00:24:27 -04:00
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
const prettyLogFormat = `--pretty=format:%H`
|
|
|
|
|
2014-07-26 02:28:04 -04:00
|
|
|
func parsePrettyFormatLog(repo *Repository, logByts []byte) (*list.List, error) {
|
|
|
|
l := list.New()
|
|
|
|
if len(logByts) == 0 {
|
|
|
|
return l, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
parts := bytes.Split(logByts, []byte{'\n'})
|
|
|
|
|
|
|
|
for _, commitId := range parts {
|
|
|
|
commit, err := repo.GetCommit(string(commitId))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
l.PushBack(commit)
|
|
|
|
}
|
|
|
|
|
|
|
|
return l, nil
|
|
|
|
}
|
|
|
|
|
2014-07-26 00:24:27 -04:00
|
|
|
func RefEndName(refStr string) string {
|
2015-11-18 18:31:55 -05:00
|
|
|
if strings.HasPrefix(refStr, "refs/heads/") {
|
2015-11-18 19:05:27 -05:00
|
|
|
// trim the "refs/heads/"
|
2015-11-18 19:10:44 -05:00
|
|
|
return refStr[len("refs/heads/"):]
|
2015-11-18 18:31:55 -05:00
|
|
|
}
|
|
|
|
|
2014-07-26 00:24:27 -04:00
|
|
|
index := strings.LastIndex(refStr, "/")
|
|
|
|
if index != -1 {
|
|
|
|
return refStr[index+1:]
|
|
|
|
}
|
|
|
|
return refStr
|
|
|
|
}
|
|
|
|
|
|
|
|
// If the object is stored in its own file (i.e not in a pack file),
|
|
|
|
// this function returns the full path to the object file.
|
|
|
|
// It does not test if the file exists.
|
|
|
|
func filepathFromSHA1(rootdir, sha1 string) string {
|
|
|
|
return filepath.Join(rootdir, "objects", sha1[:2], sha1[2:])
|
|
|
|
}
|
2014-10-06 17:50:00 -04:00
|
|
|
|
|
|
|
// isDir returns true if given path is a directory,
|
|
|
|
// or returns false when it's a file or does not exist.
|
|
|
|
func isDir(dir string) bool {
|
|
|
|
f, e := os.Stat(dir)
|
|
|
|
if e != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return f.IsDir()
|
|
|
|
}
|
|
|
|
|
|
|
|
// isFile returns true if given path is a file,
|
|
|
|
// or returns false when it's a directory or does not exist.
|
|
|
|
func isFile(filePath string) bool {
|
|
|
|
f, e := os.Stat(filePath)
|
|
|
|
if e != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return !f.IsDir()
|
|
|
|
}
|
2015-07-26 07:22:17 -04:00
|
|
|
|
|
|
|
func concatenateError(err error, stderr string) error {
|
|
|
|
if len(stderr) == 0 {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return fmt.Errorf("%v: %s", err, stderr)
|
|
|
|
}
|