author | Brock Pytlik <bpytlik@sun.com> |
Mon, 16 Aug 2010 16:48:50 -0700 | |
changeset 2026 | d1b30615bc99 |
parent 1977 | 1e2b423ee045 |
child 2028 | b2c674e6ee28 |
permissions | -rwxr-xr-x |
1516
8c950a3b4171
10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents:
1507
diff
changeset
|
1 |
#!/usr/bin/python2.6 |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
2 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
4 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
8 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
13 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
19 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
21 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
22 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
23 |
# |
1946
8ef3acf32d54
16132 various bits of pkg specify non-existent domains to gettext.install
Richard Lowe <richlowe@richlowe.net>
parents:
1732
diff
changeset
|
24 |
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
25 |
# |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
26 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
27 |
import calendar |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
28 |
import getopt |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
29 |
import gettext |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
30 |
import os |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
31 |
import shutil |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
32 |
import sys |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
33 |
import tempfile |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
34 |
import traceback |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
35 |
import urllib |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
36 |
import urlparse |
1715
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1600
diff
changeset
|
37 |
import warnings |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
38 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
39 |
import pkg.catalog as catalog |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
40 |
import pkg.client.progress as progress |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1946
diff
changeset
|
41 |
import pkg.config as cfg |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
42 |
import pkg.fmri |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
43 |
import pkg.manifest as manifest |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
44 |
import pkg.client.api_errors as api_errors |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
45 |
import pkg.client.publisher as publisher |
1977
1e2b423ee045
16565 transport module init exposes latent bug in packagemanager
johansen <johansen@opensolaris.org>
parents:
1974
diff
changeset
|
46 |
import pkg.client.transport.transport as transport |
1507
b956ea23d3a6
11735 pkg history data files should not be executable
Richard Lowe <richlowe@richlowe.net>
parents:
1431
diff
changeset
|
47 |
import pkg.misc as misc |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
48 |
import pkg.publish.transaction as trans |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
49 |
import pkg.search_errors as search_errors |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
50 |
import pkg.server.repository as sr |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
51 |
import pkg.version as version |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
52 |
|
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
440
diff
changeset
|
53 |
from pkg.client import global_settings |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1977
diff
changeset
|
54 |
from pkg.misc import (config_temp_root, emsg, get_pkg_otw_size, msg, PipeError) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
55 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
56 |
# Globals |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
57 |
cache_dir = None |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
58 |
complete_catalog = None |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
59 |
download_start = False |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
60 |
repo_cache = {} |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
61 |
tmpdirs = [] |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
62 |
temp_root = None |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
63 |
xport = None |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
64 |
xport_cfg = None |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
65 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
66 |
def error(text): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
67 |
"""Emit an error message prefixed by the command name """ |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
68 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
69 |
# If we get passed something like an Exception, we can convert |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
70 |
# it down to a string. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
71 |
text = str(text) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
72 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
73 |
# If the message starts with whitespace, assume that it should come |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
74 |
# *before* the command-name prefix. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
75 |
text_nows = text.lstrip() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
76 |
ws = text[:len(text) - len(text_nows)] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
77 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
78 |
# This has to be a constant value as we can't reliably get our actual |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
79 |
# program name on all platforms. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
80 |
emsg(ws + "pkgrecv: " + text_nows) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
81 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
82 |
def usage(usage_error=None, retcode=2): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
83 |
"""Emit a usage message and optionally prefix it with a more specific |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
84 |
error message. Causes program to exit.""" |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
85 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
86 |
if usage_error: |
971
67d3507036ab
2422 error/usage message program identification is inconsistent in pkgrecv
Tom Mueller <Tom.Mueller@sun.com>
parents:
856
diff
changeset
|
87 |
error(usage_error) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
88 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
89 |
msg(_("""\ |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
90 |
Usage: |
1732
05e756645b7f
8432 document proxy environment variables
Stephen Hahn <sch@sun.com>
parents:
1715
diff
changeset
|
91 |
pkgrecv [-s src_repo_uri] [-d (path|dest_uri)] [-kr] [-m match] |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
92 |
(fmri|pattern) ... |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
93 |
pkgrecv [-s src_repo_uri] -n |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
94 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
95 |
Options: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
96 |
-c cache_dir The path to a directory that will be used to cache |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
97 |
downloaded content. If one is not supplied, the |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
98 |
client will automatically pick a cache directory. |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
99 |
In the case where a download is interrupted, and a |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
100 |
cache directory was automatically chosen, use this |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
101 |
option to resume the download. |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
102 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
103 |
-d path_or_uri The path of a directory to save the retrieved package |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
104 |
to, or the URI of a repository to republish it to. If |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
105 |
not provided, the default value is the current working |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
106 |
directory. If a directory path is provided, then |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
107 |
package content will only be retrieved if it does not |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
108 |
already exist in the target directory. If a repository |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
109 |
URI is provided, a temporary directory will be created |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
110 |
and all of the package data retrieved before attempting |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
111 |
to republish it. |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
112 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
113 |
-h Display this usage message. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
114 |
-k Keep the retrieved package content compressed, ignored |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
115 |
when republishing. Should not be used with pkgsend. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
116 |
-m match Controls matching behaviour using the following values: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
117 |
all-timestamps |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
118 |
includes all matching timestamps, not just |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
119 |
latest (implies all-versions) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
120 |
all-versions |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
121 |
includes all matching versions, not just latest |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
122 |
-n List the most recent versions of the packages available |
1732
05e756645b7f
8432 document proxy environment variables
Stephen Hahn <sch@sun.com>
parents:
1715
diff
changeset
|
123 |
from the specified repository and exit. (All other |
05e756645b7f
8432 document proxy environment variables
Stephen Hahn <sch@sun.com>
parents:
1715
diff
changeset
|
124 |
options except -s will be ignored.) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
125 |
-r Recursively evaluates all dependencies for the provided |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
126 |
list of packages and adds them to the list. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
127 |
-s src_repo_uri A URI representing the location of a pkg(5) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
128 |
repository to retrieve package data from. |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
129 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
130 |
Environment: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
131 |
PKG_DEST Destination directory or repository URI |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
132 |
PKG_SRC Source repository URI""")) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
133 |
sys.exit(retcode) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
134 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
135 |
def cleanup(caller_error=False): |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
136 |
"""To be called at program finish.""" |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
137 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
138 |
for d in tmpdirs: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
139 |
# If the cache_dir is in the list of directories that should |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
140 |
# be cleaned up, but we're exiting with an error, then preserve |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
141 |
# the directory so downloads may be resumed. |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
142 |
if d == cache_dir and caller_error and download_start: |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
143 |
error(_("\n\nCached files were preserved in the " |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
144 |
"following directory:\n\t%s\nUse pkgrecv -c " |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
145 |
"to resume the interrupted download.") % cache_dir) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
146 |
continue |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
147 |
shutil.rmtree(d, True) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
148 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
149 |
def abort(err=None, retcode=1): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
150 |
"""To be called when a fatal error is encountered.""" |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
151 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
152 |
if err: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
153 |
# Clear any possible output first. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
154 |
msg("") |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
155 |
error(err) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
156 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
157 |
cleanup() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
158 |
sys.exit(retcode) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
159 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
160 |
def get_tracker(quiet=False): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
161 |
if quiet: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
162 |
progresstracker = progress.QuietProgressTracker() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
163 |
else: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
164 |
try: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
165 |
progresstracker = \ |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
166 |
progress.FancyUNIXProgressTracker() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
167 |
except progress.ProgressTrackerException: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
168 |
progresstracker = progress.CommandLineProgressTracker() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
169 |
return progresstracker |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
170 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
171 |
def get_manifest(pfmri, basedir, contents=False): |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
172 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
173 |
m = None |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
174 |
pkgdir = os.path.join(basedir, pfmri.get_dir_path()) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
175 |
mpath = os.path.join(pkgdir, "manifest") |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
176 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
177 |
if not os.path.exists(mpath): |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
178 |
m = xport.get_manifest(pfmri) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
179 |
else: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
180 |
try: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
181 |
m = manifest.CachedManifest(pfmri, basedir) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
182 |
except: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
183 |
abort(err=_("Unable to parse manifest '%(mpath)s' for " |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
184 |
"package '%(pfmri)s'") % locals()) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
185 |
|
1132
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
186 |
if contents: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
187 |
return m.tostr_unsorted() |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
188 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
189 |
return m |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
190 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
191 |
def get_repo(uri): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
192 |
if uri in repo_cache: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
193 |
return repo_cache[uri] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
194 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
195 |
parts = urlparse.urlparse(uri, "file", allow_fragments=0) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
196 |
path = urllib.url2pathname(parts[2]) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
197 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
198 |
try: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
199 |
repo = sr.Repository(read_only=True, repo_root=path) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
200 |
except EnvironmentError, _e: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
201 |
error("an error occurred while trying to " \ |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
202 |
"initialize the repository directory " \ |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
203 |
"structures:\n%s" % _e) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
204 |
sys.exit(1) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
205 |
except sr.RepositoryError, _e: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
206 |
error(_e) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
207 |
sys.exit(1) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1946
diff
changeset
|
208 |
except cfg.ConfigError, _e: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
209 |
error("repository configuration error: %s" % _e) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
210 |
sys.exit(1) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
211 |
except (search_errors.IndexingException, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
212 |
api_errors.PermissionsException), _e: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
213 |
emsg(str(_e), "INDEX") |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
214 |
sys.exit(1) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
215 |
repo_cache[uri] = repo |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
216 |
return repo |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
217 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
218 |
def expand_fmri(pfmri, constraint=version.CONSTRAINT_AUTO): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
219 |
"""Find matching fmri using CONSTRAINT_AUTO cache for performance. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
220 |
Returns None if no matching fmri is found.""" |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
221 |
if isinstance(pfmri, str): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
222 |
pfmri = pkg.fmri.PkgFmri(pfmri, "5.11") |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
223 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
224 |
for f in complete_catalog.get(pfmri.pkg_name, []): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
225 |
if not pfmri.version or \ |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
226 |
f.version.is_successor(pfmri.version, constraint): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
227 |
return f |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
228 |
return |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
229 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
230 |
def expand_matching_fmris(fmri_list, pfmri_strings): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
231 |
"""find matching fmris using pattern matching and |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
232 |
constraint auto.""" |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
233 |
counthash = {} |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
234 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
235 |
try: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
236 |
patterns = [ |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
237 |
pkg.fmri.MatchingPkgFmri(s, "5.11") |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
238 |
for s in pfmri_strings |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
239 |
] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
240 |
except pkg.fmri.FmriError, e: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
241 |
abort(err=e) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
242 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
243 |
# XXX publisher prefixes have to be stripped for catalog matching |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
244 |
# for now; awaits v1 client support, etc. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
245 |
pattern_pubs = {} |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
246 |
for f in patterns: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
247 |
if f.publisher: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
248 |
pattern_pubs[f.get_fmri(anarchy=True)] = f.publisher |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
249 |
f.publisher = None |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
250 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
251 |
matches, unmatched = catalog.extract_matching_fmris(fmri_list, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
252 |
patterns=patterns, constraint=version.CONSTRAINT_AUTO, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
253 |
matcher=pkg.fmri.glob_match) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
254 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
255 |
if unmatched: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
256 |
match_err = api_errors.InventoryException(**unmatched) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
257 |
emsg(match_err) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
258 |
abort() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
259 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
260 |
# XXX restore stripped publisher information. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
261 |
for m in matches: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
262 |
pub = pattern_pubs.pop(str(m), None) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
263 |
if pub: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
264 |
m.publisher = pub |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
265 |
return matches |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
266 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
267 |
def get_dependencies(src_uri, fmri_list, basedir, tracker): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
268 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
269 |
old_limit = sys.getrecursionlimit() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
270 |
# The user may be recursing 'entire' or 'redistributable'. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
271 |
sys.setrecursionlimit(3000) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
272 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
273 |
s = set() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
274 |
for f in fmri_list: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
275 |
pfmri = expand_fmri(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
276 |
_get_dependencies(src_uri, s, pfmri, basedir, tracker) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
277 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
278 |
# Restore the previous default. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
279 |
sys.setrecursionlimit(old_limit) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
280 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
281 |
return list(s) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
282 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
283 |
def _get_dependencies(src_uri, s, pfmri, basedir, tracker): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
284 |
"""Expand all dependencies.""" |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
285 |
tracker.evaluate_progress(fmri=pfmri) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
286 |
s.add(pfmri) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
287 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
288 |
m = get_manifest(pfmri, basedir) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
289 |
for a in m.gen_actions_by_type("depend"): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
290 |
new_fmri = expand_fmri(a.attrs["fmri"]) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
291 |
if new_fmri and new_fmri not in s: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
292 |
_get_dependencies(src_uri, s, new_fmri, basedir, |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
293 |
tracker) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
294 |
return s |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
295 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
296 |
def add_hashes_to_multi(mfst, multi): |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
297 |
"""Takes a manifest and a multi object. Adds the hashes to the |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
298 |
multi object, returns (nfiles, nbytes) tuple.""" |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
299 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
300 |
nf = 0 |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
301 |
nb = 0 |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
302 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
303 |
for atype in ("file", "license"): |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
304 |
for a in mfst.gen_actions_by_type(atype): |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
305 |
if a.needsdata(None, None): |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
306 |
multi.add_action(a) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
307 |
nf += 1 |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
308 |
nb += get_pkg_otw_size(a) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
309 |
return nf, nb |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
310 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
311 |
def prune(fmri_list, all_versions, all_timestamps): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
312 |
"""Returns a filtered version of fmri_list based on the provided |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
313 |
parameters.""" |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
314 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
315 |
if all_timestamps: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
316 |
pass |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
317 |
elif all_versions: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
318 |
dedup = {} |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
319 |
for f in fmri_list: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
320 |
dedup.setdefault(f.get_short_fmri(), []).append(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
321 |
fmri_list = [sorted(dedup[f], reverse=True)[0] for f in dedup] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
322 |
else: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
323 |
dedup = {} |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
324 |
for f in fmri_list: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
325 |
dedup.setdefault(f.pkg_name, []).append(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
326 |
fmri_list = [sorted(dedup[f], reverse=True)[0] for f in dedup] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
327 |
return fmri_list |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
328 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
329 |
def list_newest_fmris(fmri_list): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
330 |
"""List the provided fmris.""" |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
331 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
332 |
fm_hash = {} |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
333 |
fm_list = [] |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
334 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
335 |
# Order all fmris by package name |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
336 |
for f in sorted(fmri_list): |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
337 |
if f.pkg_name in fm_hash: |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
338 |
fm_hash[f.pkg_name].append(f) |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
339 |
else: |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
340 |
fm_hash[f.pkg_name] = [ f ] |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
341 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
342 |
# sort each fmri list |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
343 |
for k in fm_hash.keys(): |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
344 |
fm_hash[k].sort(reverse = True) |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
345 |
l = fm_hash[k] |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
346 |
fm_list.append(l[0]) |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
347 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
348 |
for e in fm_list: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
349 |
msg(e.get_fmri(anarchy=True)) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
350 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
351 |
def fetch_catalog(src_pub, tracker): |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
352 |
"""Fetch the catalog from src_uri.""" |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
353 |
global complete_catalog |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
354 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
355 |
src_uri = src_pub.selected_repository.origins[0].uri |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
356 |
tracker.catalog_start(src_uri) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
357 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
358 |
if not src_pub.meta_root: |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
359 |
# Create a temporary directory for catalog. |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
360 |
cat_dir = tempfile.mkdtemp(dir=temp_root) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
361 |
tmpdirs.append(cat_dir) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
362 |
src_pub.meta_root = cat_dir |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
363 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
364 |
src_pub.transport = xport |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
365 |
src_pub.refresh(True, True) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
366 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
367 |
cat = src_pub.catalog |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
368 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
369 |
d = {} |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
370 |
fmri_list = [] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
371 |
for f in cat.fmris(): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
372 |
fmri_list.append(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
373 |
d.setdefault(f.pkg_name, [f]).append(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
374 |
for k in d.keys(): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
375 |
d[k].sort(reverse=True) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
376 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
377 |
complete_catalog = d |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
378 |
tracker.catalog_done() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
379 |
return fmri_list |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
380 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
381 |
def main_func(): |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
382 |
global cache_dir, download_start, xport, xport_cfg |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
383 |
all_timestamps = False |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
384 |
all_versions = False |
420
0b6ecdba5641
2272 pkgrecv should uncompress by default
Brad Hall <bhall@eng.sun.com>
parents:
409
diff
changeset
|
385 |
keep_compressed = False |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
386 |
list_newest = False |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
387 |
recursive = False |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
388 |
src_uri = None |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
389 |
target = None |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
390 |
incoming_dir = None |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
391 |
src_pub = None |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
392 |
targ_pub = None |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
393 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
394 |
temp_root = config_temp_root() |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
395 |
|
1946
8ef3acf32d54
16132 various bits of pkg specify non-existent domains to gettext.install
Richard Lowe <richlowe@richlowe.net>
parents:
1732
diff
changeset
|
396 |
gettext.install("pkg", "/usr/share/locale") |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
397 |
|
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
440
diff
changeset
|
398 |
global_settings.client_name = "pkgrecv" |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
399 |
target = os.environ.get("PKG_DEST", None) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
400 |
src_uri = os.environ.get("PKG_SRC", None) |
696
6bbfd2dece6f
4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents:
440
diff
changeset
|
401 |
|
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
402 |
try: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
403 |
opts, pargs = getopt.getopt(sys.argv[1:], "c:d:hkm:nrs:") |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
404 |
except getopt.GetoptError, e: |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
405 |
usage(_("Illegal option -- %s") % e.opt) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
406 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
407 |
for opt, arg in opts: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
408 |
if opt == "-c": |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
409 |
cache_dir = arg |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
410 |
elif opt == "-d": |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
411 |
target = arg |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
412 |
elif opt == "-h": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
413 |
usage(retcode=0) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
414 |
elif opt == "-k": |
420
0b6ecdba5641
2272 pkgrecv should uncompress by default
Brad Hall <bhall@eng.sun.com>
parents:
409
diff
changeset
|
415 |
keep_compressed = True |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
416 |
elif opt == "-n": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
417 |
list_newest = True |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
418 |
elif opt == "-r": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
419 |
recursive = True |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
420 |
elif opt == "-s": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
421 |
src_uri = arg |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
422 |
elif opt == "-m": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
423 |
if arg == "all-timestamps": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
424 |
all_timestamps = True |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
425 |
elif arg == "all-versions": |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
426 |
all_versions = True |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
427 |
else: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
428 |
usage(_("Illegal option value -- %s") % arg) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
429 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
430 |
if not src_uri: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
431 |
usage(_("a source repository must be provided")) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
432 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
433 |
if not cache_dir: |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
434 |
cache_dir = tempfile.mkdtemp(dir=temp_root) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
435 |
# Only clean-up cache dir if implicitly created by pkgrecv. |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
436 |
# User's cache-dirs should be preserved |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
437 |
tmpdirs.append(cache_dir) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
438 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
439 |
incoming_dir = tempfile.mkdtemp(dir=temp_root) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
440 |
tmpdirs.append(incoming_dir) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
441 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
442 |
# Create transport and transport config |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
443 |
xport, xport_cfg = transport.setup_transport() |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
444 |
xport_cfg.cached_download_dir = cache_dir |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
445 |
xport_cfg.incoming_download_dir = incoming_dir |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
446 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
447 |
# Configure src publisher |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
448 |
src_pub = transport.setup_publisher(src_uri, "source", xport, xport_cfg, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
449 |
remote_publishers=True) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
450 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
451 |
tracker = get_tracker() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
452 |
if list_newest: |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
453 |
if pargs or len(pargs) > 0: |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
454 |
usage(_("-n takes no options")) |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
455 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
456 |
fmri_list = fetch_catalog(src_pub, tracker) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
457 |
list_newest_fmris(fmri_list) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
458 |
return 0 |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
459 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
460 |
if pargs == None or len(pargs) == 0: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
461 |
usage(_("must specify at least one pkgfmri")) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
462 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
463 |
defer_refresh = False |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
464 |
republish = False |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
465 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
466 |
if not target: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
467 |
target = basedir = os.getcwd() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
468 |
elif target.find("://") != -1: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
469 |
basedir = tempfile.mkdtemp(dir=temp_root) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
470 |
tmpdirs.append(basedir) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
471 |
republish = True |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
472 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
473 |
targ_pub = transport.setup_publisher(target, "target", |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
474 |
xport, xport_cfg) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
475 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
476 |
# Files have to be decompressed for republishing. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
477 |
keep_compressed = False |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
478 |
if target.startswith("file://"): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
479 |
# For efficiency, and publishing speed, don't update |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
480 |
# indexes until all file publishing is finished. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
481 |
defer_refresh = True |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
482 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
483 |
# Check to see if the repository exists first. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
484 |
try: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
485 |
t = trans.Transaction(target, xport=xport, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
486 |
pub=targ_pub) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
487 |
except trans.TransactionRepositoryInvalidError, e: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
488 |
txt = str(e) + "\n\n" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
489 |
txt += _("To create a repository, use the " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
490 |
"pkgsend command.") |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
491 |
abort(err=txt) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
492 |
except trans.TransactionRepositoryConfigError, e: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
493 |
txt = str(e) + "\n\n" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
494 |
txt += _("The repository configuration for " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
495 |
"the repository located at '%s' is not " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
496 |
"valid or the specified path does not " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
497 |
"exist. Please correct the configuration " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
498 |
"of the repository or create a new " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
499 |
"one.") % target |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
500 |
abort(err=txt) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
501 |
except trans.TransactionError, e: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
502 |
abort(err=e) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
503 |
else: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
504 |
basedir = target |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
505 |
if not os.path.exists(basedir): |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
506 |
try: |
1507
b956ea23d3a6
11735 pkg history data files should not be executable
Richard Lowe <richlowe@richlowe.net>
parents:
1431
diff
changeset
|
507 |
os.makedirs(basedir, misc.PKG_DIR_MODE) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
508 |
except: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
509 |
error(_("Unable to create basedir '%s'.") % \ |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
510 |
basedir) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
511 |
return 1 |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
512 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
513 |
xport_cfg.pkgdir = basedir |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
514 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
515 |
all_fmris = fetch_catalog(src_pub, tracker) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
516 |
fmri_arguments = pargs |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
517 |
fmri_list = prune(list(set(expand_matching_fmris(all_fmris, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
518 |
fmri_arguments))), all_versions, all_timestamps) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
519 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
520 |
if recursive: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
521 |
msg(_("Retrieving manifests for dependency evaluation ...")) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
522 |
tracker.evaluate_start() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
523 |
fmri_list = prune(get_dependencies(src_uri, fmri_list, basedir, |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
524 |
tracker), all_versions, all_timestamps) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
525 |
tracker.evaluate_done() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
526 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
527 |
def get_basename(pfmri): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
528 |
open_time = pfmri.get_timestamp() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
529 |
return "%d_%s" % \ |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
530 |
(calendar.timegm(open_time.utctimetuple()), |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
531 |
urllib.quote(str(pfmri), "")) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
532 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
533 |
# First, retrieve the manifests and calculate package transfer sizes. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
534 |
npkgs = len(fmri_list) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
535 |
nfiles = 0 |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
536 |
nbytes = 0 |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
537 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
538 |
if not recursive: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
539 |
msg(_("Retrieving manifests for package evaluation ...")) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
540 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
541 |
tracker.evaluate_start(npkgs=npkgs) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
542 |
retrieve_list = [] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
543 |
while fmri_list: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
544 |
f = fmri_list.pop() |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
545 |
m = get_manifest(f, basedir) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
546 |
pkgdir = os.path.join(basedir, f.get_dir_path()) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
547 |
mfile = xport.multi_file_ni(src_pub, pkgdir, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
548 |
not keep_compressed, tracker) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
549 |
|
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
550 |
nf, nb = add_hashes_to_multi(m, mfile) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
551 |
nfiles += nf |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
552 |
nbytes += nb |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
553 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
554 |
retrieve_list.append((f, mfile)) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
555 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
556 |
tracker.evaluate_progress(fmri=f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
557 |
tracker.evaluate_done() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
558 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
559 |
# Next, retrieve and store the content for each package. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
560 |
msg(_("Retrieving package content ...")) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
561 |
tracker.download_set_goal(len(retrieve_list), nfiles, nbytes) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
562 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
563 |
publish_list = [] |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
564 |
while retrieve_list: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
565 |
f, mfile = retrieve_list.pop() |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
566 |
tracker.download_start_pkg(f.get_fmri(include_scheme=False)) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
567 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
568 |
if mfile: |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
569 |
mfile.wait_files() |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
570 |
if not download_start: |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
571 |
download_start = True |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
572 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
573 |
if republish: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
574 |
publish_list.append(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
575 |
tracker.download_end_pkg() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
576 |
tracker.download_done() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
577 |
tracker.reset() |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
578 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
579 |
# Finally, republish the packages if needed. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
580 |
while publish_list: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
581 |
f = publish_list.pop() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
582 |
msg(_("Republishing %s ...") % f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
583 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
584 |
m = get_manifest(f, basedir) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
585 |
|
1132
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
586 |
# Get first line of original manifest so that inclusion of the |
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
587 |
# scheme can be determined. |
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
588 |
use_scheme = True |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
589 |
contents = get_manifest(f, basedir, contents=True) |
1132
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
590 |
if contents.splitlines()[0].find("pkg:/") == -1: |
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
591 |
use_scheme = False |
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
592 |
|
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
593 |
pkg_name = f.get_fmri(include_scheme=use_scheme) |
1abf9cf8f69c
9206 pkgrecv'd packages may not have matching comment in manifest
Shawn Walker <srw@sun.com>
parents:
1118
diff
changeset
|
594 |
pkgdir = os.path.join(basedir, f.get_dir_path()) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
595 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
596 |
# This is needed so any previous failures for a package |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
597 |
# can be aborted. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
598 |
trans_id = get_basename(f) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
599 |
|
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
600 |
if not targ_pub: |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
601 |
targ_pub = transport.setup_publisher(target, "target", |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
602 |
xport, xport_cfg) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
603 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
604 |
try: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
605 |
t = trans.Transaction(target, pkg_name=pkg_name, |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
606 |
trans_id=trans_id, refresh_index=not defer_refresh, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
607 |
xport=xport, pub=targ_pub) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
608 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
609 |
# Remove any previous failed attempt to |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
610 |
# to republish this package. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
611 |
try: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
612 |
t.close(abandon=True) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
613 |
except: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
614 |
# It might not exist already. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
615 |
pass |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
616 |
|
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
617 |
t.open() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
618 |
for a in m.gen_actions(): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
619 |
if a.name == "set" and \ |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
620 |
a.attrs.get("name", "") in ("fmri", |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
621 |
"pkg.fmri"): |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
622 |
# To be consistent with the server, |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
623 |
# the fmri can't be added to the |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
624 |
# manifest. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
625 |
continue |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
626 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
627 |
if hasattr(a, "hash"): |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
628 |
fname = os.path.join(pkgdir, |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
629 |
a.hash) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
630 |
a.data = lambda: open(fname, |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
631 |
"rb") |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
632 |
t.add(a) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
633 |
t.close(refresh_index=not defer_refresh) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
634 |
except trans.TransactionError, e: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
635 |
abort(err=e) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
636 |
return 1 |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
637 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
638 |
# Dump all temporary data. |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
639 |
cleanup() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
640 |
|
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
641 |
if republish: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
642 |
if defer_refresh: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
643 |
msg(_("Refreshing repository search indices ...")) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
644 |
try: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
645 |
t = trans.Transaction(target, xport=xport, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
646 |
pub=targ_pub) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
647 |
t.refresh_index() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
648 |
except trans.TransactionError, e: |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
649 |
error(e) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
650 |
return 1 |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
651 |
return 0 |
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
652 |
|
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
653 |
if __name__ == "__main__": |
1715
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1600
diff
changeset
|
654 |
|
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1600
diff
changeset
|
655 |
# Make all warnings be errors. |
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1600
diff
changeset
|
656 |
warnings.simplefilter('error') |
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1600
diff
changeset
|
657 |
|
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
658 |
try: |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
659 |
__ret = main_func() |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
660 |
except (pkg.actions.ActionError, trans.TransactionError, |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
661 |
RuntimeError, api_errors.TransportError, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
662 |
api_errors.BadRepositoryURI, |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
663 |
api_errors.UnsupportedRepositoryURI), _e: |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
664 |
error(_e) |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
665 |
cleanup(True) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
666 |
__ret = 1 |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
667 |
except PipeError: |
440
cbd8cd1564a9
2104 pkgrecv: Spurious error message while downloading package with no files
Brad Hall <bhall@eng.sun.com>
parents:
420
diff
changeset
|
668 |
# We don't want to display any messages here to prevent |
cbd8cd1564a9
2104 pkgrecv: Spurious error message while downloading package with no files
Brad Hall <bhall@eng.sun.com>
parents:
420
diff
changeset
|
669 |
# possible further broken pipe (EPIPE) errors. |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
670 |
cleanup(False) |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
671 |
__ret = 1 |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
672 |
except (KeyboardInterrupt, api_errors.CanceledException): |
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
673 |
cleanup(True) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
674 |
__ret = 1 |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
675 |
except SystemExit, _e: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
676 |
cleanup(False) |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
677 |
raise _e |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
678 |
except: |
1974
6af683c5bde5
9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents:
1968
diff
changeset
|
679 |
cleanup(True) |
375
fa5286b09191
1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents:
diff
changeset
|
680 |
traceback.print_exc() |
1118
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
681 |
error( |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
682 |
_("\n\nThis is an internal error. Please let the " |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
683 |
"developers know about this\nproblem by filing a bug at " |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
684 |
"http://defect.opensolaris.org and including the\nabove " |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
685 |
"traceback and this message. The version of pkg(5) is " |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
686 |
"'%s'.") % pkg.VERSION) |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
687 |
__ret = 99 |
f2dd69165173
6342 pkgrecv should support local disk repository
Shawn Walker <srw@sun.com>
parents:
1063
diff
changeset
|
688 |
sys.exit(__ret) |