aboutsummaryrefslogtreecommitdiffstats
path: root/cache/repo_cache.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2023-01-14 14:49:25 +0100
committerGitHub <noreply@github.com>2023-01-14 14:49:25 +0100
commit6e5ea512ac82972c6e0da78976f967006e5fe5c4 (patch)
tree7727fc721b4bd82fcf7869fb48f9656504cbb3af /cache/repo_cache.go
parenta1eec9aadfa24bad4804edc5fbb1c0753f4690cb (diff)
parent7df34aa7a40be0d7b759ea3ef42cedf9f25f32b2 (diff)
downloadgit-bug-6e5ea512ac82972c6e0da78976f967006e5fe5c4.tar.gz
Merge pull request #987 from MichaelMure/cache-progress-bar
commands: add a nice terminal progress bar when building the cache
Diffstat (limited to 'cache/repo_cache.go')
-rw-r--r--cache/repo_cache.go27
1 files changed, 11 insertions, 16 deletions
diff --git a/cache/repo_cache.go b/cache/repo_cache.go
index 2121d1e4..9e45d1f1 100644
--- a/cache/repo_cache.go
+++ b/cache/repo_cache.go
@@ -30,7 +30,7 @@ var _ repository.RepoKeyring = &RepoCache{}
type cacheMgmt interface {
Typename() string
Load() error
- Build() error
+ Build() <-chan BuildEvent
SetCacheSize(size int)
RemoveAll() error
MergeAll(remote string) <-chan entity.MergeResult
@@ -213,6 +213,7 @@ const (
BuildEventCacheIsBuilt
BuildEventRemoveLock
BuildEventStarted
+ BuildEventProgress
BuildEventFinished
)
@@ -224,6 +225,10 @@ type BuildEvent struct {
Typename string
// Event is the type of the event.
Event BuildEventType
+ // Total is the total number of element being built. Set if Event is BuildEventStarted.
+ Total int64
+ // Progress is the current count of processed element. Set if Event is BuildEventProgress.
+ Progress int64
}
func (c *RepoCache) buildCache(events chan BuildEvent) {
@@ -234,23 +239,13 @@ func (c *RepoCache) buildCache(events chan BuildEvent) {
wg.Add(1)
go func(subcache cacheMgmt) {
defer wg.Done()
- events <- BuildEvent{
- Typename: subcache.Typename(),
- Event: BuildEventStarted,
- }
- err := subcache.Build()
- if err != nil {
- events <- BuildEvent{
- Typename: subcache.Typename(),
- Err: err,
+ buildEvents := subcache.Build()
+ for buildEvent := range buildEvents {
+ events <- buildEvent
+ if buildEvent.Err != nil {
+ return
}
- return
- }
-
- events <- BuildEvent{
- Typename: subcache.Typename(),
- Event: BuildEventFinished,
}
}(subcache)
}