| package repo |
| |
| import ( |
| "sync" |
| ) |
| |
| // UpdateTracker holds a list of all the packages that have been updated from |
| // an external source. This is a concurrency safe implementation. |
| type UpdateTracker struct { |
| sync.RWMutex |
| |
| updated map[string]bool |
| } |
| |
| // NewUpdateTracker creates a new instance of UpdateTracker ready for use. |
| func NewUpdateTracker() *UpdateTracker { |
| u := &UpdateTracker{} |
| u.updated = map[string]bool{} |
| return u |
| } |
| |
| // Add adds a name to the list of items being tracked. |
| func (u *UpdateTracker) Add(name string) { |
| u.Lock() |
| u.updated[name] = true |
| u.Unlock() |
| } |
| |
| // Check returns if an item is on the list or not. |
| func (u *UpdateTracker) Check(name string) bool { |
| u.RLock() |
| _, f := u.updated[name] |
| u.RUnlock() |
| return f |
| } |
| |
| // Remove takes a package off the list |
| func (u *UpdateTracker) Remove(name string) { |
| u.Lock() |
| delete(u.updated, name) |
| u.Unlock() |
| } |