Loading bin/is +16 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,13 @@ def c_new(args): ''' SourceImage.create(args.path, args.force) def c_payload(args): ''' List payloads ''' repoman = load_repositories(args) repoman.show_payloads(args.payload, o_images=args.images, o_json=args.json) def c_prepare_chroot(args): ''' Helper to prepare a path to be chrooted Loading Loading @@ -603,6 +610,15 @@ def arg_parser_init(): help="overwrite existing source image") p.add_argument("path", help="new image directory path") p.set_defaults(func=c_new) # payload command parser p = subparser.add_parser("payload", help=c_payload.__doc__.lower()) p.add_argument("-j", "--json", action="store_true", help="output is formated in json") p.add_argument("-i", "--images", action="store_true", help="list images using payload") p.add_argument("payload", nargs='*', default=[""], help="payload md5 pattern") p.set_defaults(func=c_payload) # prepare_chroot command parser p = subparser.add_parser("prepare_chroot", help=c_prepare_chroot.__doc__.lower()) Loading completion/bash/is +4 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ _is() { _get_first_arg cmds=('add' 'build' 'cat' 'changelog' 'check' 'chroot' 'clean' 'copy' 'del' 'extract' 'get' 'help' 'info' 'init' 'install' 'list' 'move' 'new' 'repo' 'search' 'version' 'diff' 'prepare_chroot' 'unprepare_chroot') 'search' 'version' 'diff' 'payload' 'prepare_chroot' 'unprepare_chroot') opts=('-h' '--help' '-V' '--version' '-v' '--verbosity' Loading Loading @@ -152,6 +152,9 @@ _is() { [[ "$cur" == -* ]] && _opt '-h --help -f --force' && return 0 _filedir -d ;; payload) [[ "$cur" == -* ]] && _opt '-h --help -j --json -i --images' && return 0 ;; prepare_chroot) [[ "$cur" == -* ]] && _opt '-h --help -m --no-mount' && return 0 _filedir -d Loading installsystems/repository.py +69 −0 Original line number Diff line number Diff line Loading @@ -376,6 +376,25 @@ class Repository(object): images.append(d) return images def payloads(self): ''' Return a dict of informations on payloads ''' db_payloads = self.db.ask("SELECT payload.md5,payload.size,payload.isdir,image.name,image.version,payload.name FROM payload inner join image on payload.image_md5 = image.md5").fetchall() res = {} for payload in db_payloads: md5 = payload[0] # create entry if not exists if md5 not in res: res[md5] = {"size": payload[1], "isdir": payload[2], "images": {}} # add image to list imgpath = "%s/%s:%s" % (self.config.name, payload[3], payload[4]) res[md5]["images"][imgpath] = {"repo": self.config.name, "imgname": payload[3], "imgver": payload[4], "payname": payload[5]} return res def search(self, pattern): ''' Search pattern in a repository Loading Loading @@ -742,6 +761,56 @@ class RepositoryManager(object): if len(s) > 0: out(s) def select_payloads(self, pattern): ''' Return a list of available payloads ''' if len(self.onlines) == 0: raise Exception("No online repository") # building payload list paylist = {} for reponame in self.onlines: for md5, info in self[reponame].payloads().items(): if md5 not in paylist: paylist[md5] = info else: paylist[md5]["images"].update(info["images"]) # check if pattern is md5 startpath if pattern is not None: for md5 in paylist.keys(): if not md5.startswith(pattern): del paylist[md5] return paylist def show_payloads(self, patterns, o_images=False, o_json=False): ''' Show payloads inside manager ''' # get payload list payloads = {} for pattern in patterns: payloads.update(self.select_payloads(pattern)) # display result if o_json: s = json.dumps(payloads) else: l = [] for payname in sorted(payloads.keys()): pay = payloads[payname] l.append(u"#l##y#%s#R#" % payname) l.append(u" size: %s" % istools.human_size(pay["size"])) l.append(u" directory: %s" % bool(pay["isdir"])) l.append(u" image count: %d" % len(pay["images"])) l.append(u" names: %s" % ", ".join(set((v["payname"] for v in pay["images"].values())))) if o_images: l.append(u" images:") for path, obj in pay["images"].items(): l.append(u" %s#R#/#l##b#%s#R#:#p#%s#R# (%s)" % ( obj["repo"], obj["imgname"], obj["imgver"], obj["payname"])) s = os.linesep.join(l) if len(s) > 0: out(s) def purge_cache(self, pattern): ''' Remove local cached repository files Loading Loading
bin/is +16 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,13 @@ def c_new(args): ''' SourceImage.create(args.path, args.force) def c_payload(args): ''' List payloads ''' repoman = load_repositories(args) repoman.show_payloads(args.payload, o_images=args.images, o_json=args.json) def c_prepare_chroot(args): ''' Helper to prepare a path to be chrooted Loading Loading @@ -603,6 +610,15 @@ def arg_parser_init(): help="overwrite existing source image") p.add_argument("path", help="new image directory path") p.set_defaults(func=c_new) # payload command parser p = subparser.add_parser("payload", help=c_payload.__doc__.lower()) p.add_argument("-j", "--json", action="store_true", help="output is formated in json") p.add_argument("-i", "--images", action="store_true", help="list images using payload") p.add_argument("payload", nargs='*', default=[""], help="payload md5 pattern") p.set_defaults(func=c_payload) # prepare_chroot command parser p = subparser.add_parser("prepare_chroot", help=c_prepare_chroot.__doc__.lower()) Loading
completion/bash/is +4 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ _is() { _get_first_arg cmds=('add' 'build' 'cat' 'changelog' 'check' 'chroot' 'clean' 'copy' 'del' 'extract' 'get' 'help' 'info' 'init' 'install' 'list' 'move' 'new' 'repo' 'search' 'version' 'diff' 'prepare_chroot' 'unprepare_chroot') 'search' 'version' 'diff' 'payload' 'prepare_chroot' 'unprepare_chroot') opts=('-h' '--help' '-V' '--version' '-v' '--verbosity' Loading Loading @@ -152,6 +152,9 @@ _is() { [[ "$cur" == -* ]] && _opt '-h --help -f --force' && return 0 _filedir -d ;; payload) [[ "$cur" == -* ]] && _opt '-h --help -j --json -i --images' && return 0 ;; prepare_chroot) [[ "$cur" == -* ]] && _opt '-h --help -m --no-mount' && return 0 _filedir -d Loading
installsystems/repository.py +69 −0 Original line number Diff line number Diff line Loading @@ -376,6 +376,25 @@ class Repository(object): images.append(d) return images def payloads(self): ''' Return a dict of informations on payloads ''' db_payloads = self.db.ask("SELECT payload.md5,payload.size,payload.isdir,image.name,image.version,payload.name FROM payload inner join image on payload.image_md5 = image.md5").fetchall() res = {} for payload in db_payloads: md5 = payload[0] # create entry if not exists if md5 not in res: res[md5] = {"size": payload[1], "isdir": payload[2], "images": {}} # add image to list imgpath = "%s/%s:%s" % (self.config.name, payload[3], payload[4]) res[md5]["images"][imgpath] = {"repo": self.config.name, "imgname": payload[3], "imgver": payload[4], "payname": payload[5]} return res def search(self, pattern): ''' Search pattern in a repository Loading Loading @@ -742,6 +761,56 @@ class RepositoryManager(object): if len(s) > 0: out(s) def select_payloads(self, pattern): ''' Return a list of available payloads ''' if len(self.onlines) == 0: raise Exception("No online repository") # building payload list paylist = {} for reponame in self.onlines: for md5, info in self[reponame].payloads().items(): if md5 not in paylist: paylist[md5] = info else: paylist[md5]["images"].update(info["images"]) # check if pattern is md5 startpath if pattern is not None: for md5 in paylist.keys(): if not md5.startswith(pattern): del paylist[md5] return paylist def show_payloads(self, patterns, o_images=False, o_json=False): ''' Show payloads inside manager ''' # get payload list payloads = {} for pattern in patterns: payloads.update(self.select_payloads(pattern)) # display result if o_json: s = json.dumps(payloads) else: l = [] for payname in sorted(payloads.keys()): pay = payloads[payname] l.append(u"#l##y#%s#R#" % payname) l.append(u" size: %s" % istools.human_size(pay["size"])) l.append(u" directory: %s" % bool(pay["isdir"])) l.append(u" image count: %d" % len(pay["images"])) l.append(u" names: %s" % ", ".join(set((v["payname"] for v in pay["images"].values())))) if o_images: l.append(u" images:") for path, obj in pay["images"].items(): l.append(u" %s#R#/#l##b#%s#R#:#p#%s#R# (%s)" % ( obj["repo"], obj["imgname"], obj["imgver"], obj["payname"])) s = os.linesep.join(l) if len(s) > 0: out(s) def purge_cache(self, pattern): ''' Remove local cached repository files Loading