// allLocalSnapInfos returns the information about the all current snaps and their SnapStates. func allLocalSnapInfos(st *state.State) ([]aboutSnap, error) { st.Lock() defer st.Unlock() snapStates, err := snapstate.All(st) if err != nil { return nil, err } about := make([]aboutSnap, 0, len(snapStates)) var firstErr error for name, snapState := range snapStates { info, err := snap.ReadInfo(name, snapState.Current()) if err != nil { // XXX: aggregate instead? if firstErr == nil { firstErr = err } continue } about = append(about, aboutSnap{info, snapState}) } return about, firstErr }
func (s *snapmgrQuerySuite) TestAll(c *C) { st := s.st st.Lock() defer st.Unlock() snapStates, err := snapstate.All(st) c.Assert(err, IsNil) c.Check(snapStates, HasLen, 1) var snapst *snapstate.SnapState for name, sst := range snapStates { c.Assert(name, Equals, "name1") snapst = sst } c.Check(snapst.Active, Equals, true) c.Check(snapst.Current(), NotNil) info12, err := snap.ReadInfo("name1", snapst.Current()) c.Assert(err, IsNil) c.Check(info12.Name(), Equals, "name1") c.Check(info12.Revision, Equals, 12) c.Check(info12.Summary(), Equals, "s12") c.Check(info12.Version, Equals, "1.2") c.Check(info12.Description(), Equals, "Lots of text") info11, err := snap.ReadInfo("name1", snapst.Sequence[0]) c.Assert(err, IsNil) c.Check(info11.Name(), Equals, "name1") c.Check(info11.Revision, Equals, 11) c.Check(info11.Version, Equals, "1.1") }
// localSnapInfo returns the information about the current snap for the given name plus the SnapState with the active flag and other snap revisions. func localSnapInfo(st *state.State, name string) (info *snap.Info, active bool, err error) { st.Lock() defer st.Unlock() var snapst snapstate.SnapState err = snapstate.Get(st, name, &snapst) if err != nil && err != state.ErrNoState { return nil, false, fmt.Errorf("cannot consult state: %v", err) } cur := snapst.Current() if cur == nil { return nil, false, nil } info, err = snap.ReadInfo(name, cur) if err != nil { return nil, false, fmt.Errorf("cannot read snap details: %v", err) } return info, snapst.Active, nil }