// CharmEvent returns the most recent event associated with url // and digest. If the specified event isn't found the error // ErrUnknownChange will be returned. If digest is empty, any // digest will match. func (s *Store) CharmEvent(url *charm.URL, digest string) (*CharmEvent, error) { // TODO: It'd actually make sense to find the charm event after the // revision id, but since we don't care about that now, just make sure // we don't write bad code. if err := mustLackRevision("CharmEvent", url); err != nil { return nil, err } session := s.session.Copy() defer session.Close() events := session.Events() event := &CharmEvent{Digest: digest} var query *mgo.Query if digest == "" { query = events.Find(bson.D{{"urls", url}}) } else { query = events.Find(bson.D{{"urls", url}, {"digest", digest}}) } err := query.Sort("-time").One(&event) if err == mgo.ErrNotFound { return nil, ErrNotFound } if err != nil { return nil, err } return event, nil }
func usergroupSort(q *mgo.Query, sortFields []string) { if len(sortFields) > 0 { q.Sort(sortFields...) return } q.Sort("-_id") }