author | Edward Pilatowicz <edward.pilatowicz@oracle.com> |
Mon, 16 Sep 2013 21:26:31 -0700 | |
changeset 2945 | 24196b483cc6 |
parent 2864 | 96d3957712da |
child 2938 | 1d287dc7a674 |
child 2958 | 868e07939116 |
permissions | -rwxr-xr-x |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.6 |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
2 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
4 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
8 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
13 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
19 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
21 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
22 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
23 |
# |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
24 |
# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
25 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
26 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
27 |
PKG_CLIENT_NAME = "pkgrepo" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
28 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
29 |
# pkgrepo exit codes |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
30 |
EXIT_OK = 0 |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
31 |
EXIT_OOPS = 1 |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
32 |
EXIT_BADOPT = 2 |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
33 |
EXIT_PARTIAL = 3 |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
34 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
35 |
# listing constants |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
36 |
LISTING_FORMATS = ("json", "json-formatted", "tsv") |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
37 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
38 |
# globals |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
39 |
tmpdirs = [] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
40 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
41 |
import atexit |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
42 |
import collections |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
43 |
import copy |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
44 |
import errno |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
45 |
import getopt |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
46 |
import gettext |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
47 |
import locale |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
48 |
import logging |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
49 |
import shlex |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
50 |
import shutil |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
51 |
import sys |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
52 |
import tempfile |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
53 |
import textwrap |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
54 |
import traceback |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
55 |
import warnings |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
56 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
57 |
from pkg.client import global_settings |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
58 |
from pkg.client.debugvalues import DebugValues |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
59 |
from pkg.misc import msg, PipeError |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
60 |
import pkg |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
61 |
import pkg.catalog |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
62 |
import pkg.client.api_errors as apx |
2616
3c00fe4465d3
19148 PKG_STATE_* defines need a new home
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents:
2569
diff
changeset
|
63 |
import pkg.client.pkgdefs as pkgdefs |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
64 |
import pkg.client.progress |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
65 |
import pkg.client.publisher as publisher |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
66 |
import pkg.client.transport.transport as transport |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
67 |
import pkg.misc as misc |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
68 |
import pkg.server.repository as sr |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
69 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
70 |
logger = global_settings.logger |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
71 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
72 |
@atexit.register |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
73 |
def cleanup(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
74 |
"""To be called at program finish.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
75 |
for d in tmpdirs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
76 |
shutil.rmtree(d, True) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
77 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
78 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
79 |
def error(text, cmd=None): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
80 |
"""Emit an error message prefixed by the command name """ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
81 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
82 |
if cmd: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
83 |
text = "%s: %s" % (cmd, text) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
84 |
pkg_cmd = "pkgrepo " |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
85 |
else: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
86 |
pkg_cmd = "pkgrepo: " |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
87 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
88 |
# If we get passed something like an Exception, we can convert |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
89 |
# it down to a string. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
90 |
text = str(text) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
91 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
92 |
# If the message starts with whitespace, assume that it should come |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
93 |
# *before* the command-name prefix. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
94 |
text_nows = text.lstrip() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
95 |
ws = text[:len(text) - len(text_nows)] |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
96 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
97 |
# This has to be a constant value as we can't reliably get our actual |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
98 |
# program name on all platforms. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
99 |
logger.error(ws + pkg_cmd + text_nows) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
100 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
101 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
102 |
def get_tracker(quiet=False): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
103 |
if quiet: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
104 |
progtrack = pkg.client.progress.QuietProgressTracker() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
105 |
else: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
106 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
107 |
progtrack = \ |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
108 |
pkg.client.progress.FancyUNIXProgressTracker() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
109 |
except pkg.client.progress.ProgressTrackerException: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
110 |
progtrack = \ |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
111 |
pkg.client.progress.CommandLineProgressTracker() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
112 |
return progtrack |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
113 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
114 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
115 |
def usage(usage_error=None, cmd=None, retcode=2, full=False): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
116 |
"""Emit a usage message and optionally prefix it with a more |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
117 |
specific error message. Causes program to exit. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
118 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
119 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
120 |
if usage_error: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
121 |
error(usage_error, cmd=cmd) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
122 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
123 |
if not full: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
124 |
# The full usage message isn't desired. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
125 |
logger.error(_("Try `pkgrepo --help or -?' for more " |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
126 |
"information.")) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
127 |
sys.exit(retcode) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
128 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
129 |
msg(_("""\ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
130 |
Usage: |
1978
69f2ff97bcd8
16567 pkgrepo help and manpage need to be consistent, and manpage needs publishing
Shawn Walker <shawn.walker@oracle.com>
parents:
1968
diff
changeset
|
131 |
pkgrepo [options] command [cmd_options] [operands] |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
132 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
133 |
Subcommands: |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
134 |
pkgrepo create [--version ver] uri_or_path |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
135 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
136 |
pkgrepo add-publisher -s repo_uri_or_path publisher ... |
2142
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
137 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
138 |
pkgrepo get [-F format] [-p publisher ...] -s repo_uri_or_path |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
139 |
[--key ssl_key ... --cert ssl_cert ...] [section/property ...] |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
140 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
141 |
pkgrepo info [-F format] [-H] [-p publisher ...] -s repo_uri_or_path |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
142 |
[--key ssl_key ... --cert ssl_cert ...] |
1978
69f2ff97bcd8
16567 pkgrepo help and manpage need to be consistent, and manpage needs publishing
Shawn Walker <shawn.walker@oracle.com>
parents:
1968
diff
changeset
|
143 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
144 |
pkgrepo list [-F format] [-H] [-p publisher ...] -s repo_uri_or_path |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
145 |
[--key ssl_key ... --cert ssl_cert ...] [pkg_fmri_pattern ...] |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
146 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
147 |
pkgrepo rebuild [-p publisher ...] -s repo_uri_or_path [--key ssl_key ... |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
148 |
--cert ssl_cert ...] [--no-catalog] [--no-index] |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
149 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
150 |
pkgrepo refresh [-p publisher ...] -s repo_uri_or_path [--key ssl_key ... |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
151 |
--cert ssl_cert ...] [--no-catalog] [--no-index] |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
152 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
153 |
pkgrepo remove [-n] [-p publisher ...] -s repo_uri_or_path |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
154 |
pkg_fmri_pattern ... |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
155 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
156 |
pkgrepo set [-p publisher ...] -s repo_uri_or_path |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
157 |
section/property[+|-]=[value] ... or |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
158 |
section/property[+|-]=([value]) ... |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
159 |
|
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
160 |
pkgrepo verify [-p publisher ...] -s repo_uri_or_path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
161 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
162 |
pkgrepo fix [-v] [-p publisher ...] -s repo_uri_or_path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
163 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
164 |
pkgrepo help |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
165 |
pkgrepo version |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
166 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
167 |
Options: |
1978
69f2ff97bcd8
16567 pkgrepo help and manpage need to be consistent, and manpage needs publishing
Shawn Walker <shawn.walker@oracle.com>
parents:
1968
diff
changeset
|
168 |
--help or -? |
69f2ff97bcd8
16567 pkgrepo help and manpage need to be consistent, and manpage needs publishing
Shawn Walker <shawn.walker@oracle.com>
parents:
1968
diff
changeset
|
169 |
Displays a usage message.""")) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
170 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
171 |
sys.exit(retcode) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
172 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
173 |
class OptionError(Exception): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
174 |
"""Option exception. """ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
175 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
176 |
def __init__(self, *args): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
177 |
Exception.__init__(self, *args) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
178 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
179 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
180 |
def parse_uri(uri): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
181 |
"""Parse the repository location provided and attempt to transform it |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
182 |
into a valid repository URI. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
183 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
184 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
185 |
return publisher.RepositoryURI(misc.parse_uri(uri)) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
186 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
187 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
188 |
def subcmd_remove(conf, args): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
189 |
subcommand = "remove" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
190 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
191 |
opts, pargs = getopt.getopt(args, "np:s:") |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
192 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
193 |
dry_run = False |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
194 |
pubs = set() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
195 |
for opt, arg in opts: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
196 |
if opt == "-n": |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
197 |
dry_run = True |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
198 |
elif opt == "-p": |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
199 |
pubs.add(arg) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
200 |
elif opt == "-s": |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
201 |
conf["repo_uri"] = parse_uri(arg) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
202 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
203 |
if not pargs: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
204 |
usage(_("At least one package pattern must be provided."), |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
205 |
cmd=subcommand) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
206 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
207 |
# Get repository object. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
208 |
if not conf.get("repo_uri", None): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
209 |
usage(_("A package repository location must be provided " |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
210 |
"using -s."), cmd=subcommand) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
211 |
repo = get_repo(conf, read_only=False, subcommand=subcommand) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
212 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
213 |
if "all" in pubs: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
214 |
pubs = set() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
215 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
216 |
# Find matching packages. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
217 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
218 |
matching, refs = repo.get_matching_fmris(pargs, pubs=pubs) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
219 |
except apx.PackageMatchErrors, e: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
220 |
error(str(e), cmd=subcommand) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
221 |
return EXIT_OOPS |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
222 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
223 |
if dry_run: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
224 |
# Don't make any changes; display list of packages to be |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
225 |
# removed and exit. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
226 |
packages = set(f for m in matching.values() for f in m) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
227 |
count = len(packages) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
228 |
plist = "\n".join("\t%s" % p for p in sorted(packages)) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
229 |
logger.info(_("%(count)d package(s) will be removed:\n" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
230 |
"%(plist)s") % locals()) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
231 |
return EXIT_OK |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
232 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
233 |
progtrack = get_tracker() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
234 |
packages = collections.defaultdict(list) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
235 |
for m in matching.values(): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
236 |
for f in m: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
237 |
packages[f.publisher].append(f) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
238 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
239 |
for pub in packages: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
240 |
logger.info(_("Removing packages for publisher %s ...") % pub) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
241 |
repo.remove_packages(packages[pub], progtrack=progtrack, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
242 |
pub=pub) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
243 |
if len(packages) > 1: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
244 |
# Add a newline between each publisher. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
245 |
logger.info("") |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
246 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
247 |
return EXIT_OK |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
248 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
249 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
250 |
def get_repo(conf, read_only=True, subcommand=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
251 |
"""Return the repository object for current program configuration.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
252 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
253 |
repo_uri = conf["repo_uri"] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
254 |
if repo_uri.scheme != "file": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
255 |
usage(_("Network repositories are not currently supported " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
256 |
"for this operation."), cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
257 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
258 |
path = repo_uri.get_pathname() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
259 |
if not path: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
260 |
# Bad URI? |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
261 |
raise sr.RepositoryInvalidError(str(repo_uri)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
262 |
return sr.Repository(read_only=read_only, root=path) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
263 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
264 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
265 |
def setup_transport(conf, subcommand=None, verbose=False, ssl_key=None, |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
266 |
ssl_cert=None): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
267 |
repo_uri = conf.get("repo_uri", None) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
268 |
if not repo_uri: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
269 |
usage(_("No repository location specified."), cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
270 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
271 |
temp_root = misc.config_temp_root() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
272 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
273 |
tmp_dir = tempfile.mkdtemp(dir=temp_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
274 |
tmpdirs.append(tmp_dir) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
275 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
276 |
incoming_dir = tempfile.mkdtemp(dir=temp_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
277 |
tmpdirs.append(incoming_dir) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
278 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
279 |
cache_dir = tempfile.mkdtemp(dir=temp_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
280 |
tmpdirs.append(cache_dir) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
281 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
282 |
# Create transport and transport config. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
283 |
xport, xport_cfg = transport.setup_transport() |
2073
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
284 |
xport_cfg.add_cache(cache_dir, readonly=False) |
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
285 |
xport_cfg.incoming_root = incoming_dir |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
286 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
287 |
# Configure target publisher. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
288 |
src_pub = transport.setup_publisher(str(repo_uri), "target", xport, |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
289 |
xport_cfg, remote_prefix=True, ssl_key=ssl_key, ssl_cert=ssl_cert) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
290 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
291 |
return xport, src_pub, tmp_dir |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
292 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
293 |
|
2142
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
294 |
def subcmd_add_publisher(conf, args): |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
295 |
"""Add publisher(s) to the specified repository.""" |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
296 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
297 |
subcommand = "add-publisher" |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
298 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
299 |
opts, pargs = getopt.getopt(args, "s:") |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
300 |
for opt, arg in opts: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
301 |
if opt == "-s": |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
302 |
conf["repo_uri"] = parse_uri(arg) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
303 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
304 |
repo_uri = conf.get("repo_uri", None) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
305 |
if not repo_uri: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
306 |
usage(_("No repository location specified."), cmd=subcommand) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
307 |
if repo_uri.scheme != "file": |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
308 |
usage(_("Network repositories are not currently supported " |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
309 |
"for this operation."), cmd=subcommand) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
310 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
311 |
if not pargs: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
312 |
usage(_("At least one publisher must be specified"), |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
313 |
cmd=subcommand) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
314 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
315 |
abort = False |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
316 |
for pfx in pargs: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
317 |
if not misc.valid_pub_prefix(pfx): |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
318 |
error(_("Invalid publisher prefix '%s'") % pfx, |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
319 |
cmd=subcommand) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
320 |
abort = True |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
321 |
if abort: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
322 |
return EXIT_OOPS |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
323 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
324 |
repo = get_repo(conf, read_only=False, subcommand=subcommand) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
325 |
make_default = not repo.publishers |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
326 |
existing = repo.publishers & set(pargs) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
327 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
328 |
# Elide the publishers that already exist, but retain the order |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
329 |
# publishers were specified in. |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
330 |
new_pubs = [ |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
331 |
pfx for pfx in pargs |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
332 |
if pfx not in repo.publishers |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
333 |
] |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
334 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
335 |
# Tricky logic; _set_pub will happily add new publishers if necessary |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
336 |
# and not set any properties if you didn't specify any. |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
337 |
rval = _set_pub(conf, subcommand, {}, new_pubs, repo) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
338 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
339 |
if make_default: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
340 |
# No publisher existed previously, so set the default publisher |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
341 |
# to be the first new one that was added. |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
342 |
_set_repo(conf, subcommand, { "publisher": { |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
343 |
"prefix": new_pubs[0] } }, repo) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
344 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
345 |
if rval == EXIT_OK and existing: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
346 |
# Some of the publishers that were requested for addition |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
347 |
# were already known. |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
348 |
error(_("specified publisher(s) already exist: %s") % |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
349 |
", ".join(existing), cmd=subcommand) |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
350 |
if new_pubs: |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
351 |
return EXIT_PARTIAL |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
352 |
return EXIT_OOPS |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
353 |
return rval |
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
354 |
|
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
355 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
356 |
def subcmd_create(conf, args): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
357 |
"""Create a package repository at the given location.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
358 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
359 |
subcommand = "create" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
360 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
361 |
opts, pargs = getopt.getopt(args, "s:", ["version="]) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
362 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
363 |
version = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
364 |
for opt, arg in opts: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
365 |
if opt == "-s": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
366 |
conf["repo_uri"] = parse_uri(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
367 |
elif opt == "--version": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
368 |
# This option is currently private and allows creating a |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
369 |
# repository with a specific format based on version. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
370 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
371 |
version = int(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
372 |
except ValueError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
373 |
usage(_("Version must be an integer value."), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
374 |
cmd=subcommand) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
375 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
376 |
if len(pargs) > 1: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
377 |
usage(_("Only one repository location may be specified."), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
378 |
cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
379 |
elif pargs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
380 |
conf["repo_uri"] = parse_uri(pargs[0]) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
381 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
382 |
repo_uri = conf.get("repo_uri", None) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
383 |
if not repo_uri: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
384 |
usage(_("No repository location specified."), cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
385 |
if repo_uri.scheme != "file": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
386 |
usage(_("Network repositories are not currently supported " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
387 |
"for this operation."), cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
388 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
389 |
# Attempt to create a repository at the specified location. Allow |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
390 |
# whatever exceptions are raised to bubble up. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
391 |
sr.repository_create(repo_uri, version=version) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
392 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
393 |
return EXIT_OK |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
394 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
395 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
396 |
def subcmd_get(conf, args): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
397 |
"""Display repository properties.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
398 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
399 |
subcommand = "get" |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
400 |
omit_headers = False |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
401 |
out_format = "default" |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
402 |
pubs = set() |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
403 |
key = None |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
404 |
cert = None |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
405 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
406 |
opts, pargs = getopt.getopt(args, "F:Hp:s:", ["key=", "cert="]) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
407 |
for opt, arg in opts: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
408 |
if opt == "-F": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
409 |
out_format = arg |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
410 |
if out_format not in LISTING_FORMATS: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
411 |
usage(_("Unrecognized format %(format)s." |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
412 |
" Supported formats: %(valid)s") % \ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
413 |
{ "format": out_format, |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
414 |
"valid": LISTING_FORMATS }, cmd=subcommand) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
415 |
return EXIT_OOPS |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
416 |
elif opt == "-H": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
417 |
omit_headers = True |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
418 |
elif opt == "-p": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
419 |
pubs.add(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
420 |
elif opt == "-s": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
421 |
conf["repo_uri"] = parse_uri(arg) |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
422 |
elif opt == "--key": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
423 |
key = arg |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
424 |
elif opt == "--cert": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
425 |
cert = arg |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
426 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
427 |
# Setup transport so configuration can be retrieved. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
428 |
if not conf.get("repo_uri", None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
429 |
usage(_("A package repository location must be provided " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
430 |
"using -s."), cmd=subcommand) |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
431 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand, |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
432 |
ssl_key=key, ssl_cert=cert) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
433 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
434 |
# Get properties. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
435 |
if pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
436 |
return _get_pub(conf, subcommand, xport, xpub, omit_headers, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
437 |
out_format, pubs, pargs) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
438 |
return _get_repo(conf, subcommand, xport, xpub, omit_headers, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
439 |
out_format, pargs) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
440 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
441 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
442 |
def _get_repo(conf, subcommand, xport, xpub, omit_headers, out_format, pargs): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
443 |
"""Display repository properties.""" |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
444 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
445 |
# Configuration index is indexed by section name and property name. |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
446 |
# Retrieve and flatten it to simplify listing process. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
447 |
stat_idx = xport.get_status(xpub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
448 |
cfg_idx = stat_idx.get("repository", {}).get("configuration", {}) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
449 |
props = set() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
450 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
451 |
# Set minimum widths for section and property name columns by using the |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
452 |
# length of the column headers. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
453 |
max_sname_len = len(_("SECTION")) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
454 |
max_pname_len = len(_("PROPERTY")) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
455 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
456 |
for sname in cfg_idx: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
457 |
max_sname_len = max(max_sname_len, len(sname)) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
458 |
for pname in cfg_idx[sname]: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
459 |
max_pname_len = max(max_pname_len, len(pname)) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
460 |
props.add("/".join((sname, pname))) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
461 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
462 |
req_props = set(pargs) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
463 |
if len(req_props) >= 1: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
464 |
found = props & req_props |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
465 |
notfound = req_props - found |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
466 |
del props |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
467 |
else: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
468 |
found = props |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
469 |
notfound = set() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
470 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
471 |
def gen_listing(): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
472 |
for prop in sorted(found): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
473 |
sname, pname = prop.rsplit("/", 1) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
474 |
sval = cfg_idx[sname][pname] |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
475 |
yield { |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
476 |
"section": sname, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
477 |
"property": pname, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
478 |
"value": sval, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
479 |
} |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
480 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
481 |
# SECTION PROPERTY VALUE |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
482 |
# <sec_1> <prop_1> <prop_1_value> |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
483 |
# <sec_2> <prop_2> <prop_2_value> |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
484 |
# ... |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
485 |
field_data = { |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
486 |
"section" : [("default", "json", "tsv"), _("SECTION"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
487 |
"property" : [("default", "json", "tsv"), _("PROPERTY"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
488 |
"value" : [("default", "json", "tsv"), _("VALUE"), ""], |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
489 |
} |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
490 |
desired_field_order = (_("SECTION"), _("PROPERTY"), _("VALUE")) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
491 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
492 |
# Default output formatting. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
493 |
def_fmt = "%-" + str(max_sname_len) + "s %-" + str(max_pname_len) + \ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
494 |
"s %s" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
495 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
496 |
if found or (not req_props and out_format == "default"): |
2453
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
497 |
# print without trailing newline. |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
498 |
sys.stdout.write(misc.get_listing(desired_field_order, |
2453
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
499 |
field_data, gen_listing(), out_format, def_fmt, |
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
500 |
omit_headers)) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
501 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
502 |
if found and notfound: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
503 |
return EXIT_PARTIAL |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
504 |
if req_props and not found: |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
505 |
if out_format == "default": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
506 |
# Don't pollute other output formats. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
507 |
error(_("no matching properties found"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
508 |
cmd=subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
509 |
return EXIT_OOPS |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
510 |
return EXIT_OK |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
511 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
512 |
|
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
513 |
def _get_matching_pubs(subcommand, pubs, xport, xpub, out_format="default", |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
514 |
use_transport=False): |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
515 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
516 |
# Retrieve publisher information. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
517 |
pub_data = xport.get_publisherdata(xpub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
518 |
known_pubs = set(p.prefix for p in pub_data) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
519 |
if len(pubs) > 0 and "all" not in pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
520 |
found = known_pubs & pubs |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
521 |
notfound = pubs - found |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
522 |
pub_data = [p for p in pub_data if p.prefix in found] |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
523 |
else: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
524 |
found = known_pubs |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
525 |
notfound = set() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
526 |
|
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
527 |
if use_transport: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
528 |
# Assign transport information. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
529 |
for p in pub_data: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
530 |
p.repository = xpub.repository |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
531 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
532 |
# Establish initial return value and perform early exit if appropriate. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
533 |
rval = EXIT_OK |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
534 |
if found and notfound: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
535 |
rval = EXIT_PARTIAL |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
536 |
elif pubs and not found: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
537 |
if out_format == "default": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
538 |
# Don't pollute other output formats. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
539 |
error(_("no matching publishers found"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
540 |
cmd=subcommand) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
541 |
return EXIT_OOPS, None, None |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
542 |
return rval, found, pub_data |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
543 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
544 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
545 |
def _get_pub(conf, subcommand, xport, xpub, omit_headers, out_format, pubs, |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
546 |
pargs): |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
547 |
"""Display publisher properties.""" |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
548 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
549 |
rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport, |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
550 |
xpub, out_format=out_format) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
551 |
if rval == EXIT_OOPS: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
552 |
return rval |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
553 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
554 |
# Set minimum widths for section and property name columns by using the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
555 |
# length of the column headers and data. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
556 |
max_pubname_len = str(max( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
557 |
[len(_("PUBLISHER"))] + [len(p) for p in found] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
558 |
)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
559 |
max_sname_len = len(_("SECTION")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
560 |
max_pname_len = len(_("PROPERTY")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
561 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
562 |
# For each requested publisher, retrieve the requested property data. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
563 |
pub_idx = {} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
564 |
for pub in pub_data: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
565 |
pub_idx[pub.prefix] = { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
566 |
"publisher": { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
567 |
"alias": pub.alias, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
568 |
"prefix": pub.prefix, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
569 |
}, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
570 |
} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
571 |
|
2310
ce10607d5332
11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2301
diff
changeset
|
572 |
pub_repo = pub.repository |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
573 |
if pub_repo: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
574 |
pub_idx[pub.prefix]["repository"] = { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
575 |
"collection-type": pub_repo.collection_type, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
576 |
"description": pub_repo.description, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
577 |
"legal-uris": pub_repo.legal_uris, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
578 |
"mirrors": pub_repo.mirrors, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
579 |
"name": pub_repo.name, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
580 |
"origins": pub_repo.origins, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
581 |
"refresh-seconds": pub_repo.refresh_seconds, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
582 |
"registration-uri": pub_repo.registration_uri, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
583 |
"related-uris": pub_repo.related_uris, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
584 |
} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
585 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
586 |
pub_idx[pub.prefix]["repository"] = { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
587 |
"collection-type": "core", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
588 |
"description": "", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
589 |
"legal-uris": [], |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
590 |
"mirrors": [], |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
591 |
"name": "", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
592 |
"origins": [], |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
593 |
"refresh-seconds": "", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
594 |
"registration-uri": "", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
595 |
"related-uris": [], |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
596 |
} |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
597 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
598 |
# Determine possible set of properties and lengths. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
599 |
props = set() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
600 |
for pub in pub_idx: |
2073
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
601 |
for sname in pub_idx[pub]: |
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
602 |
max_sname_len = max(max_sname_len, len(sname)) |
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
603 |
for pname in pub_idx[pub][sname]: |
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
604 |
max_pname_len = max(max_pname_len, len(pname)) |
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
605 |
props.add("/".join((sname, pname))) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
606 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
607 |
# Determine properties to display. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
608 |
req_props = set(pargs) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
609 |
if len(req_props) >= 1: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
610 |
found = props & req_props |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
611 |
notfound = req_props - found |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
612 |
del props |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
613 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
614 |
found = props |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
615 |
notfound = set() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
616 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
617 |
def gen_listing(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
618 |
for pub in sorted(pub_idx.keys()): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
619 |
for prop in sorted(found): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
620 |
sname, pname = prop.rsplit("/", 1) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
621 |
sval = pub_idx[pub][sname][pname] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
622 |
yield { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
623 |
"publisher": pub, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
624 |
"section": sname, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
625 |
"property": pname, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
626 |
"value": sval, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
627 |
} |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
628 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
629 |
# PUBLISHER SECTION PROPERTY VALUE |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
630 |
# <pub_1> <sec_1> <prop_1> <prop_1_value> |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
631 |
# <pub_1> <sec_2> <prop_2> <prop_2_value> |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
632 |
# ... |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
633 |
field_data = { |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
634 |
"publisher" : [("default", "json", "tsv"), _("PUBLISHER"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
635 |
"section" : [("default", "json", "tsv"), _("SECTION"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
636 |
"property" : [("default", "json", "tsv"), _("PROPERTY"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
637 |
"value" : [("default", "json", "tsv"), _("VALUE"), ""], |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
638 |
} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
639 |
desired_field_order = (_("PUBLISHER"), _("SECTION"), _("PROPERTY"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
640 |
_("VALUE")) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
641 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
642 |
# Default output formatting. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
643 |
def_fmt = "%-" + str(max_pubname_len) + "s %-" + str(max_sname_len) + \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
644 |
"s %-" + str(max_pname_len) + "s %s" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
645 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
646 |
if found or (not req_props and out_format == "default"): |
2453
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
647 |
# print without trailing newline. |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
648 |
sys.stdout.write(misc.get_listing(desired_field_order, |
2453
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
649 |
field_data, gen_listing(), out_format, def_fmt, |
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
650 |
omit_headers)) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
651 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
652 |
if found and notfound: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
653 |
rval = EXIT_PARTIAL |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
654 |
if req_props and not found: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
655 |
if out_format == "default": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
656 |
# Don't pollute other output formats. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
657 |
error(_("no matching properties found"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
658 |
cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
659 |
rval = EXIT_OOPS |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
660 |
return rval |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
661 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
662 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
663 |
def subcmd_info(conf, args): |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
664 |
"""Display a list of known publishers and a summary of known packages |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
665 |
and when the package data for the given publisher was last updated. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
666 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
667 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
668 |
subcommand = "info" |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
669 |
omit_headers = False |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
670 |
out_format = "default" |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
671 |
pubs = set() |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
672 |
key = None |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
673 |
cert = None |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
674 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
675 |
opts, pargs = getopt.getopt(args, "F:Hp:s:", ["key=", "cert="]) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
676 |
for opt, arg in opts: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
677 |
if opt == "-F": |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
678 |
if arg not in LISTING_FORMATS: |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
679 |
usage(_("Unrecognized format %(format)s." |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
680 |
" Supported formats: %(valid)s") % \ |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
681 |
{ "format": arg, |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
682 |
"valid": LISTING_FORMATS }, cmd=subcommand) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
683 |
return EXIT_OOPS |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
684 |
out_format = arg |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
685 |
elif opt == "-H": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
686 |
omit_headers = True |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
687 |
elif opt == "-p": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
688 |
pubs.add(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
689 |
elif opt == "-s": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
690 |
conf["repo_uri"] = parse_uri(arg) |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
691 |
elif opt == "--key": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
692 |
key = arg |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
693 |
elif opt == "--cert": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
694 |
cert = arg |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
695 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
696 |
if pargs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
697 |
usage(_("command does not take operands"), cmd=subcommand) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
698 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
699 |
# Setup transport so status can be retrieved. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
700 |
if not conf.get("repo_uri", None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
701 |
usage(_("A package repository location must be provided " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
702 |
"using -s."), cmd=subcommand) |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
703 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand, |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
704 |
ssl_key=key, ssl_cert=cert) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
705 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
706 |
# Retrieve repository status information. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
707 |
stat_idx = xport.get_status(xpub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
708 |
pub_idx = stat_idx.get("repository", {}).get("publishers", {}) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
709 |
if len(pubs) > 0 and "all" not in pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
710 |
found = set(pub_idx.keys()) & pubs |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
711 |
notfound = pubs - found |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
712 |
else: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
713 |
found = set(pub_idx.keys()) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
714 |
notfound = set() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
715 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
716 |
def gen_listing(): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
717 |
for pfx in found: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
718 |
pdata = pub_idx[pfx] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
719 |
pkg_count = pdata.get("package-count", 0) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
720 |
last_update = pdata.get("last-catalog-update", "") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
721 |
if last_update: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
722 |
# Reformat the date into something more user |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
723 |
# friendly (and locale specific). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
724 |
last_update = pkg.catalog.basic_ts_to_datetime( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
725 |
last_update) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
726 |
last_update = "%sZ" % pkg.catalog.datetime_to_ts( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
727 |
last_update) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
728 |
rstatus = _(pub_idx[pfx].get("status", "online")) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
729 |
yield { |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
730 |
"publisher": pfx, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
731 |
"packages": pkg_count, |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
732 |
"status": rstatus, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
733 |
"updated": last_update, |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
734 |
} |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
735 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
736 |
# PUBLISHER PACKAGES STATUS UPDATED |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
737 |
# <pub_1> <num_uniq_pkgs> <status> <cat_last_modified> |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
738 |
# <pub_2> <num_uniq_pkgs> <status> <cat_last_modified> |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
739 |
# ... |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
740 |
field_data = { |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
741 |
"publisher" : [("default", "json", "tsv"), _("PUBLISHER"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
742 |
"packages" : [("default", "json", "tsv"), _("PACKAGES"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
743 |
"status" : [("default", "json", "tsv"), _("STATUS"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
744 |
"updated" : [("default", "json", "tsv"), _("UPDATED"), ""], |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
745 |
} |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
746 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
747 |
desired_field_order = (_("PUBLISHER"), "", _("PACKAGES"), _("STATUS"), |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
748 |
_("UPDATED")) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
749 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
750 |
# Default output formatting. |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
751 |
pub_len = str(max( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
752 |
[len(desired_field_order[0])] + [len(p) for p in found] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
753 |
)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
754 |
def_fmt = "%-" + pub_len + "s %-8s %-16s %s" |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
755 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
756 |
if found or (not pubs and out_format == "default"): |
2453
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
757 |
# print without trailing newline. |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
758 |
sys.stdout.write(misc.get_listing(desired_field_order, |
2453
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
759 |
field_data, gen_listing(), out_format, def_fmt, |
330443795456
18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
760 |
omit_headers)) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
761 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
762 |
if found and notfound: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
763 |
return EXIT_PARTIAL |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
764 |
if pubs and not found: |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
765 |
if out_format == "default": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
766 |
# Don't pollute other output formats. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
767 |
error(_("no matching publishers found"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
768 |
cmd=subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
769 |
return EXIT_OOPS |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
770 |
return EXIT_OK |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
771 |
|
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
772 |
def subcmd_list(conf, args): |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
773 |
"""List all packages matching the specified patterns.""" |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
774 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
775 |
subcommand = "list" |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
776 |
omit_headers = False |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
777 |
out_format = "default" |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
778 |
pubs = set() |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
779 |
key = None |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
780 |
cert = None |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
781 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
782 |
opts, pargs = getopt.getopt(args, "F:Hp:s:", ["key=", "cert="]) |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
783 |
for opt, arg in opts: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
784 |
if opt == "-F": |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
785 |
out_format = arg |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
786 |
if out_format not in LISTING_FORMATS: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
787 |
usage(_("Unrecognized format %(format)s." |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
788 |
" Supported formats: %(valid)s") % |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
789 |
{ "format": out_format, |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
790 |
"valid": LISTING_FORMATS }, cmd=subcommand) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
791 |
return EXIT_OOPS |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
792 |
elif opt == "-H": |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
793 |
omit_headers = True |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
794 |
elif opt == "-p": |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
795 |
pubs.add(arg) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
796 |
elif opt == "-s": |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
797 |
conf["repo_uri"] = parse_uri(arg) |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
798 |
elif opt == "--key": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
799 |
key = arg |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
800 |
elif opt == "--cert": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
801 |
cert = arg |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
802 |
|
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
803 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
804 |
# Setup transport so configuration can be retrieved. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
805 |
if not conf.get("repo_uri", None): |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
806 |
usage(_("A package repository location must be provided " |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
807 |
"using -s."), cmd=subcommand) |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
808 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand, |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
809 |
ssl_key=key, ssl_cert=cert) |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
810 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
811 |
rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport, |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
812 |
xpub, out_format=out_format, use_transport=True) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
813 |
if rval == EXIT_OOPS: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
814 |
return rval |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
815 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
816 |
temp_root = misc.config_temp_root() |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
817 |
progtrack = get_tracker() |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
818 |
progtrack.set_purpose(progtrack.PURPOSE_LISTING) |
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
819 |
|
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
820 |
progtrack.refresh_start(pub_cnt=len(pub_data), full_refresh=True, |
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
821 |
target_catalog=False) |
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
822 |
|
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
823 |
for pub in pub_data: |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
824 |
progtrack.refresh_start_pub(pub) |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
825 |
meta_root = tempfile.mkdtemp(dir=temp_root) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
826 |
tmpdirs.append(meta_root) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
827 |
pub.meta_root = meta_root |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
828 |
pub.transport = xport |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
829 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
830 |
try: |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
831 |
pub.refresh(True, True, progtrack=progtrack) |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
832 |
except apx.TransportError: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
833 |
# Assume that a catalog doesn't exist for the target |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
834 |
# publisher and drive on. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
835 |
pass |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
836 |
progtrack.refresh_end_pub(pub) |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
837 |
|
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2616
diff
changeset
|
838 |
progtrack.refresh_done() |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
839 |
listed = {} |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
840 |
matched = set() |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
841 |
unmatched = set() |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
842 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
843 |
def gen_listing(): |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
844 |
collect_attrs = out_format.startswith("json") |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
845 |
for pub in pub_data: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
846 |
cat = pub.catalog |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
847 |
for f, states, attrs in cat.gen_packages( |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
848 |
collect_attrs=collect_attrs, matched=matched, |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
849 |
patterns=pargs, pubs=[pub.prefix], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
850 |
unmatched=unmatched, return_fmris=True): |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
851 |
if not listed: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
852 |
listed["packages"] = True |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
853 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
854 |
state = None |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
855 |
if out_format == "default" or \ |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
856 |
out_format == "tsv": |
2616
3c00fe4465d3
19148 PKG_STATE_* defines need a new home
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents:
2569
diff
changeset
|
857 |
if pkgdefs.PKG_STATE_OBSOLETE in \ |
3c00fe4465d3
19148 PKG_STATE_* defines need a new home
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents:
2569
diff
changeset
|
858 |
states: |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
859 |
state = "o" |
2616
3c00fe4465d3
19148 PKG_STATE_* defines need a new home
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents:
2569
diff
changeset
|
860 |
elif pkgdefs.PKG_STATE_RENAMED in \ |
3c00fe4465d3
19148 PKG_STATE_* defines need a new home
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents:
2569
diff
changeset
|
861 |
states: |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
862 |
state = "r" |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
863 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
864 |
ret = { |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
865 |
"publisher": f.publisher, |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
866 |
"name": f.pkg_name, |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
867 |
"version": str(f.version), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
868 |
"release": str(f.version.release), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
869 |
"build-release": |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
870 |
str(f.version.build_release), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
871 |
"branch": str(f.version.branch), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
872 |
"timestamp": |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
873 |
str(f.version.timestr), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
874 |
"pkg.fmri": str(f), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
875 |
"short_state": state, |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
876 |
} |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
877 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
878 |
for attr in attrs: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
879 |
ret[attr] = [] |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
880 |
for mods in attrs[attr]: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
881 |
d = dict(mods) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
882 |
d["value"] = \ |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
883 |
attrs[attr][mods] |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
884 |
ret[attr].append(d) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
885 |
yield ret |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
886 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
887 |
unmatched.difference_update(matched) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
888 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
889 |
field_data = { |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
890 |
"publisher": [("default", "json", "tsv"), _("PUBLISHER"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
891 |
"name": [("default", "json", "tsv"), _("NAME"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
892 |
"version": [("default", "json"), _("VERSION"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
893 |
"release": [("json", "tsv",), _("RELEASE"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
894 |
"build-release": [("json", "tsv",), _("BUILD RELEASE"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
895 |
"branch": [("json", "tsv",), _("BRANCH"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
896 |
"timestamp": [("json", "tsv",), _("PACKAGING DATE"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
897 |
"pkg.fmri": [("json", "tsv",), _("FMRI"), ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
898 |
"short_state": [("default", "tsv"), "O", ""], |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
899 |
} |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
900 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
901 |
desired_field_order = (_("PUBLISHER"), _("NAME"), "O", _("VERSION"), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
902 |
_("SUMMARY"), _("DESCRIPTION"), _("CATEGORIES"), _("RELEASE"), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
903 |
_("BUILD RELEASE"), _("BRANCH"), _("PACKAGING DATE"), _("FMRI"), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
904 |
_("STATE")) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
905 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
906 |
# Default output formatting. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
907 |
max_pub_name_len = str( |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
908 |
max(list(len(p) for p in found) + [len(_("PUBLISHER"))])) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
909 |
def_fmt = "%-" + max_pub_name_len + "s %-45s %-1s %-s" |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
910 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
911 |
# print without trailing newline. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
912 |
sys.stdout.write(misc.get_listing( |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
913 |
desired_field_order, field_data, gen_listing(), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
914 |
out_format, def_fmt, omit_headers)) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
915 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
916 |
if not listed and pargs: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
917 |
# No matching packages. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
918 |
logger.error("") |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
919 |
if not unmatched: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
920 |
unmatched = pargs |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
921 |
error(apx.PackageMatchErrors(unmatched_fmris=unmatched), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
922 |
cmd=subcommand) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
923 |
return EXIT_OOPS |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
924 |
elif unmatched: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
925 |
# One or more patterns didn't match a package from any |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
926 |
# publisher; only display the error. |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
927 |
logger.error("") |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
928 |
error(apx.PackageMatchErrors(unmatched_fmris=unmatched), |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
929 |
cmd=subcommand) |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
930 |
return EXIT_PARTIAL |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
931 |
|
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
932 |
return EXIT_OK |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
933 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
934 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
935 |
def subcmd_rebuild(conf, args): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
936 |
"""Rebuild the repository's catalog and index data (as permitted).""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
937 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
938 |
subcommand = "rebuild" |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
939 |
build_catalog = True |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
940 |
build_index = True |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
941 |
key = None |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
942 |
cert = None |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
943 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
944 |
opts, pargs = getopt.getopt(args, "p:s:", ["no-catalog", "no-index", |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
945 |
"key=", "cert="]) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
946 |
pubs = set() |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
947 |
for opt, arg in opts: |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
948 |
if opt == "-p": |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
949 |
if not misc.valid_pub_prefix(arg): |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
950 |
error(_("Invalid publisher prefix '%s'") % arg, |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
951 |
cmd=subcommand) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
952 |
pubs.add(arg) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
953 |
elif opt == "-s": |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
954 |
conf["repo_uri"] = parse_uri(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
955 |
elif opt == "--no-catalog": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
956 |
build_catalog = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
957 |
elif opt == "--no-index": |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
958 |
build_index = False |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
959 |
elif opt == "--key": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
960 |
key = arg |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
961 |
elif opt == "--cert": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
962 |
cert = arg |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
963 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
964 |
if pargs: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
965 |
usage(_("command does not take operands"), cmd=subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
966 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
967 |
if not build_catalog and not build_index: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
968 |
# Why? Who knows; but do what was requested--nothing! |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
969 |
return EXIT_OK |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
970 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
971 |
# Setup transport so operation can be performed. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
972 |
if not conf.get("repo_uri", None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
973 |
usage(_("A package repository location must be provided " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
974 |
"using -s."), cmd=subcommand) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
975 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
976 |
def do_rebuild(xport, xpub): |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
977 |
if build_catalog and build_index: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
978 |
xport.publish_rebuild(xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
979 |
elif build_catalog: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
980 |
xport.publish_rebuild_packages(xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
981 |
elif build_index: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
982 |
xport.publish_rebuild_indexes(xpub) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
983 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
984 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand, |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
985 |
ssl_key=key, ssl_cert=cert) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
986 |
rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport, |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
987 |
xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
988 |
if rval == EXIT_OOPS: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
989 |
return rval |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
990 |
|
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
991 |
logger.info("Initiating repository rebuild.") |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
992 |
for pfx in found: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
993 |
xpub.prefix = pfx |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
994 |
do_rebuild(xport, xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
995 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
996 |
return rval |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
997 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
998 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
999 |
def subcmd_refresh(conf, args): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1000 |
"""Refresh the repository's catalog and index data (as permitted).""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1001 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1002 |
subcommand = "refresh" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1003 |
add_content = True |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1004 |
refresh_index = True |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1005 |
key = None |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1006 |
cert = None |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1007 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1008 |
opts, pargs = getopt.getopt(args, "p:s:", ["no-catalog", "no-index", |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1009 |
"key=", "cert="]) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1010 |
pubs = set() |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1011 |
for opt, arg in opts: |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1012 |
if opt == "-p": |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1013 |
if not misc.valid_pub_prefix(arg): |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1014 |
error(_("Invalid publisher prefix '%s'") % arg, |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1015 |
cmd=subcommand) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1016 |
pubs.add(arg) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1017 |
elif opt == "-s": |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1018 |
conf["repo_uri"] = parse_uri(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1019 |
elif opt == "--no-catalog": |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1020 |
add_content = False |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1021 |
elif opt == "--no-index": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1022 |
refresh_index = False |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1023 |
elif opt == "--key": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1024 |
key = arg |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1025 |
elif opt == "--cert": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1026 |
cert = arg |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1027 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1028 |
if pargs: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1029 |
usage(_("command does not take operands"), cmd=subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1030 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1031 |
if not add_content and not refresh_index: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1032 |
# Why? Who knows; but do what was requested--nothing! |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1033 |
return EXIT_OK |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1034 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1035 |
# Setup transport so operation can be performed. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1036 |
if not conf.get("repo_uri", None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1037 |
usage(_("A package repository location must be provided " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1038 |
"using -s."), cmd=subcommand) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1039 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1040 |
def do_refresh(xport, xpub): |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1041 |
if add_content and refresh_index: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1042 |
xport.publish_refresh(xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1043 |
elif add_content: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1044 |
xport.publish_refresh_packages(xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1045 |
elif refresh_index: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1046 |
xport.publish_refresh_indexes(xpub) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1047 |
|
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1048 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand, |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1049 |
ssl_key=key, ssl_cert=cert) |
2132
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1050 |
rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport, |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1051 |
xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1052 |
if rval == EXIT_OOPS: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1053 |
return rval |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1054 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1055 |
logger.info("Initiating repository refresh.") |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1056 |
for pfx in found: |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1057 |
xpub.prefix = pfx |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1058 |
do_refresh(xport, xpub) |
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1059 |
|
f9a27f85a897
17303 pkgrepo refresh/rebuild should allow specifying publisher
Shawn Walker <shawn.walker@oracle.com>
parents:
2126
diff
changeset
|
1060 |
return rval |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1061 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1062 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1063 |
def subcmd_set(conf, args): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1064 |
"""Set repository properties.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1065 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1066 |
subcommand = "set" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1067 |
pubs = set() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1068 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1069 |
opts, pargs = getopt.getopt(args, "p:s:") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1070 |
for opt, arg in opts: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1071 |
if opt == "-p": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1072 |
pubs.add(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1073 |
elif opt == "-s": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1074 |
conf["repo_uri"] = parse_uri(arg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1075 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1076 |
bad_args = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1077 |
props = {} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1078 |
if not pargs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1079 |
bad_args = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1080 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1081 |
for arg in pargs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1082 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1083 |
# Attempt to parse property into components. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1084 |
prop, val = arg.split("=", 1) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1085 |
sname, pname = prop.rsplit("/", 1) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1086 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1087 |
# Store property values by section. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1088 |
props.setdefault(sname, {}) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1089 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1090 |
# Parse the property value into a list if |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1091 |
# necessary, otherwise append it to the list |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1092 |
# of values for the property. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1093 |
if len(val) > 0 and val[0] == "(" and \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1094 |
val[-1] == ")": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1095 |
val = shlex.split(val.strip("()")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1096 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1097 |
if sname in props and pname in props[sname]: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1098 |
# Determine if previous value is already |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1099 |
# a list, and if not, convert and append |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1100 |
# the value. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1101 |
pval = props[sname][pname] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1102 |
if not isinstance(pval, list): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1103 |
pval = [pval] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1104 |
if isinstance(val, list): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1105 |
pval.extend(val) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1106 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1107 |
pval.append(val) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1108 |
props[sname][pname] = pval |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1109 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1110 |
# Otherwise, just store the value. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1111 |
props[sname][pname] = val |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1112 |
except ValueError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1113 |
bad_args = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1114 |
break |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1115 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1116 |
if bad_args: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1117 |
usage(_("a property name and value must be provided in the " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1118 |
"form <section/property>=<value> or " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1119 |
"<section/property>=([\"<value>\" ...])")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1120 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1121 |
# Get repository object. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1122 |
if not conf.get("repo_uri", None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1123 |
usage(_("A package repository location must be provided " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1124 |
"using -s."), cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1125 |
repo = get_repo(conf, read_only=False, subcommand=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1126 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1127 |
# Set properties. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1128 |
if pubs: |
2142
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
1129 |
return _set_pub(conf, subcommand, props, pubs, repo) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1130 |
|
2142
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
1131 |
return _set_repo(conf, subcommand, props, repo) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1132 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1133 |
|
2142
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
1134 |
def _set_pub(conf, subcommand, props, pubs, repo): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1135 |
"""Set publisher properties.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1136 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1137 |
for sname, sprops in props.iteritems(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1138 |
if sname not in ("publisher", "repository"): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1139 |
usage(_("unknown property section " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1140 |
"'%s'") % sname, cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1141 |
for pname in sprops: |
2073
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
1142 |
if sname == "publisher" and pname == "prefix": |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1143 |
usage(_("'%s' may not be set using " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1144 |
"this command" % pname)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1145 |
attrname = pname.replace("-", "_") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1146 |
if not hasattr(publisher.Publisher, attrname) and \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1147 |
not hasattr(publisher.Repository, attrname): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1148 |
usage(_("unknown property '%s'") % |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1149 |
pname, cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1150 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1151 |
if "all" in pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1152 |
# Default to list of all publishers. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1153 |
pubs = repo.publishers |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1154 |
if not pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1155 |
# If there are still no known publishers, this |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1156 |
# operation cannot succeed, so fail now. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1157 |
usage(_("One or more publishers must be specified to " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1158 |
"create and set properties for as none exist yet."), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1159 |
cmd=subcommand) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1160 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1161 |
# Get publishers and update properties. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1162 |
failed = [] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1163 |
new_pub = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1164 |
for pfx in pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1165 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1166 |
# Get a copy of the existing publisher. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1167 |
pub = copy.copy(repo.get_publisher(pfx)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1168 |
except sr.RepositoryUnknownPublisher, e: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1169 |
pub = publisher.Publisher(pfx) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1170 |
new_pub = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1171 |
except sr.RepositoryError, e: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1172 |
failed.append((pfx, e)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1173 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1174 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1175 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1176 |
# Set/update the publisher's properties. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1177 |
for sname, sprops in props.iteritems(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1178 |
if sname == "publisher": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1179 |
target = pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1180 |
elif sname == "repository": |
2310
ce10607d5332
11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2301
diff
changeset
|
1181 |
target = pub.repository |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1182 |
if not target: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1183 |
target = publisher.Repository() |
2310
ce10607d5332
11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2301
diff
changeset
|
1184 |
pub.repository = target |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1185 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1186 |
for pname, val in sprops.iteritems(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1187 |
attrname = pname.replace("-", "_") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1188 |
pval = getattr(target, attrname) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1189 |
if isinstance(pval, list) and \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1190 |
not isinstance(val, list): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1191 |
# If the target property expects |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1192 |
# a list, transform the provided |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1193 |
# value into one if it isn't |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1194 |
# already. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1195 |
if val == "": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1196 |
val = [] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1197 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1198 |
val = [val] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1199 |
setattr(target, attrname, val) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1200 |
except apx.ApiException, e: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1201 |
failed.append((pfx, e)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1202 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1203 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1204 |
if new_pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1205 |
repo.add_publisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1206 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1207 |
repo.update_publisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1208 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1209 |
if failed: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1210 |
for pfx, details in failed: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1211 |
error(_("Unable to set properties for publisher " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1212 |
"'%(pfx)s':\n%(details)s") % locals()) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1213 |
if len(failed) < len(pubs): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1214 |
return EXIT_PARTIAL |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1215 |
return EXIT_OOPS |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1216 |
return EXIT_OK |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1217 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1218 |
|
2142
46de09e114f2
16809 pkgrepo(1) should specify which properties are valid
Shawn Walker <shawn.walker@oracle.com>
parents:
2132
diff
changeset
|
1219 |
def _set_repo(conf, subcommand, props, repo): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1220 |
"""Set repository properties.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1221 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1222 |
# Set properties. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1223 |
for sname, props in props.iteritems(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1224 |
for pname, val in props.iteritems(): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1225 |
repo.cfg.set_property(sname, pname, val) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1226 |
repo.write_config() |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1227 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1228 |
return EXIT_OK |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1229 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1230 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1231 |
def subcmd_version(conf, args): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1232 |
"""Display the version of the pkg(5) API.""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1233 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1234 |
subcommand = "version" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1235 |
if args: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1236 |
usage(_("command does not take operands"), cmd=subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1237 |
msg(pkg.VERSION) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1238 |
return EXIT_OK |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1239 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1240 |
|
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1241 |
verify_error_header = None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1242 |
verify_warning_header = None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1243 |
verify_reason_headers = None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1244 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1245 |
def __load_verify_msgs(): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1246 |
"""Since our gettext isn't loaded we need to ensure our globals have |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1247 |
correct content by calling this method. These values are used by both |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1248 |
fix when in verbose mode, and verify""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1249 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1250 |
global verify_error_header |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1251 |
global verify_warning_header |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1252 |
global verify_reason_headers |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1253 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1254 |
# A map of error detail types to the human-readable description of each |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1255 |
# type. These correspond to keys in the dictionary returned by |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1256 |
# sr.Repository.verify(..) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1257 |
verify_reason_headers = { |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1258 |
"path": _("Repository path"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1259 |
"actual": _("Computed hash"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1260 |
"fpath": _("Path"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1261 |
"permissionspath": _("Path"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1262 |
"pkg": _("Package"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1263 |
"err": _("Detail") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1264 |
} |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1265 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1266 |
verify_error_header = _("ERROR") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1267 |
verify_warning_header = _("WARNING") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1268 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1269 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1270 |
def __fmt_verify(verify_tuple): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1271 |
"""Format a verify_tuple, of the form (error, path, message, reason) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1272 |
returning a formatted error message, and an FMRI indicating what |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1273 |
packages within the repository are affected. Note that the returned FMRI |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1274 |
may not be valid, in which case a path to the broken manifest in the |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1275 |
repository is returned instead.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1276 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1277 |
error, path, message, reason = verify_tuple |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1278 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1279 |
formatted_message = "%(error_type)16s: %(message)s\n" % \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1280 |
{"error_type": verify_error_header, "message": message} |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1281 |
reason["path"] = path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1282 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1283 |
if error == sr.REPO_VERIFY_BADMANIFEST: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1284 |
reason_keys = ["path", "err"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1285 |
elif error in [sr.REPO_VERIFY_PERM, sr.REPO_VERIFY_MFPERM]: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1286 |
reason_keys = ["pkg", "path"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1287 |
elif error == sr.REPO_VERIFY_BADHASH: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1288 |
reason_keys = ["pkg", "path", "actual", "fpath"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1289 |
elif error == sr.REPO_VERIFY_UNKNOWN: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1290 |
reason_keys = ["path", "err"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1291 |
elif error == sr.REPO_VERIFY_BADSIG: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1292 |
reason_keys = ["pkg", "path", "err"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1293 |
elif error == sr.REPO_VERIFY_WARN_OPENPERMS: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1294 |
formatted_message = \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1295 |
"%(error_type)16s: %(message)s\n" % \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1296 |
{"error_type": verify_warning_header, "message": message} |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1297 |
reason_keys = ["permissionspath", "err"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1298 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1299 |
# A list of the details we provide. Some error codes |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1300 |
# have different details associated with them. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1301 |
reason_keys = ["pkg", "path", "fpath"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1302 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1303 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1304 |
# the detailed error message can be long, so we'll wrap it. If what we |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1305 |
# have fits on a single line, use it, otherwise begin displaying the |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1306 |
# message on the next line. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1307 |
if "err" in reason_keys: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1308 |
err_str = "" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1309 |
lines = textwrap.wrap(reason["err"]) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1310 |
if len(lines) != 1: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1311 |
for line in lines: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1312 |
err_str += "%18s\n" % line |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1313 |
reason["err"] = "\n" + err_str.rstrip() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1314 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1315 |
reason["err"] = lines[0] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1316 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1317 |
for key in reason_keys: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1318 |
# sometimes we don't have the key we want, for example we may |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1319 |
# not have a file path from the package if the error is a |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1320 |
# missing repository file for a 'license' action (which don't |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1321 |
# have 'path' attributes, hence no 'fpath' dictionary entry) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1322 |
if key not in reason: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1323 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1324 |
formatted_message += "%(key)16s: %(value)s\n" % \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1325 |
{"key": verify_reason_headers[key], "value": reason[key]} |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1326 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1327 |
formatted_message += "\n" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1328 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1329 |
if error == sr.REPO_VERIFY_WARN_OPENPERMS: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1330 |
return formatted_message, None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1331 |
elif "pkg" in reason: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1332 |
return formatted_message, reason["pkg"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1333 |
return formatted_message, reason["path"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1334 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1335 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1336 |
def subcmd_verify(conf, args): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1337 |
"""Verify the repository content (file and manifest content only).""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1338 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1339 |
subcommand = "verify" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1340 |
__load_verify_msgs() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1341 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1342 |
opts, pargs = getopt.getopt(args, "p:s:") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1343 |
pubs = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1344 |
for opt, arg in opts: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1345 |
if opt == "-s": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1346 |
conf["repo_uri"] = parse_uri(arg) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1347 |
if opt == "-p": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1348 |
if not misc.valid_pub_prefix(arg): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1349 |
error(_("Invalid publisher prefix '%s'") % arg, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1350 |
cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1351 |
pubs.add(arg) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1352 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1353 |
if pargs: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1354 |
usage(_("command does not take operands"), cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1355 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1356 |
repo_uri = conf.get("repo_uri", None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1357 |
if not repo_uri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1358 |
usage(_("A package repository location must be provided " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1359 |
"using -s."), cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1360 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1361 |
if repo_uri.scheme != "file": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1362 |
usage(_("Network repositories are not currently supported " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1363 |
"for this operation."), cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1364 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1365 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1366 |
rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1367 |
xpub) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1368 |
if rval == EXIT_OOPS: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1369 |
return rval |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1370 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1371 |
logger.info("Initiating repository verification.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1372 |
bad_fmris = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1373 |
for pfx in found: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1374 |
progtrack = get_tracker() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1375 |
repo = sr.Repository(root=repo_uri.get_pathname()) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1376 |
xpub.prefix = pfx |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1377 |
xpub.transport = xport |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1378 |
for verify_tuple in repo.verify(pub=xpub, progtrack=progtrack): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1379 |
message, bad_fmri = __fmt_verify(verify_tuple) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1380 |
if bad_fmri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1381 |
bad_fmris.add(bad_fmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1382 |
progtrack.repo_verify_yield_error(bad_fmri, message) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1383 |
if bad_fmris: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1384 |
return EXIT_OOPS |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1385 |
return EXIT_OK |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1386 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1387 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1388 |
def subcmd_fix(conf, args): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1389 |
"""Fix the repository content (file and manifest content only) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1390 |
For index and catalog content corruption, a rebuild should be |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1391 |
performed.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1392 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1393 |
subcommand = "fix" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1394 |
__load_verify_msgs() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1395 |
verbose = False |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1396 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1397 |
opts, pargs = getopt.getopt(args, "vp:s:") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1398 |
pubs = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1399 |
for opt, arg in opts: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1400 |
if opt == "-s": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1401 |
conf["repo_uri"] = parse_uri(arg) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1402 |
if opt == "-v": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1403 |
verbose = True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1404 |
if opt == "-p": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1405 |
if not misc.valid_pub_prefix(arg): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1406 |
error(_("Invalid publisher prefix '%s'") % arg, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1407 |
cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1408 |
pubs.add(arg) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1409 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1410 |
if pargs: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1411 |
usage(_("command does not take operands"), cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1412 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1413 |
repo_uri = conf.get("repo_uri", None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1414 |
if not repo_uri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1415 |
usage(_("A package repository location must be provided " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1416 |
"using -s."), cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1417 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1418 |
if repo_uri.scheme != "file": |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1419 |
usage(_("Network repositories are not currently supported " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1420 |
"for this operation."), cmd=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1421 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1422 |
xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1423 |
rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1424 |
xpub) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1425 |
if rval == EXIT_OOPS: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1426 |
return rval |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1427 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1428 |
logger.info("Initiating repository fix.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1429 |
progtrack = get_tracker() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1430 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1431 |
def verify_cb(tracker, verify_tuple): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1432 |
"""A method passed to sr.Repository.fix(..) to emit verify |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1433 |
messages if verbose mode is enabled.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1434 |
if not verbose: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1435 |
return |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1436 |
formatted_message, bad_fmri = __fmt_verify(verify_tuple) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1437 |
tracker.repo_verify_yield_error(bad_fmri, formatted_message) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1438 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1439 |
repo = sr.Repository(root=repo_uri.get_pathname()) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1440 |
broken_fmris = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1441 |
failed_fix_paths = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1442 |
for pfx in found: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1443 |
xpub.prefix = pfx |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1444 |
xpub.transport = xport |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1445 |
progtrack = get_tracker() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1446 |
for status_code, path, message, reason in \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1447 |
repo.fix(pub=xpub, progtrack=progtrack, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1448 |
verify_callback=verify_cb): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1449 |
if status_code == sr.REPO_FIX_ITEM: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1450 |
# When we can't get the FMRI, eg. in the case |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1451 |
# of a corrupt manifest, use the path instead. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1452 |
fmri = reason["pkg"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1453 |
if not fmri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1454 |
fmri = path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1455 |
broken_fmris.add(fmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1456 |
if verbose: |
2844
3f428f7cb353
15722190 pkgrepo verify subcommand needed (fix pylint)
Tim Foster <tim.s.foster@oracle.com>
parents:
2843
diff
changeset
|
1457 |
progtrack.repo_fix_yield_info(fmri, |
3f428f7cb353
15722190 pkgrepo verify subcommand needed (fix pylint)
Tim Foster <tim.s.foster@oracle.com>
parents:
2843
diff
changeset
|
1458 |
message) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1459 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1460 |
failed_fix_paths.add(path) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1461 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1462 |
progtrack.flush() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1463 |
logger.info("") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1464 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1465 |
if broken_fmris: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1466 |
logger.info(_("Use pkgsend(1) or pkgrecv(1) to republish the\n" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1467 |
"following packages or paths which were quarantined:\n\n\t" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1468 |
"%s") % \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1469 |
"\n\t".join([str(f) for f in broken_fmris])) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1470 |
if failed_fix_paths: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1471 |
logger.info(_("\npkgrepo could not repair the following paths " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1472 |
"in the repository:\n\n\t%s") % |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1473 |
"\n\t".join([p for p in failed_fix_paths])) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1474 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1475 |
if not (broken_fmris or failed_fix_paths): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1476 |
logger.info(_("No repository fixes required.")) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1477 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1478 |
logger.info(_("Repository repairs completed.")) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1479 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1480 |
if failed_fix_paths: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1481 |
return EXIT_OOPS |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1482 |
return EXIT_OK |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1483 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2728
diff
changeset
|
1484 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1485 |
def main_func(): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1486 |
global_settings.client_name = PKG_CLIENT_NAME |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1487 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1488 |
try: |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1489 |
opts, pargs = getopt.getopt(sys.argv[1:], "s:D:?", |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1490 |
["help", "debug="]) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1491 |
except getopt.GetoptError, e: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1492 |
usage(_("illegal global option -- %s") % e.opt) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1493 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1494 |
conf = {} |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1495 |
show_usage = False |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1496 |
for opt, arg in opts: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1497 |
if opt == "-s": |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1498 |
conf["repo_uri"] = parse_uri(arg) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1499 |
elif opt in ("--help", "-?"): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1500 |
show_usage = True |
2864
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1501 |
elif opt == "-D" or opt == "--debug": |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1502 |
try: |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1503 |
key, value = arg.split("=", 1) |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1504 |
except (AttributeError, ValueError): |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1505 |
usage(_("%(opt)s takes argument of form " |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1506 |
"name=value, not %(arg)s") % { |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1507 |
"opt": opt, "arg": arg }) |
96d3957712da
16193298 pkgrepo, pkgrecv and pkgsend need SSL support for publishing and info retrieval
Erik Trauschke <Erik.Trauschke@oracle.com>
parents:
2844
diff
changeset
|
1508 |
DebugValues.set_value(key, value) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1509 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1510 |
subcommand = None |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1511 |
if pargs: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1512 |
subcommand = pargs.pop(0) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1513 |
if subcommand == "help": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1514 |
show_usage = True |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1515 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1516 |
if show_usage: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1517 |
usage(retcode=0, full=True) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1518 |
elif not subcommand: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1519 |
usage(_("no subcommand specified")) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1520 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1521 |
subcommand = subcommand.replace("-", "_") |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1522 |
func = globals().get("subcmd_%s" % subcommand, None) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1523 |
if not func: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1524 |
subcommand = subcommand.replace("_", "-") |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1525 |
usage(_("unknown subcommand '%s'") % subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1526 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1527 |
try: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1528 |
return func(conf, pargs) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1529 |
except getopt.GetoptError, e: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1530 |
if e.opt in ("help", "?"): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1531 |
usage(full=True) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1532 |
usage(_("illegal option -- %s") % e.opt, cmd=subcommand) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1533 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1534 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1535 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1536 |
# Establish a specific exit status which means: "python barfed an exception" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1537 |
# so that we can more easily detect these in testing of the CLI commands. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1538 |
# |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1539 |
def handle_errors(func, *args, **kwargs): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1540 |
"""Catch exceptions raised by the main program function and then print |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1541 |
a message and/or exit with an appropriate return code. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1542 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1543 |
|
2569
1f9f50d0cde3
18977 pkg stack traces should tell customers to report issues to service
Shawn Walker <shawn.walker@oracle.com>
parents:
2510
diff
changeset
|
1544 |
traceback_str = misc.get_traceback_message() |
2126
7f6719cd083b
14316 please suggest the proper classification and product in the pkg error message
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
1545 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1546 |
try: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1547 |
# Out of memory errors can be raised as EnvironmentErrors with |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1548 |
# an errno of ENOMEM, so in order to handle those exceptions |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1549 |
# with other errnos, we nest this try block and have the outer |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1550 |
# one handle the other instances. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1551 |
try: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1552 |
__ret = func(*args, **kwargs) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1553 |
except (MemoryError, EnvironmentError), __e: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1554 |
if isinstance(__e, EnvironmentError) and \ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1555 |
__e.errno != errno.ENOMEM: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1556 |
raise |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1557 |
error("\n" + misc.out_of_memory()) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1558 |
__ret = EXIT_OOPS |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1559 |
except SystemExit, __e: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1560 |
raise __e |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
1561 |
except (IOError, PipeError, KeyboardInterrupt), __e: |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1562 |
# Don't display any messages here to prevent possible further |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1563 |
# broken pipe (EPIPE) errors. |
2510
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
1564 |
if isinstance(__e, IOError) and __e.errno != errno.EPIPE: |
f48530fd135d
18440 pkgrepo should be able to list packages
Shawn Walker <shawn.walker@oracle.com>
parents:
2453
diff
changeset
|
1565 |
error(str(__e)) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1566 |
__ret = EXIT_OOPS |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1567 |
except apx.VersionException, __e: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1568 |
error(_("The pkgrepo command appears out of sync with the " |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1569 |
"libraries provided\nby pkg:/package/pkg. The client " |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1570 |
"version is %(client)s while the library\nAPI version is " |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1571 |
"%(api)s.") % {'client': __e.received_version, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1572 |
'api': __e.expected_version |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1573 |
}) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1574 |
__ret = EXIT_OOPS |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1575 |
except apx.BadRepositoryURI, __e: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1576 |
error(str(__e)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1577 |
__ret = EXIT_BADOPT |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1578 |
except (apx.ApiException, sr.RepositoryError), __e: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1579 |
error(str(__e)) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1580 |
__ret = EXIT_OOPS |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1581 |
except: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1582 |
traceback.print_exc() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1583 |
error(traceback_str) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1584 |
__ret = 99 |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1585 |
return __ret |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1586 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1587 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1588 |
if __name__ == "__main__": |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1589 |
misc.setlocale(locale.LC_ALL, "", error) |
2728
69903f3b722b
7166082 pkg command does not handle Japanese character encoding on Solaris 11
Abhinandan Ekande <abhinandan.ekande@oracle.com>
parents:
2693
diff
changeset
|
1590 |
gettext.install("pkg", "/usr/share/locale", |
69903f3b722b
7166082 pkg command does not handle Japanese character encoding on Solaris 11
Abhinandan Ekande <abhinandan.ekande@oracle.com>
parents:
2693
diff
changeset
|
1591 |
codeset=locale.getpreferredencoding()) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1592 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1593 |
# Make all warnings be errors. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1594 |
warnings.simplefilter('error') |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1595 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1596 |
__retval = handle_errors(main_func) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1597 |
try: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1598 |
logging.shutdown() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1599 |
except IOError: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1600 |
# Ignore python's spurious pipe problems. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1601 |
pass |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff
changeset
|
1602 |
sys.exit(__retval) |