api: replace generated Created/Updated timestamps with commit properties
This commit is contained in:
parent
818a93de1b
commit
b21cd5585d
42
api.go
42
api.go
@ -6,6 +6,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
@ -189,20 +190,55 @@ func (this *Application) repos(ctx context.Context) ([]Repo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(page) == 0 && len(ret) > 0 {
|
if len(page) == 0 && len(ret) > 0 {
|
||||||
return ret, nil // Found enough already
|
break // Found enough already
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = append(ret, page...)
|
ret = append(ret, page...)
|
||||||
nextPage += 1
|
nextPage += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The Created/Modified times aren't very good
|
||||||
|
// Replace them with the earliest/latest commit dates we can find
|
||||||
|
|
||||||
|
for i, rr := range ret {
|
||||||
|
|
||||||
|
// The most recent commit will be the head of one of the branches (easy to find)
|
||||||
|
|
||||||
|
brs, err := this.branches(ctx, rr.Name)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("loading branches for '%s': %s", rr.Name, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newestCommit := time.Unix(0, 0) // sentinel
|
||||||
|
for _, br := range brs {
|
||||||
|
if br.Commit.Timestamp.After(newestCommit) {
|
||||||
|
newestCommit = br.Commit.Timestamp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !newestCommit.Equal(time.Unix(0, 0)) {
|
||||||
|
ret[i].UpdatedAt = newestCommit // replace it
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Separate loop for oldest-commits, in case we needed to continue/break out
|
||||||
|
// of the earliest-commit loop
|
||||||
|
|
||||||
|
for i, rr := range ret {
|
||||||
|
|
||||||
|
// The oldest commit needs us to page through the commit history to find it
|
||||||
|
|
||||||
|
oldestCommit, err := this.oldestCommit(ctx, rr.Name, "")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("finding oldest commit for '%s': %s", rr.Name, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret[i].CreatedAt = oldestCommit.Commit.Author.Date
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
// repoFile gets a single file from the default branch of the git repository
|
// repoFile gets a single file from the default branch of the git repository
|
||||||
// Usually the default branch is `master`.
|
// Usually the default branch is `master`.
|
||||||
|
Loading…
Reference in New Issue
Block a user