manifest.py revision 123
0N/A# The contents of this file are subject to the terms of the 0N/A# Common Development and Distribution License (the "License"). 0N/A# You may not use this file except in compliance with the License. 0N/A# See the License for the specific language governing permissions 0N/A# and limitations under the License. 0N/A# When distributing Covered Code, include this CDDL HEADER in each 0N/A# If applicable, add the following below this CDDL HEADER, with the 0N/A# fields enclosed by brackets "[]" replaced with your own identifying 0N/A# information: Portions Copyright [yyyy] [name of copyright owner] 0N/A# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 0N/A# Use is subject to license terms. 0N/A# The type member is used for the ordering of actions. """A Manifest is the representation of the actions composing a specific package version on both the client and the repository. Both purposes utilize the same storage format. The serialized structure of a manifest is an unordered list of package attributes, followed by an unordered list of actions (such as files to The special action, "set", represents an attribute setting. The reserved attribute, "fmri", represents the package and version described by this manifest. It is available as a string via the attributes dictionary, and as an FMRI object from the fmri member. The list of manifest-wide reserved attributes is base_directory Default base directory, for non-user images. isa Package is intended for a list of ISAs. licenses Package contains software available under a list platform Package is intended for a list of platforms. relocatable Suitable for User Image. All non-prefixed attributes are reserved to the framework. Third parties may prefix their attributes with a reversed domain name, domain name, or stock symbol. An example might be as an indicator that a specific package version is supported by the manifest.null is provided as the null manifest. Differences against the null manifest result in the complete set of attributes and actions of the non-null manifest, meaning that all operations can be viewed as tranitions between the manifest being installed and the manifest already present in the image (which may be the null manifest). """Return a list of action pairs representing origin and # XXX Do we need to find some way to assert that the keys are # XXX Do changed actions need to be sorted at all? This is # likely to be the largest list, so we might save significant # time by not sorting. Should we sort above? Insert into a # singlesort = lambda x: x[0] or x[1] """Output expects that self is newer than other. Use of sets requires that we convert the action objects into some marshalled form, otherwise set member identities are derived from the object pointers, rather than the contents.""" """Filter out actions from the manifest based on filters.""" """Find actions in the manifest which are duplicates (i.e., represent the same object) but which are not identical (i.e., have all the same attributes).""" """Return a key on which actions can be sorted.""" """str is the text representation of the manifest""" # So we could build up here the type/key_attr dictionaries like # sdict and odict in difference() above, and have that be our # main datastore, rather than the simple list we have now. If # we do that here, we can even assert that the "same" action # can't be in a manifest twice. (The problem of having the same # action more than once in packages that can be installed # together has to be solved somewhere else, though.) "unknown action '%s'" % l.
split()[
0]
file fff555fff mode=0555 owner=sch group=staff path=/usr/bin/i386/sort isa=i386 file fff555ff9 mode=0555 owner=sch group=staff path=/usr/bin/i386/sort isa=i386 file eeeaaaeee mode=0555 owner=sch group=staff path=/usr/bin/amd64/sort isa=amd64 file ff555fff mode=0555 owner=root group=bin path=/kernel/drv/foo isa=i386 dir mode=0755 owner=root group=sys path=/bin file 00000000 mode=0644 owner=root group=sys path=/bin/change file 00000001 mode=0644 owner=root group=sys path=/bin/nochange dir mode=0755 owner=root group=sys path=/bin file 0000000f mode=0644 owner=root group=sys path=/bin/change file 00000001 mode=0644 owner=root group=sys path=/bin/nochange file 00000003 mode=0644 owner=root group=sys path=/bin/wasadded print "\n" +
50 *
"=" +
"\n" print "\n" +
50 *
"=" +
"\n" # Test the duplicate search. /bin shouldn't show up, since they're # identical actions, but /usr should show up three times. dir mode=0755 owner=root group=sys path=/bin dir mode=0755 owner=root group=sys path=/bin dir mode=0755 owner=root group=sys path=/usr dir mode=0755 owner=root group=root path=/usr dir mode=0755 owner=bin group=sys path=/usr