|  | 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() | 
|  | } |