author | Yiteng Zhang <yiteng.zhang@oracle.com> |
Wed, 09 Mar 2016 11:27:23 -0800 | |
changeset 3321 | 52e8eec3014c |
parent 3273 | 776d569cd953 |
child 3329 | a3809949fb52 |
permissions | -rw-r--r-- |
1516
8c950a3b4171
10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents:
1507
diff
changeset
|
1 |
#!/usr/bin/python |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
2 |
# |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
4 |
# |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
8 |
# |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
13 |
# |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
19 |
# |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
21 |
# |
3321
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
22 |
# Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
23 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
24 |
import cStringIO |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
25 |
import codecs |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
26 |
import datetime |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
27 |
import errno |
3321
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
28 |
import hashlib |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
29 |
import logging |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
30 |
import os |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
31 |
import os.path |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
32 |
import shutil |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
33 |
import six |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
34 |
import stat |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
35 |
import sys |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
36 |
import tempfile |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
37 |
import zlib |
3321
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
38 |
|
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
39 |
from cryptography import x509 |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
40 |
from cryptography.hazmat.backends import default_backend |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
41 |
from six.moves.urllib.parse import unquote |
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
42 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
43 |
import pkg.actions as actions |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
44 |
import pkg.catalog as catalog |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
45 |
import pkg.client.api_errors as apx |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
46 |
import pkg.client.progress as progress |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
47 |
import pkg.client.publisher as publisher |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
48 |
import pkg.config as cfg |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
49 |
import pkg.digest as digest |
1452
bd6ffa78fed9
7960 client and depot need different organization of files
Brock Pytlik <bpytlik@sun.com>
parents:
1431
diff
changeset
|
50 |
import pkg.file_layout.file_manager as file_manager |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
51 |
import pkg.file_layout.layout as layout |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
52 |
import pkg.fmri as fmri |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
53 |
import pkg.indexer as indexer |
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
54 |
import pkg.lockfile as lockfile |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
55 |
import pkg.manifest |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
56 |
import pkg.p5i as p5i |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
57 |
import pkg.portable as portable |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
58 |
import pkg.misc as misc |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
59 |
import pkg.nrlock |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
60 |
import pkg.search_errors as se |
1895
0a260cc2a689
15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents:
1893
diff
changeset
|
61 |
import pkg.query_parser as qp |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
62 |
import pkg.server.catalog as old_catalog |
1895
0a260cc2a689
15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents:
1893
diff
changeset
|
63 |
import pkg.server.query_parser as sqp |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
64 |
import pkg.server.transaction as trans |
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
65 |
import pkg.pkgsubprocess as subprocess |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
66 |
import pkg.version |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
67 |
|
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
68 |
from pkg.pkggzip import PkgGzipFile |
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
69 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
70 |
CURRENT_REPO_VERSION = 4 |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
71 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
72 |
REPO_QUARANTINE_DIR = "pkg5-quarantine" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
73 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
74 |
REPO_VERIFY_BADHASH = 0 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
75 |
REPO_VERIFY_BADMANIFEST = 1 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
76 |
REPO_VERIFY_BADGZIP = 2 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
77 |
REPO_VERIFY_NOFILE = 3 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
78 |
REPO_VERIFY_PERM = 4 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
79 |
REPO_VERIFY_MFPERM = 5 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
80 |
REPO_VERIFY_BADSIG = 6 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
81 |
REPO_VERIFY_WARN_OPENPERMS = 7 |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
82 |
REPO_VERIFY_DEPENDERROR = 8 |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
83 |
REPO_VERIFY_UNKNOWN = 99 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
84 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
85 |
REPO_FIX_ITEM = 0 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
86 |
REPO_FIX_FAILED = 1 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
87 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
88 |
VERIFY_DEPENDENCY = "dependency" |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
89 |
verify_default_checks = frozenset([ |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
90 |
VERIFY_DEPENDENCY, |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
91 |
]) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
92 |
|
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
93 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
94 |
class RepositoryError(Exception): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
95 |
"""Base exception class for all Repository exceptions.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
96 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
97 |
def __init__(self, *args): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
98 |
Exception.__init__(self, *args) |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
99 |
if args: |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
100 |
self.data = args[0] |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
101 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
102 |
def __str__(self): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
103 |
return str(self.data) |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
104 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
105 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
106 |
class RepositoryExistsError(RepositoryError): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
107 |
"""Used to indicate that a repository already exists at the specified |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
108 |
location. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
109 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
110 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
111 |
def __str__(self): |
2064
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
112 |
return _("A package repository (or a directory with content) " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
113 |
"already exists at '{0}'.").format(self.data) |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
114 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
115 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
116 |
class RepositoryFileNotFoundError(RepositoryError): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
117 |
"""Used to indicate that the hash name provided for the requested file |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
118 |
does not exist.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
119 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
120 |
def __str__(self): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
121 |
return _("No file could be found for the specified " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
122 |
"hash name: '{0}'.").format(self.data) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
123 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
124 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
125 |
class RepositoryInvalidError(RepositoryError): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
126 |
"""Used to indicate that a valid repository could not be found at the |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
127 |
specified location.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
128 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
129 |
def __str__(self): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
130 |
if not self.data: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
131 |
return _("The specified path does not contain a valid " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
132 |
"package repository.") |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
133 |
return _("The path '{0}' does not contain a valid package " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
134 |
"repository.").format(self.data) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
135 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
136 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
137 |
class RepositoryInvalidFMRIError(RepositoryError): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
138 |
"""Used to indicate that the FMRI provided is invalid.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
139 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
140 |
|
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
141 |
class RepositoryInvalidIgnoreDepFMRIError(RepositoryError): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
142 |
"""Used to indicate an invalid FMRI in the ignored dependency |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
143 |
file.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
144 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
145 |
def __init__(self, filename, fmri): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
146 |
Exception.__init__(self) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
147 |
self.filename = filename |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
148 |
self.fmri = fmri |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
149 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
150 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
151 |
return _("The FMRI in ignored-dependency file: {fn} is " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
152 |
"invalid.\n'{fmri}'.").format(fn=self.filename, |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
153 |
fmri=self.fmri) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
154 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
155 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
156 |
class RepositoryInvalidIgnoreDepEntryError(RepositoryError): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
157 |
"""Used to indicate an invalid entry in the ignored dependency |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
158 |
file.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
159 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
160 |
def __init__(self, filename, entry): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
161 |
Exception.__init__(self) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
162 |
self.filename = filename |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
163 |
self.entry = entry |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
164 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
165 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
166 |
return _("The entry in ignored-dependency file: {fn} is " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
167 |
"invalid.\n'{entry}'.").format(fn=self.filename, |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
168 |
entry=self.entry) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
169 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
170 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
171 |
class RepositoryIgnoreDepEntryAttrError(RepositoryError): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
172 |
"""Used to indicate an unknown attribute for an ignored dep entry.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
173 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
174 |
def __init__(self, etype, entry=None, attrs=None): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
175 |
RepositoryError.__init__(self) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
176 |
self.etype = etype |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
177 |
self.entry = entry |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
178 |
self.attrs = attrs |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
179 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
180 |
def __str__(self): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
181 |
if self.etype == "missing": |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
182 |
return _("Missing attribute(s) in ignored-" |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
183 |
"dependency entry: '{entry}'.\n{attrs}.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
184 |
entry=self.entry, |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
185 |
attrs=", ".join(self.attrs)) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
186 |
elif self.etype == "unknown": |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
187 |
return _("Unknown attribute(s) found in ignored-" |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
188 |
"dependency entry: '{entry}'.\n{attrs}.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
189 |
entry=self.entry, attrs=", ".join(self.attrs)) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
190 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
191 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
192 |
class RepositoryUnqualifiedFMRIError(RepositoryError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
193 |
"""Used to indicate that the FMRI provided is valid, but is missing |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
194 |
publisher information.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
195 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
196 |
def __str__(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
197 |
return _("This operation requires that a default publisher has " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
198 |
"been set or that a publisher be specified in the FMRI " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
199 |
"'{0}'.").format(self.data) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
200 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
201 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
202 |
class RepositoryInvalidTransactionIDError(RepositoryError): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
203 |
"""Used to indicate that an invalid Transaction ID was supplied.""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
204 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
205 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
206 |
return _("No transaction matching '{0}' could be found.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
207 |
self.data) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
208 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
209 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
210 |
class RepositoryLockedError(RepositoryError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
211 |
"""Used to indicate that the repository is currently locked by another |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
212 |
thread or process and cannot be modified.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
213 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
214 |
def __init__(self, hostname=None, pid=None): |
2037
02c1ecc2b870
16910 transaction class repository creation references non-existent exception variable
Shawn Walker <shawn.walker@oracle.com>
parents:
2028
diff
changeset
|
215 |
RepositoryError.__init__(self) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
216 |
self.hostname = hostname |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
217 |
self.pid = pid |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
218 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
219 |
def __str__(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
220 |
if self.pid is not None: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
221 |
# Even if the host is none, use this message. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
222 |
return _("The repository cannot be modified as it is " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
223 |
"currently in use by another process: " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
224 |
"pid {pid} on {host}.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
225 |
pid=self.pid, host=self.hostname) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
226 |
return _("The repository cannot be modified as it is currently " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
227 |
"in use by another process.") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
228 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
229 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
230 |
class RepositoryManifestNotFoundError(RepositoryError): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
231 |
"""Used to indicate that the requested manifest could not be found.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
232 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
233 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
234 |
return _("No manifest could be found for the FMRI: '{0}'.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
235 |
self.data) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
236 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
237 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
238 |
class RepositoryMirrorError(RepositoryError): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
239 |
"""Used to indicate that the requested operation could not be performed |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
240 |
as the repository is in mirror mode.""" |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
241 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
242 |
def __str__(self): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
243 |
return _("The requested operation cannot be performed when the " |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
244 |
"repository is used in mirror mode.") |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
245 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
246 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
247 |
class RepositoryNoPublisherError(RepositoryError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
248 |
"""Used to indicate that the requested repository operation could not be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
249 |
completed as not default publisher has been set and one was not |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
250 |
specified. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
251 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
252 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
253 |
def __str__(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
254 |
return _("The requested operation could not be completed as a " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
255 |
"default publisher has not been configured.") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
256 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
257 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
258 |
class RepositoryNoSuchFileError(RepositoryError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
259 |
"""Used to indicate that the file provided does not exist.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
260 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
261 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
262 |
return _("No such file '{0}'.").format(self.data) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
263 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
264 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
265 |
class RepositoryReadOnlyError(RepositoryError): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
266 |
"""Used to indicate that the requested operation could not be performed |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
267 |
as the repository is currently read-only.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
268 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
269 |
def __str__(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
270 |
return _("The repository is read-only and cannot be modified.") |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
271 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
272 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
273 |
class RepositorySearchTokenError(RepositoryError): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
274 |
"""Used to indicate that the token(s) provided to search were undefined |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
275 |
or invalid.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
276 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
277 |
def __str__(self): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
278 |
if self.data is None: |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
279 |
return _("No token was provided to search.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
280 |
self.data) |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
281 |
|
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
282 |
return _("The specified search token '{0}' is invalid.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
283 |
self.data) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
284 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
285 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
286 |
class RepositorySearchUnavailableError(RepositoryError): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
287 |
"""Used to indicate that search is not currently available.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
288 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
289 |
def __str__(self): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
290 |
return _("Search functionality is temporarily unavailable.") |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
291 |
|
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
292 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
293 |
class RepositoryDuplicatePublisher(RepositoryError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
294 |
"""Raised when the publisher specified for an operation already exists, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
295 |
and so cannot be added again. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
296 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
297 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
298 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
299 |
return _("Publisher '{0}' already exists.").format(self.data) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
300 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
301 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
302 |
class RepositoryUnknownPublisher(RepositoryError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
303 |
"""Raised when the publisher specified for an operation is unknown to |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
304 |
the repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
305 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
306 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
307 |
def __str__(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
308 |
if not self.data: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
309 |
return _("No publisher was specified or no default " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
310 |
"publisher has been configured for the repository.") |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
311 |
return _("No publisher matching '{0}' could be found.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
312 |
self.data) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
313 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
314 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
315 |
class RepositoryVersionError(RepositoryError): |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
316 |
"""Raised when the repository specified uses a format greater than the |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
317 |
current format (version). |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
318 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
319 |
|
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
320 |
def __init__(self, location, version, current_version): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
321 |
RepositoryError.__init__(self) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
322 |
self.location = location |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
323 |
self.version = version |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
324 |
self.current_version = current_version |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
325 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
326 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
327 |
return("The repository at '{location}' is version " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
328 |
"'{version}'; only versions up to {current_version} are" |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
329 |
" supported.").format(**self.__dict__) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
330 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
331 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
332 |
class RepositoryInvalidVersionError(RepositoryError): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
333 |
"""Raised when the repository specified uses an unsupported format. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
334 |
(version). |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
335 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
336 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
337 |
def __init__(self, location, version, supported): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
338 |
RepositoryError.__init__(self) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
339 |
self.location = location |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
340 |
self.version = version |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
341 |
self.supported = supported |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
342 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
343 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
344 |
return("The repository at '{location}' is version " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
345 |
"'{version}'; only version {supported} repositories are" |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
346 |
" supported.").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
347 |
**self.__dict__) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
348 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
349 |
|
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
350 |
class RepositoryUnsupportedOperationError(RepositoryError): |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
351 |
"""Raised when the repository is unable to support an operation, |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
352 |
based upon its current configuration. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
353 |
""" |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
354 |
|
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
355 |
def __str__(self): |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
356 |
return("Operation not supported for this configuration.") |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
357 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
358 |
|
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
359 |
class RepositoryQuarantinedPathExistsError(RepositoryError): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
360 |
"""Raised when the repository is unable to quarantine a file because |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
361 |
a file of that name is already in quarantine. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
362 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
363 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
364 |
def __str__(self): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
365 |
return _("Quarantined path already exists.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
366 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
367 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
368 |
class RepositorySigNoTrustAnchorDirError(RepositoryError): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
369 |
"""Raised when the repository trust anchor directory could not be found |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
370 |
while performing repository verification.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
371 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
372 |
def __str__(self): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
373 |
return _("Unable to find trust anchor directory {0}").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
374 |
self.data) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
375 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
376 |
class _RepoStore(object): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
377 |
"""The _RepoStore object provides an interface for performing operations |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
378 |
on a set of package data contained within a repository. This class is |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
379 |
intended only for use by the Repository class. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
380 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
381 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
382 |
def __init__(self, allow_invalid=False, file_layout=None, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
383 |
file_root=None, log_obj=None, mirror=False, pub=None, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
384 |
read_only=False, root=None, |
1475
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
385 |
sort_file_max_size=indexer.SORT_FILE_MAX_SIZE, writable_root=None): |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
386 |
"""Prepare the repository for use.""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
387 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
388 |
self.__catalog = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
389 |
self.__catalog_root = None |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
390 |
# FileManager supports multiple layouts, but realistically, it |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
391 |
# is desirable to only support one per repository format |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
392 |
# version. |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
393 |
self.__file_layout = file_layout |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
394 |
self.__file_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
395 |
self.__in_flight_trans = {} |
2206
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
396 |
self.__read_only = read_only |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
397 |
self.__root = None |
1475
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
398 |
self.__sort_file_max_size = sort_file_max_size |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
399 |
self.__tmp_root = None |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
400 |
self.__writable_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
401 |
self.cache_store = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
402 |
self.catalog_version = -1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
403 |
self.manifest_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
404 |
self.trans_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
405 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
406 |
self.log_obj = log_obj |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
407 |
self.mirror = mirror |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
408 |
self.publisher = pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
409 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
410 |
# Set before root, since it's possible to have the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
411 |
# file_root in an entirely different location. The root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
412 |
# will govern file_root, if a value for file_root is not |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
413 |
# supplied. |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
414 |
if file_root: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
415 |
self.__set_file_root(file_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
416 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
417 |
# Must be set before remaining roots. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
418 |
self.__set_root(root) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
419 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
420 |
# Ideally, callers would just specify overrides for the feed |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
421 |
# cache root, index_root, etc. But this must be set after all |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
422 |
# of the others above. |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
423 |
self.__set_writable_root(writable_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
424 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
425 |
self.__search_available = False |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
426 |
self.__refresh_again = False |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
427 |
|
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
428 |
self.__lock = pkg.nrlock.NRLock() |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
429 |
if self.__tmp_root: |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
430 |
self.__lockfile = lockfile.LockFile(os.path.join( |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
431 |
self.__tmp_root, "lock"), |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
432 |
set_lockstr=lockfile.generic_lock_set_str, |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
433 |
get_lockstr=lockfile.generic_lock_get_str, |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
434 |
failure_exc=RepositoryLockedError, |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
435 |
provide_mutex=False) |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
436 |
else: |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
437 |
self.__lockfile = None |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
438 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
439 |
# Initialize. |
2065
314bed0b4ef8
16982 depot should be more cooperative about indexing during startup
Shawn Walker <shawn.walker@oracle.com>
parents:
2064
diff
changeset
|
440 |
self.__lock_rstore(blocking=True) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
441 |
try: |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
442 |
self.__init_state(allow_invalid=allow_invalid) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
443 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
444 |
self.__unlock_rstore() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
445 |
|
2206
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
446 |
def __set_read_only(self, value): |
2689
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
447 |
old_ro = self.__read_only |
2206
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
448 |
self.__read_only = value |
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
449 |
if self.__catalog: |
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
450 |
self.__catalog.read_only = value |
2689
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
451 |
if self.cache_store: |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
452 |
self.cache_store.readonly = value |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
453 |
if old_ro and not self.__read_only: |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
454 |
self.__lock_rstore(blocking=True) |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
455 |
try: |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
456 |
self.__init_state() |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
457 |
finally: |
ac4c03208948
7176881 _RepoStore doesn't pass on changes to read_only
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2606
diff
changeset
|
458 |
self.__unlock_rstore() |
2206
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
459 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
460 |
def __mkdtemp(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
461 |
"""Create a temp directory under repository directory for |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
462 |
various purposes.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
463 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
464 |
if not self.root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
465 |
return |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
466 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
467 |
if self.writable_root: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
468 |
root = self.writable_root |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
469 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
470 |
root = self.root |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
471 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
472 |
tempdir = os.path.normpath(os.path.join(root, "tmp")) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
473 |
misc.makedirs(tempdir) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
474 |
try: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
475 |
return tempfile.mkdtemp(dir=tempdir) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
476 |
except EnvironmentError as e: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
477 |
if e.errno == errno.EACCES: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
478 |
raise apx.PermissionsException( |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
479 |
e.filename) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
480 |
if e.errno == errno.EROFS: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
481 |
raise apx.ReadOnlyFileSystemException( |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
482 |
e.filename) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
483 |
raise |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
484 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
485 |
def __add_package(self, pfmri, manifest=None): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
486 |
"""Private version; caller responsible for repository |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
487 |
locking.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
488 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
489 |
if not manifest: |
1472
c50eb141435a
12128 client should pipeline manifest retrieval
johansen <johansen@sun.com>
parents:
1463
diff
changeset
|
490 |
manifest = self._get_manifest(pfmri, sig=True) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
491 |
c = self.catalog |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
492 |
c.add_package(pfmri, manifest=manifest) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
493 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
494 |
def __replace_package(self, pfmri, manifest=None): |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
495 |
"""Private version; caller responsible for repository |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
496 |
locking.""" |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
497 |
|
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
498 |
if not manifest: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
499 |
manifest = self._get_manifest(pfmri, sig=True) |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
500 |
c = self.catalog |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
501 |
c.remove_package(pfmri) |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
502 |
c.add_package(pfmri, manifest=manifest) |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
503 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
504 |
def __check_search(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
505 |
if not self.index_root: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
506 |
return |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
507 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
508 |
ind = indexer.Indexer(self.index_root, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
509 |
self._get_manifest, self.manifest, |
1475
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
510 |
log=self.__index_log, |
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
511 |
sort_file_max_size=self.__sort_file_max_size) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
512 |
cie = False |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
513 |
try: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
514 |
cie = ind.check_index_existence() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
515 |
except se.InconsistentIndexException: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
516 |
pass |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
517 |
if cie: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
518 |
if not self.__search_available: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
519 |
# State change to available. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
520 |
self.__index_log("Search Available") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
521 |
self.reset_search() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
522 |
self.__search_available = True |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
523 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
524 |
if self.__search_available: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
525 |
# State change to unavailable. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
526 |
self.__index_log("Search Unavailable") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
527 |
self.reset_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
528 |
self.__search_available = False |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
529 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
530 |
def __destroy_catalog(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
531 |
"""Destroy the catalog.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
532 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
533 |
self.__catalog = None |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
534 |
if self.catalog_root and os.path.exists(self.catalog_root): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
535 |
shutil.rmtree(self.catalog_root) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
536 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
537 |
@staticmethod |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
538 |
def __fmri_from_path(pkgpath, ver): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
539 |
"""Helper method that takes the full path to the package |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
540 |
directory and the name of the manifest file, and returns an FMRI |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
541 |
constructed from the information in those components.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
542 |
|
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
543 |
v = pkg.version.Version(unquote(ver), None) |
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
544 |
f = fmri.PkgFmri(unquote(os.path.basename(pkgpath))) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
545 |
f.version = v |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
546 |
return f |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
547 |
|
1472
c50eb141435a
12128 client should pipeline manifest retrieval
johansen <johansen@sun.com>
parents:
1463
diff
changeset
|
548 |
def _get_manifest(self, pfmri, sig=False): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
549 |
"""This function should be private; but is protected instead due |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
550 |
to its usage as a callback.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
551 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
552 |
mpath = self.manifest(pfmri) |
2073
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2065
diff
changeset
|
553 |
m = pkg.manifest.Manifest(pfmri) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
554 |
try: |
2073
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2065
diff
changeset
|
555 |
m.set_content(pathname=mpath, signatures=sig) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
556 |
except EnvironmentError as e: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
557 |
if e.errno == errno.ENOENT: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
558 |
raise RepositoryManifestNotFoundError( |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
559 |
e.filename) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
560 |
raise |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
561 |
return m |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
562 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
563 |
def __index_log(self, msg): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
564 |
return self.__log(msg, "INDEX") |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
565 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
566 |
def __get_transaction(self, trans_id): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
567 |
"""Return the in-flight transaction with the matching trans_id. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
568 |
""" |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
569 |
|
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
570 |
if not self.trans_root: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
571 |
raise RepositoryInvalidTransactionIDError(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
572 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
573 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
574 |
return self.__in_flight_trans[trans_id] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
575 |
except KeyError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
576 |
# Transaction not cached already, so load and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
577 |
# cache if possible. |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
578 |
t = trans.Transaction() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
579 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
580 |
t.reopen(self, trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
581 |
except trans.TransactionUnknownIDError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
582 |
raise RepositoryInvalidTransactionIDError( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
583 |
trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
584 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
585 |
if not t: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
586 |
raise RepositoryInvalidTransactionIDError( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
587 |
trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
588 |
self.__in_flight_trans[trans_id] = t |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
589 |
return t |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
590 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
591 |
def __discard_transaction(self, trans_id): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
592 |
"""Discard any state information cached for a Transaction.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
593 |
self.__in_flight_trans.pop(trans_id, None) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
594 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
595 |
def get_lock_status(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
596 |
"""Returns a tuple of booleans of the form (storage_locked, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
597 |
index_locked). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
598 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
599 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
600 |
storage_locked = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
601 |
try: |
2065
314bed0b4ef8
16982 depot should be more cooperative about indexing during startup
Shawn Walker <shawn.walker@oracle.com>
parents:
2064
diff
changeset
|
602 |
self.__lock_rstore() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
603 |
except RepositoryLockedError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
604 |
storage_locked = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
605 |
except: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
606 |
pass |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
607 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
608 |
self.__unlock_rstore() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
609 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
610 |
index_locked = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
611 |
if self.index_root and os.path.exists(self.index_root) and \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
612 |
(not self.read_only or self.writable_root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
613 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
614 |
ind = indexer.Indexer(self.index_root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
615 |
self._get_manifest, self.manifest, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
616 |
log=self.__index_log, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
617 |
sort_file_max_size=self.__sort_file_max_size) |
2065
314bed0b4ef8
16982 depot should be more cooperative about indexing during startup
Shawn Walker <shawn.walker@oracle.com>
parents:
2064
diff
changeset
|
618 |
ind.lock(blocking=False) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
619 |
except se.IndexLockedException: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
620 |
index_locked = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
621 |
except: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
622 |
pass |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
623 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
624 |
if ind and not index_locked: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
625 |
# If ind is defined, the index exists, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
626 |
# and a lock was obtained because |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
627 |
# index_locked is False, so call |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
628 |
# unlock(). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
629 |
ind.unlock() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
630 |
return storage_locked, index_locked |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
631 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
632 |
def get_status(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
633 |
"""Return a dictionary of status information about the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
634 |
repository storage object. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
635 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
636 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
637 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
638 |
cat = self.catalog |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
639 |
pkg_count = cat.package_count |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
640 |
pkg_ver_count = cat.package_version_count |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
641 |
lcat_update = catalog.datetime_to_basic_ts( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
642 |
cat.last_modified) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
643 |
except: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
644 |
# Can't get the info, drive on. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
645 |
pkg_count = 0 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
646 |
pkg_ver_count = 0 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
647 |
lcat_update = "" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
648 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
649 |
storage_locked, index_locked = self.get_lock_status() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
650 |
if storage_locked: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
651 |
rstatus = "processing" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
652 |
elif index_locked: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
653 |
rstatus = "indexing" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
654 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
655 |
rstatus = "online" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
656 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
657 |
return { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
658 |
"package-count": pkg_count, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
659 |
"package-version-count": pkg_ver_count, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
660 |
"last-catalog-update": lcat_update, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
661 |
"status": rstatus, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
662 |
} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
663 |
|
2065
314bed0b4ef8
16982 depot should be more cooperative about indexing during startup
Shawn Walker <shawn.walker@oracle.com>
parents:
2064
diff
changeset
|
664 |
def __lock_rstore(self, blocking=False, process=True): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
665 |
"""Locks the repository preventing multiple consumers from |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
666 |
modifying it during operations.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
667 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
668 |
# First, attempt to obtain a thread lock. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
669 |
if not self.__lock.acquire(blocking=blocking): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
670 |
raise RepositoryLockedError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
671 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
672 |
if not process or (self.read_only and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
673 |
not self.writable_root) or not (self.__tmp_root and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
674 |
os.path.exists(self.__tmp_root)): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
675 |
# Process lock wasn't desired, or repository structure |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
676 |
# doesn't exist yet or is readonly so a file lock cannot |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
677 |
# be obtained. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
678 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
679 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
680 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
681 |
# Attempt to obtain a file lock. |
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
682 |
self.__lockfile.lock(blocking=blocking) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
683 |
except EnvironmentError as e: |
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
684 |
if e.errno == errno.EACCES: |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
685 |
self.__lock.release() |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
686 |
raise apx.PermissionsException( |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
687 |
e.filename) |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
688 |
if e.errno == errno.EROFS: |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
689 |
self.__lock.release() |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
690 |
raise apx.ReadOnlyFileSystemException( |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
691 |
e.filename) |
2974
753adc11f1a6
17376567 Unable to use pkgrecv - failing with [Errno 22] Invalid argument
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2970
diff
changeset
|
692 |
if e.errno == errno.EINVAL: |
753adc11f1a6
17376567 Unable to use pkgrecv - failing with [Errno 22] Invalid argument
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2970
diff
changeset
|
693 |
self.__lock.release() |
753adc11f1a6
17376567 Unable to use pkgrecv - failing with [Errno 22] Invalid argument
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2970
diff
changeset
|
694 |
raise apx.InvalidLockException( |
753adc11f1a6
17376567 Unable to use pkgrecv - failing with [Errno 22] Invalid argument
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2970
diff
changeset
|
695 |
e.filename) |
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
696 |
|
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
697 |
self.__lock.release() |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
698 |
raise |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
699 |
except: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
700 |
# If process lock fails, ensure thread lock is released. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
701 |
self.__lock.release() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
702 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
703 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
704 |
def __log(self, msg, context="", severity=logging.INFO): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
705 |
if self.log_obj: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
706 |
self.log_obj.log(msg=msg, context=context, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
707 |
severity=severity) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
708 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
709 |
def __purge_search_index(self): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
710 |
"""Private helper function to dump repository search data.""" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
711 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
712 |
if not self.index_root or not os.path.exists(self.index_root): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
713 |
return |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
714 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
715 |
ind = indexer.Indexer(self.index_root, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
716 |
self._get_manifest, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
717 |
self.manifest, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
718 |
log=self.__index_log, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
719 |
sort_file_max_size=self.__sort_file_max_size) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
720 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
721 |
# To prevent issues with NFS consumers, attempt to lock the |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
722 |
# index first, but don't hold the lock as holding a lock while |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
723 |
# removing the directory containing it can cause rmtree() to |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
724 |
# fail. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
725 |
ind.lock(blocking=False) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
726 |
ind.unlock() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
727 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
728 |
# Since the lock succeeded, immediately try to rename the index |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
729 |
# directory to prevent other consumers from using the index |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
730 |
# while it is being removed since a lock can't be held. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
731 |
portable.rename(self.index_root, self.index_root + ".old") |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
732 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
733 |
shutil.rmtree(self.index_root + ".old") |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
734 |
except EnvironmentError as e: |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
735 |
if e.errno == errno.EACCES: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
736 |
raise apx.PermissionsException( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
737 |
e.filename) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
738 |
if e.errno == errno.EROFS: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
739 |
raise apx.ReadOnlyFileSystemException( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
740 |
e.filename) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
741 |
if e.errno != errno.ENOENT: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
742 |
raise |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
743 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
744 |
# Discard in-memory search data. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
745 |
self.reset_search() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
746 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
747 |
def __rebuild(self, build_catalog=True, build_index=False, lm=None, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
748 |
incremental=False): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
749 |
"""Private version; caller responsible for repository |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
750 |
locking.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
751 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
752 |
if not (build_catalog or build_index) or not self.manifest_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
753 |
# Nothing to do. |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
754 |
return |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
755 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
756 |
if build_catalog: |
2206
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
757 |
if not incremental: |
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
758 |
self.__destroy_catalog() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
759 |
default_pub = self.publisher |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
760 |
if self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
761 |
# Temporarily mark catalog as not read-only so |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
762 |
# that it can be modified. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
763 |
self.catalog.read_only = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
764 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
765 |
# Set batch_mode for catalog to speed up rebuild. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
766 |
self.catalog.batch_mode = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
767 |
|
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
768 |
# Pointless to log incremental updates since a new |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
769 |
# catalog is being built. This also helps speed up |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
770 |
# rebuild. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
771 |
self.catalog.log_updates = incremental |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
772 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
773 |
def add_package(f): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
774 |
m = self._get_manifest(f, sig=True) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
775 |
if "pkg.fmri" in m: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
776 |
f = fmri.PkgFmri(m["pkg.fmri"]) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
777 |
if default_pub and not f.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
778 |
f.publisher = default_pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
779 |
self.__add_package(f, manifest=m) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
780 |
self.__log(str(f)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
781 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
782 |
# XXX eschew os.walk in favor of another os.listdir |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
783 |
# here? |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
784 |
for pkgpath in os.walk(self.manifest_root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
785 |
if pkgpath[0] == self.manifest_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
786 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
787 |
|
2465
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
788 |
for fname in os.listdir(pkgpath[0]): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
789 |
try: |
2465
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
790 |
f = self.__fmri_from_path( |
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
791 |
pkgpath[0], fname) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
792 |
add_package(f) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
793 |
except (apx.InvalidPackageErrors, |
2465
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
794 |
actions.ActionError, |
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
795 |
fmri.FmriError, |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
796 |
pkg.version.VersionError) as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
797 |
# Don't add packages with |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
798 |
# corrupt manifests to the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
799 |
# catalog. |
2465
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
800 |
name = os.path.join(pkgpath[0], |
073004baeeee
16671 repository class shouldn't keel over on unexpected files in repo dirs
Shawn Walker <shawn.walker@oracle.com>
parents:
2310
diff
changeset
|
801 |
fname) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
802 |
self.__log(_("Skipping " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
803 |
"{name}; invalid " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
804 |
"manifest: {error}").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
805 |
name=name, error=e)) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
806 |
except apx.DuplicateCatalogEntry as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
807 |
# Raise dups if not in |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
808 |
# incremental mode. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
809 |
if not incremental: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
810 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
811 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
812 |
# Private add_package doesn't automatically save catalog |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
813 |
# so that operations can be batched (there is |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
814 |
# significant overhead in writing the catalog). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
815 |
self.catalog.batch_mode = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
816 |
self.catalog.log_updates = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
817 |
self.catalog.read_only = self.read_only |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
818 |
self.catalog.finalize() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
819 |
self.__save_catalog(lm=lm) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
820 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
821 |
if not incremental: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
822 |
# Only discard search data if this isn't an incremental |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
823 |
# rebuild. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
824 |
self.__purge_search_index() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
825 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
826 |
if build_index: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
827 |
self.__refresh_index() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
828 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
829 |
self.__check_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
830 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
831 |
def __refresh_index(self): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
832 |
"""Private version; caller responsible for repository |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
833 |
locking.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
834 |
|
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
835 |
if not self.index_root: |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
836 |
return |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
837 |
if self.read_only and not self.writable_root: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
838 |
raise RepositoryReadOnlyError() |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
839 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
840 |
cat = self.catalog |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
841 |
self.__index_log("Checking for updated package data.") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
842 |
fmris_to_index = indexer.Indexer.check_for_updates( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
843 |
self.index_root, cat) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
844 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
845 |
if fmris_to_index: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
846 |
return self.__run_update_index() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
847 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
848 |
# Since there is nothing to index, setup the index |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
849 |
# and declare search available. This is only logged |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
850 |
# if this represents a change in status of the server. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
851 |
ind = indexer.Indexer(self.index_root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
852 |
self._get_manifest, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
853 |
self.manifest, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
854 |
log=self.__index_log, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
855 |
sort_file_max_size=self.__sort_file_max_size) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
856 |
ind.setup() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
857 |
if not self.__search_available: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
858 |
self.__index_log("Search Available") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
859 |
self.__search_available = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
860 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
861 |
def __init_state(self, allow_invalid=False): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
862 |
"""Private version; caller responsible for repository |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
863 |
locking.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
864 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
865 |
# Discard current catalog information (it will be re-loaded |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
866 |
# when needed). |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
867 |
self.__catalog = None |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
868 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
869 |
# Determine location and version of catalog data. |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
870 |
self.__init_catalog(allow_invalid=allow_invalid) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
871 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
872 |
# Prepare search for use (ensuring most current data is loaded). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
873 |
self.reset_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
874 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
875 |
if self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
876 |
# In mirror mode, nothing more to do. |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
877 |
return |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
878 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
879 |
# If no catalog exists on-disk yet, ensure an empty one does |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
880 |
# so that clients can discern that a repository has an empty |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
881 |
# catalog, as opposed to missing one entirely (which could |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
882 |
# easily happen with multiple origins). This must be done |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
883 |
# before the search checks below. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
884 |
if not self.read_only and self.catalog_root and \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
885 |
not self.catalog.exists: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
886 |
self.__save_catalog() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
887 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
888 |
self.__check_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
889 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
890 |
def __init_catalog(self, allow_invalid=False): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
891 |
"""Private function to determine version and location of |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
892 |
catalog data. This will also perform any necessary |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
893 |
transformations of existing catalog data if the repository |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
894 |
is read-only and a writable_root has been provided. |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
895 |
|
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
896 |
'allow_invalid', if True, will assume the catalog is version 1 |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
897 |
and use an empty, in-memory catalog if the existing, on-disk |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
898 |
catalog is invalid (i.e. corrupted). This assumes that the |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
899 |
caller intends to use the repository as part of a rebuild |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
900 |
operation.""" |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
901 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
902 |
# Reset versions to default. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
903 |
self.catalog_version = -1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
904 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
905 |
if not self.catalog_root or self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
906 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
907 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
908 |
def get_file_lm(pathname): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
909 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
910 |
mod_time = os.stat(pathname).st_mtime |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
911 |
except EnvironmentError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
912 |
if e.errno == errno.ENOENT: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
913 |
return None |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
914 |
raise |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
915 |
return datetime.datetime.utcfromtimestamp(mod_time) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
916 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
917 |
# To determine if a transformation is needed, first check for a |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
918 |
# v0 catalog attrs file. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
919 |
need_transform = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
920 |
v0_attrs = os.path.join(self.catalog_root, "attrs") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
921 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
922 |
# The only place a v1 catalog should exist, at all, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
923 |
# is either in self.catalog_root, or in a subdirectory |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
924 |
# of self.writable_root if a v0 catalog exists. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
925 |
v1_cat = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
926 |
writ_cat_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
927 |
if self.writable_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
928 |
writ_cat_root = os.path.join( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
929 |
self.writable_root, "catalog") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
930 |
v1_cat = catalog.Catalog( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
931 |
meta_root=writ_cat_root, read_only=True) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
932 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
933 |
v0_lm = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
934 |
if os.path.exists(v0_attrs): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
935 |
# If a v0 catalog exists, then assume any existing v1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
936 |
# catalog needs to be kept in sync if it exists. If |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
937 |
# one doesn't exist, then it needs to be created. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
938 |
v0_lm = get_file_lm(v0_attrs) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
939 |
if not v1_cat or not v1_cat.exists or \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
940 |
v0_lm != v1_cat.last_modified: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
941 |
need_transform = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
942 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
943 |
if writ_cat_root and not self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
944 |
# If a writable root was specified, but the server is |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
945 |
# not in read-only mode, then the catalog must not be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
946 |
# stored using the writable root (this is consistent |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
947 |
# with the storage of package data in this case). As |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
948 |
# such, destroy any v1 catalog data that might exist |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
949 |
# and proceed. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
950 |
shutil.rmtree(writ_cat_root, True) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
951 |
writ_cat_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
952 |
if os.path.exists(v0_attrs) and not self.catalog.exists: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
953 |
# A v0 catalog exists, but no v1 catalog exists; |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
954 |
# this can happen when a repository that was |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
955 |
# previously run with writable-root and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
956 |
# read_only is now being run with only |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
957 |
# writable_root. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
958 |
need_transform = True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
959 |
elif writ_cat_root and v0_lm and self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
960 |
# The catalog lives in the writable_root if a v0 catalog |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
961 |
# exists, writ_cat_root is set, and readonly is True. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
962 |
self.__set_catalog_root(writ_cat_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
963 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
964 |
if self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
965 |
need_transform = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
966 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
967 |
if need_transform and self.read_only and not self.writable_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
968 |
# Catalog data can't be transformed. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
969 |
need_transform = False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
970 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
971 |
if need_transform: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
972 |
# v1 catalog should be destroyed if it exists already. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
973 |
self.catalog.destroy() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
974 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
975 |
# Create the transformed catalog. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
976 |
self.__log(_("Transforming repository catalog; this " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
977 |
"process will take some time.")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
978 |
self.__rebuild(lm=v0_lm) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
979 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
980 |
if not self.read_only and self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
981 |
v0_cat = os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
982 |
"catalog", "catalog") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
983 |
for f in v0_attrs, v0_cat: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
984 |
if os.path.exists(f): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
985 |
portable.remove(f) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
986 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
987 |
# If this fails, it doesn't really matter, but |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
988 |
# it should be removed if possible. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
989 |
shutil.rmtree(os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
990 |
"updatelog"), True) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
991 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
992 |
# Determine effective catalog version after all transformation |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
993 |
# work is complete. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
994 |
if os.path.exists(v0_attrs): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
995 |
# The only place a v1 catalog should exist, at all, is |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
996 |
# either in catalog_root or in a subdirectory of |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
997 |
# writable_root if a v0 catalog exists. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
998 |
v1_cat = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
999 |
# If a writable root was specified, but the repository |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1000 |
# is not in read-only mode, then the catalog must not be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1001 |
# stored using the writable root (this is consistent |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1002 |
# with the storage of package data in this case). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1003 |
if self.writable_root and self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1004 |
writ_cat_root = os.path.join( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1005 |
self.writable_root, "catalog") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1006 |
v1_cat = catalog.Catalog( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1007 |
meta_root=writ_cat_root, read_only=True) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1008 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1009 |
if v1_cat and v1_cat.exists: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1010 |
self.catalog_version = 1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1011 |
self.__set_catalog_root(v1_cat.meta_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1012 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1013 |
self.catalog_version = 0 |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1014 |
else: |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1015 |
try: |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1016 |
if self.catalog.exists: |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1017 |
self.catalog_version = 1 |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1018 |
except apx.CatalogError as e: |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1019 |
if not allow_invalid: |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1020 |
raise |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1021 |
|
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1022 |
# Catalog is invalid, but consumer wants to |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1023 |
# proceed; assume version 1. This will allow |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1024 |
# pkgrepo rebuild, etc. |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1025 |
self.__log(str(e)) |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1026 |
self.__catalog = catalog.Catalog( |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1027 |
read_only=self.read_only) |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1028 |
self.catalog_verison = 1 |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
1029 |
return |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1030 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1031 |
if self.catalog_version >= 1 and not self.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1032 |
# If there's no information available to determine |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1033 |
# the publisher identity, then assume it's the first |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1034 |
# publisher in this repository store's catalog. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1035 |
# (This is reasonably safe since there should only |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1036 |
# ever be one.) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1037 |
pubs = list(p for p in self.catalog.publishers()) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1038 |
if pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1039 |
self.publisher = pubs[0] |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1040 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1041 |
def __save_catalog(self, lm=None): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1042 |
"""Private helper function that attempts to save the catalog in |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1043 |
an atomic fashion.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1044 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1045 |
# Ensure new catalog is created in a temporary location so that |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1046 |
# it can be renamed into place *after* creation to prevent |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1047 |
# unexpected failure causing future updates to fail. |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1048 |
old_cat_root = self.catalog_root |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1049 |
tmp_cat_root = self.__mkdtemp() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1050 |
|
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1051 |
try: |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1052 |
if os.path.exists(old_cat_root): |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1053 |
# Now remove the temporary directory and then |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1054 |
# copy the contents of the existing catalog |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1055 |
# directory to the new, temporary name. This |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1056 |
# is necessary since the catalog only saves the |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1057 |
# data that has been loaded or changed, so new |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1058 |
# parts will get written out, but old ones could |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1059 |
# be lost. |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1060 |
shutil.rmtree(tmp_cat_root) |
2580
92480b147363
2707 directory salvage doesn't deal with special files well
Danek Duvall <danek.duvall@oracle.com>
parents:
2530
diff
changeset
|
1061 |
misc.copytree(old_cat_root, tmp_cat_root) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1062 |
|
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1063 |
# Ensure the permissions on the new temporary catalog |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1064 |
# directory are correct. |
1507
b956ea23d3a6
11735 pkg history data files should not be executable
Richard Lowe <richlowe@richlowe.net>
parents:
1490
diff
changeset
|
1065 |
os.chmod(tmp_cat_root, misc.PKG_DIR_MODE) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1066 |
except EnvironmentError as e: |
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1067 |
# shutil.Error can contains a tuple of lists of errors. |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1068 |
# Some of the error entries may be a tuple others will |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1069 |
# be a string due to poor error handling in shutil. |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1070 |
if isinstance(e, shutil.Error) and \ |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1071 |
type(e.args[0]) == list: |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1072 |
msg = "" |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1073 |
for elist in e.args: |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1074 |
for entry in elist: |
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1075 |
if type(entry) == tuple: |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1076 |
msg += "{0}\n".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1077 |
entry[-1]) |
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1078 |
else: |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1079 |
msg += "{0}\n".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1080 |
entry) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1081 |
raise apx.UnknownErrors(msg) |
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1082 |
elif e.errno == errno.EACCES or e.errno == errno.EPERM: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1083 |
raise apx.PermissionsException( |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1084 |
e.filename) |
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1085 |
elif e.errno == errno.EROFS: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1086 |
raise apx.ReadOnlyFileSystemException( |
1779
b80275b45b18
14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents:
1736
diff
changeset
|
1087 |
e.filename) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1088 |
raise |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1089 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1090 |
# Save the new catalog data in the temporary location. |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1091 |
self.__set_catalog_root(tmp_cat_root) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1092 |
if lm: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1093 |
self.catalog.last_modified = lm |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1094 |
self.catalog.save() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1095 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1096 |
orig_cat_root = None |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1097 |
if os.path.exists(old_cat_root): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1098 |
# Preserve the old catalog data before continuing. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1099 |
orig_cat_root = os.path.join(os.path.dirname( |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1100 |
old_cat_root), "old." + os.path.basename( |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1101 |
old_cat_root)) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1102 |
shutil.move(old_cat_root, orig_cat_root) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1103 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1104 |
# Finally, rename the new catalog data into place, reset the |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1105 |
# catalog's location, and remove the old catalog data. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1106 |
shutil.move(tmp_cat_root, old_cat_root) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1107 |
self.__set_catalog_root(old_cat_root) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1108 |
if orig_cat_root: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1109 |
shutil.rmtree(orig_cat_root) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1110 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1111 |
# Set catalog version. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1112 |
self.catalog_version = self.catalog.version |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1113 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1114 |
def __set_catalog_root(self, root): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1115 |
self.__catalog_root = root |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1116 |
if self.__catalog: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1117 |
# If the catalog is loaded already, then reset |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1118 |
# its meta_root. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1119 |
self.catalog.meta_root = root |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1120 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1121 |
def __set_root(self, root): |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1122 |
if root: |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1123 |
root = os.path.abspath(root) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1124 |
self.__root = root |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1125 |
self.__tmp_root = os.path.join(root, "tmp") |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1126 |
self.__set_catalog_root(os.path.join(root, "catalog")) |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1127 |
self.index_root = os.path.join(root, "index") |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1128 |
self.manifest_root = os.path.join(root, "pkg") |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1129 |
self.trans_root = os.path.join(root, "trans") |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1130 |
if not self.file_root: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1131 |
self.__set_file_root(os.path.join(root, "file")) |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1132 |
else: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1133 |
self.__root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1134 |
self.__set_catalog_root(None) |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1135 |
self.index_root = None |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1136 |
self.manifest_root = None |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1137 |
self.trans_root = None |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1138 |
|
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1139 |
def __set_file_root(self, root): |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1140 |
self.__file_root = root |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1141 |
if not root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1142 |
self.cache_store = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1143 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1144 |
|
2073
9fcacc9e5eaa
16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents:
2065
diff
changeset
|
1145 |
self.cache_store = file_manager.FileManager(root, |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
1146 |
self.read_only, layouts=self.__file_layout) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1147 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1148 |
def __set_writable_root(self, root): |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1149 |
if root: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1150 |
root = os.path.abspath(root) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1151 |
self.__tmp_root = os.path.join(root, "tmp") |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1152 |
self.index_root = os.path.join(root, "index") |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1153 |
elif self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1154 |
self.__tmp_root = os.path.join(self.root, "tmp") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1155 |
self.index_root = os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1156 |
"index") |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1157 |
else: |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1158 |
self.__tmp_root = None |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1159 |
self.index_root = None |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1160 |
self.__writable_root = root |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1161 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1162 |
def __unlock_rstore(self): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1163 |
"""Unlocks the repository so other consumers may modify it.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1164 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1165 |
try: |
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
1166 |
if self.__lockfile: |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
1167 |
self.__lockfile.unlock() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1168 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1169 |
self.__lock.release() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1170 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1171 |
def __update_searchdb_unlocked(self, fmris): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1172 |
"""Creates an indexer then hands it fmris; it assumes that all |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1173 |
needed locking has already occurred. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1174 |
""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1175 |
assert self.index_root |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1176 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1177 |
if fmris: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1178 |
index_inst = indexer.Indexer(self.index_root, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1179 |
self._get_manifest, self.manifest, |
1475
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
1180 |
log=self.__index_log, |
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
1181 |
sort_file_max_size=self.__sort_file_max_size) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1182 |
index_inst.server_update_index(fmris) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1183 |
if not self.__search_available: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1184 |
self.__index_log("Search Available") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1185 |
self.__search_available = True |
428
e011e45fe2cd
2239 repository attribute system needed
Shawn Walker <shawn.walker@sun.com>
parents:
409
diff
changeset
|
1186 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1187 |
def abandon(self, trans_id): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1188 |
"""Aborts a transaction with the specified Transaction ID. |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1189 |
Returns the current package state.""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1190 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1191 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1192 |
raise RepositoryMirrorError() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1193 |
if self.read_only: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1194 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1195 |
if not self.trans_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1196 |
raise RepositoryUnsupportedOperationError() |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1197 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1198 |
t = self.__get_transaction(trans_id) |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1199 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1200 |
pstate = t.abandon() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1201 |
self.__discard_transaction(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1202 |
return pstate |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1203 |
except trans.TransactionError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1204 |
raise RepositoryError(e) |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1205 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1206 |
def add(self, trans_id, action): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1207 |
"""Adds an action and its content to a transaction with the |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1208 |
specified Transaction ID.""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1209 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1210 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1211 |
raise RepositoryMirrorError() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1212 |
if self.read_only: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1213 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1214 |
if not self.trans_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1215 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1216 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1217 |
t = self.__get_transaction(trans_id) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1218 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1219 |
t.add_content(action) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1220 |
except trans.TransactionError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1221 |
raise RepositoryError(e) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1222 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1223 |
def add_content(self, refresh_index=False): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1224 |
"""Looks for packages added to the repository that are not in |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1225 |
the catalog and adds them. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1226 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1227 |
'refresh_index' is an optional boolean value indicating whether |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1228 |
search indexes should be updated. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1229 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1230 |
if self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1231 |
raise RepositoryMirrorError() |
2297
9c53302b94fd
18176 missing repository catalog prevents rebuild and refresh
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
1232 |
if not self.catalog_root or self.catalog_version == 0: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1233 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1234 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1235 |
self.__lock_rstore() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1236 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1237 |
self.__rebuild(build_catalog=True, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1238 |
build_index=refresh_index, incremental=True) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1239 |
finally: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1240 |
self.__unlock_rstore() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1241 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1242 |
def add_file(self, trans_id, data, size=None): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1243 |
"""Adds a file to an in-flight transaction. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1244 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1245 |
'trans_id' is the identifier of a transaction that |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1246 |
the file should be added to. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1247 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1248 |
'data' is the string object containing the payload of the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1249 |
file to add. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1250 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1251 |
'size' is an optional integer value indicating the size of |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1252 |
the provided payload. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1253 |
""" |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1254 |
|
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1255 |
if self.mirror: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1256 |
raise RepositoryMirrorError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1257 |
if self.read_only: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1258 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1259 |
if not self.trans_root: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1260 |
raise RepositoryUnsupportedOperationError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1261 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1262 |
t = self.__get_transaction(trans_id) |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1263 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1264 |
t.add_file(data, size) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1265 |
except trans.TransactionError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1266 |
raise RepositoryError(e) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1267 |
return |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1268 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1269 |
def add_package(self, pfmri): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1270 |
"""Adds the specified FMRI to the repository's catalog.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1271 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1272 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1273 |
raise RepositoryMirrorError() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1274 |
if self.read_only: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1275 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1276 |
if not self.catalog_root or self.catalog_version < 1: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1277 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1278 |
|
2065
314bed0b4ef8
16982 depot should be more cooperative about indexing during startup
Shawn Walker <shawn.walker@oracle.com>
parents:
2064
diff
changeset
|
1279 |
self.__lock_rstore(blocking=True) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1280 |
try: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1281 |
self.__add_package(pfmri) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1282 |
self.__save_catalog() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1283 |
finally: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1284 |
self.__unlock_rstore() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1285 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1286 |
def replace_package(self, pfmri): |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1287 |
"""Replaces the information for the specified FMRI in the |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1288 |
repository's catalog.""" |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1289 |
|
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1290 |
if self.mirror: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1291 |
raise RepositoryMirrorError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1292 |
if self.read_only: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1293 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1294 |
if not self.catalog_root or self.catalog_version < 1: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1295 |
raise RepositoryUnsupportedOperationError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1296 |
|
2065
314bed0b4ef8
16982 depot should be more cooperative about indexing during startup
Shawn Walker <shawn.walker@oracle.com>
parents:
2064
diff
changeset
|
1297 |
self.__lock_rstore(blocking=True) |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1298 |
try: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1299 |
self.__replace_package(pfmri) |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1300 |
self.__save_catalog() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1301 |
finally: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1302 |
self.__unlock_rstore() |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1303 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1304 |
@property |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1305 |
def catalog(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1306 |
"""Returns the Catalog object for the repository's catalog.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1307 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1308 |
if self.__catalog: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1309 |
# Already loaded. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1310 |
return self.__catalog |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1311 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1312 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1313 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1314 |
if not self.catalog_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1315 |
# Object not available. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1316 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1317 |
if self.catalog_version == 0: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1318 |
return old_catalog.ServerCatalog(self.catalog_root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1319 |
read_only=True, publisher=self.publisher) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1320 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1321 |
self.__catalog = catalog.Catalog(meta_root=self.catalog_root, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1322 |
log_updates=True, read_only=self.read_only) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1323 |
return self.__catalog |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1324 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1325 |
def catalog_0(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1326 |
"""Returns a generator object for the full version of |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1327 |
the catalog contents. Incremental updates are not provided |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1328 |
as the v0 updatelog does not support renames, obsoletion, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1329 |
package removal, etc.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1330 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1331 |
if not self.catalog_root or self.catalog_version < 0: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1332 |
raise RepositoryUnsupportedOperationError() |
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1333 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1334 |
if self.catalog_version == 0: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1335 |
# If catalog is v0, it must be read and returned |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1336 |
# directly to the caller. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1337 |
if not self.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1338 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1339 |
c = old_catalog.ServerCatalog(self.catalog_root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1340 |
read_only=True, publisher=self.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1341 |
output = cStringIO.StringIO() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1342 |
c.send(output) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1343 |
output.seek(0) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1344 |
for l in output: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1345 |
yield l |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1346 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1347 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1348 |
# For all other cases where the catalog object is available, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1349 |
# fake a v0 catalog for the caller's sake. |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1350 |
c = self.catalog |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1351 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1352 |
# Yield each catalog attr in the v0 format: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1353 |
# S Last-Modified: 2009-08-28T15:01:48.546606 |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1354 |
# S prefix: CRSV |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1355 |
# S npkgs: 46292 |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1356 |
yield "S Last-Modified: {0}\n".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1357 |
c.last_modified.isoformat()) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1358 |
yield "S prefix: CRSV\n" |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1359 |
yield "S npkgs: {0}\n".format(c.package_version_count) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1360 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1361 |
# Now yield each FMRI in the catalog in the v0 format: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1362 |
# V pkg:/[email protected],5.11-0.86:20080426T173208Z |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1363 |
for pub, stem, ver in c.tuples(): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1364 |
yield "V pkg:/{0}@{1}\n".format(stem, ver) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1365 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1366 |
def catalog_1(self, name): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1367 |
"""Returns the absolute pathname of the named catalog file.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1368 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1369 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1370 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1371 |
if not self.catalog_root or self.catalog_version < 1: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1372 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1373 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1374 |
assert name |
1895
0a260cc2a689
15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents:
1893
diff
changeset
|
1375 |
return os.path.normpath(os.path.join(self.catalog_root, name)) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1376 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1377 |
def reset_search(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1378 |
"""Discards currenty loaded search data so that it will be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1379 |
reloaded the next a search is performed. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1380 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1381 |
if not self.index_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1382 |
# Nothing to do. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1383 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1384 |
sqp.TermQuery.clear_cache(self.index_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1385 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1386 |
def close(self, trans_id, add_to_catalog=True): |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1387 |
"""Closes the transaction specified by 'trans_id'. |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1388 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1389 |
Returns a tuple containing the package FMRI and the current |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1390 |
package state in the catalog.""" |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1391 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1392 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1393 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1394 |
if not self.trans_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1395 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1396 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1397 |
# The repository store should not be locked at this point |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1398 |
# as transaction will trigger that indirectly through |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1399 |
# add_package(). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1400 |
t = self.__get_transaction(trans_id) |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1401 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1402 |
pfmri, pstate = t.close( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1403 |
add_to_catalog=add_to_catalog) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1404 |
self.__discard_transaction(trans_id) |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1405 |
return pfmri, pstate |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1406 |
except (apx.CatalogError, |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1407 |
trans.TransactionError) as e: |
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1408 |
raise RepositoryError(e) |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1409 |
|
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1410 |
def file(self, fhash): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1411 |
"""Returns the absolute pathname of the file specified by the |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1412 |
provided SHA-n hash name. (At present, the repository format |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1413 |
always uses the least-preferred hash to content in order to |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1414 |
remain backwards compatible with older clients. Actions may be |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1415 |
published that have additional hashes set, but those do not |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1416 |
influence where the content is stored in the repository.)""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1417 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1418 |
if not self.file_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1419 |
raise RepositoryUnsupportedOperationError() |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1420 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1421 |
if fhash is None: |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1422 |
raise RepositoryFileNotFoundError(fhash) |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1423 |
|
1452
bd6ffa78fed9
7960 client and depot need different organization of files
Brock Pytlik <bpytlik@sun.com>
parents:
1431
diff
changeset
|
1424 |
fp = self.cache_store.lookup(fhash) |
bd6ffa78fed9
7960 client and depot need different organization of files
Brock Pytlik <bpytlik@sun.com>
parents:
1431
diff
changeset
|
1425 |
if fp is not None: |
bd6ffa78fed9
7960 client and depot need different organization of files
Brock Pytlik <bpytlik@sun.com>
parents:
1431
diff
changeset
|
1426 |
return fp |
bd6ffa78fed9
7960 client and depot need different organization of files
Brock Pytlik <bpytlik@sun.com>
parents:
1431
diff
changeset
|
1427 |
raise RepositoryFileNotFoundError(fhash) |
1507
b956ea23d3a6
11735 pkg history data files should not be executable
Richard Lowe <richlowe@richlowe.net>
parents:
1490
diff
changeset
|
1428 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1429 |
def get_publisher(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1430 |
"""Return the Publisher object for this storage object or None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1431 |
if not available. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1432 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1433 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1434 |
if not self.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1435 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1436 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1437 |
if self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1438 |
# Determine if configuration for publisher exists |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1439 |
# on-disk already and then return that if it does. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1440 |
p5ipath = os.path.join(self.root, "pub.p5i") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1441 |
if os.path.exists(p5ipath): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1442 |
pubs = p5i.parse(location=p5ipath) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1443 |
if pubs: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1444 |
# Only expecting one, so only return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1445 |
# the first. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1446 |
return pubs[0][0] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1447 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1448 |
# No p5i exists, or existing one doesn't contain publisher info, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1449 |
# so return a stub publisher object. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1450 |
return publisher.Publisher(self.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1451 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1452 |
def has_transaction(self, trans_id): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1453 |
"""Returns a boolean value indicating whether the given |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1454 |
in-flight Transaction ID exists. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1455 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1456 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1457 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1458 |
self.__get_transaction(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1459 |
return True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1460 |
except RepositoryInvalidTransactionIDError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1461 |
return False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1462 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1463 |
@property |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1464 |
def in_flight_transactions(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1465 |
"""The number of transactions awaiting completion.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1466 |
return len(self.__in_flight_trans) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1467 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1468 |
@property |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1469 |
def locked(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1470 |
"""A boolean value indicating whether the repository is locked. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1471 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1472 |
|
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
1473 |
return self.__lockfile and self.__lockfile.locked |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1474 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1475 |
def manifest(self, pfmri): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1476 |
"""Returns the absolute pathname of the manifest file for the |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1477 |
specified FMRI.""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1478 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1479 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1480 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1481 |
if not self.manifest_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1482 |
raise RepositoryUnsupportedOperationError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1483 |
return os.path.join(self.manifest_root, pfmri.get_dir_path()) |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1484 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1485 |
def open(self, client_release, pfmri): |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1486 |
"""Starts a transaction for the specified client release and |
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1487 |
FMRI. Returns the Transaction ID for the new transaction.""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1488 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1489 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1490 |
raise RepositoryMirrorError() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1491 |
if self.read_only: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1492 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1493 |
if not self.trans_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1494 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1495 |
|
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1496 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1497 |
t = trans.Transaction() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1498 |
t.open(self, client_release, pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1499 |
self.__in_flight_trans[t.get_basename()] = t |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1500 |
return t.get_basename() |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1501 |
except trans.TransactionError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1502 |
raise RepositoryError(e) |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1503 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1504 |
def append(self, client_release, pfmri): |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1505 |
"""Starts an append transaction for the specified client |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1506 |
release and FMRI. Returns the Transaction ID for the new |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1507 |
transaction.""" |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1508 |
|
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1509 |
if self.mirror: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1510 |
raise RepositoryMirrorError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1511 |
if self.read_only: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1512 |
raise RepositoryReadOnlyError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1513 |
if not self.trans_root: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1514 |
raise RepositoryUnsupportedOperationError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1515 |
|
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1516 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1517 |
t = trans.Transaction() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1518 |
t.append(self, client_release, pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1519 |
self.__in_flight_trans[t.get_basename()] = t |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1520 |
return t.get_basename() |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1521 |
except trans.TransactionError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1522 |
raise RepositoryError(e) |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
1523 |
|
873
b95d76c53b5e
2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
856
diff
changeset
|
1524 |
def refresh_index(self): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1525 |
"""This function refreshes the search indexes if there any new |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1526 |
packages. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1527 |
""" |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1528 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1529 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1530 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1531 |
if not self.index_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1532 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1533 |
|
2043
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
1534 |
# Acquire only the thread-lock. The Indexer has its own |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
1535 |
# process lock. This allows indexing and publication to occur |
852501e586d0
14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents:
2037
diff
changeset
|
1536 |
# simultaneously. |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1537 |
self.__lock_rstore(process=False) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1538 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1539 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1540 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1541 |
self.__refresh_index() |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1542 |
except se.InconsistentIndexException as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1543 |
s = _("Index corrupted or out of date. " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1544 |
"Removing old index directory ({0}) " |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1545 |
" and rebuilding search " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1546 |
"indexes.").format(e.cause) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1547 |
self.__log(s, "INDEX") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1548 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1549 |
self.__rebuild( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1550 |
build_catalog=False, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1551 |
build_index=True) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1552 |
except se.IndexingException as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1553 |
self.__log(str(e), "INDEX") |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1554 |
except se.IndexingException as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1555 |
self.__log(str(e), "INDEX") |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1556 |
except EnvironmentError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1557 |
if e.errno in (errno.EACCES, errno.EROFS): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1558 |
if self.writable_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1559 |
raise RepositoryError( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1560 |
_("writable root not " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1561 |
"writable by current user " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1562 |
"id or group.")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1563 |
raise RepositoryError(_("unable to " |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1564 |
"write to index directory.")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1565 |
raise |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1566 |
finally: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1567 |
self.__unlock_rstore() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1568 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1569 |
def remove_packages(self, packages, progtrack=None): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1570 |
"""Removes the specified packages from the repository store. No |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1571 |
other modifying operations may be performed until complete. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1572 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1573 |
'packages' is a list of FMRIs of packages to remove. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1574 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1575 |
'progtrack' is an optional ProgressTracker object. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1576 |
""" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1577 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1578 |
if self.mirror: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1579 |
raise RepositoryMirrorError() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1580 |
if self.read_only: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1581 |
raise RepositoryReadOnlyError() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1582 |
if not self.catalog_root or self.catalog_version < 1: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1583 |
raise RepositoryUnsupportedOperationError() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1584 |
if not self.manifest_root: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1585 |
raise RepositoryUnsupportedOperationError() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1586 |
if not progtrack: |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1587 |
progtrack = progress.NullProgressTracker() |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1588 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1589 |
def get_hashes(pfmri): |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1590 |
"""Given an FMRI, return a set of tuples containing all |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1591 |
of the hashes of the files its manifest references. |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1592 |
Each tuple is of the form (hash value, hash function)""" |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1593 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1594 |
m = self._get_manifest(pfmri) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1595 |
hashes = set() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1596 |
for a in m.gen_actions(): |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1597 |
if not a.has_payload: |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1598 |
# Nothing to archive. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1599 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1600 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1601 |
# Action payload. |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1602 |
hattr, hval, hfunc = \ |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1603 |
digest.get_least_preferred_hash(a) |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1604 |
hashes.add(hval) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1605 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1606 |
# Signature actions have additional payloads. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1607 |
if a.name == "signature": |
3164
21e62efb9dd7
19381136 signature consumers assume chain present causing traceback
saurabh.vyas@oracle.com
parents:
3158
diff
changeset
|
1608 |
for c in a.get_chain_certs( |
21e62efb9dd7
19381136 signature consumers assume chain present causing traceback
saurabh.vyas@oracle.com
parents:
3158
diff
changeset
|
1609 |
least_preferred=True): |
21e62efb9dd7
19381136 signature consumers assume chain present causing traceback
saurabh.vyas@oracle.com
parents:
3158
diff
changeset
|
1610 |
hashes.add(c) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1611 |
return hashes |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1612 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1613 |
self.__lock_rstore() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1614 |
c = self.catalog |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1615 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1616 |
# First, dump all search data as it will be invalidated |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1617 |
# as soon as the catalog is updated. |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1618 |
progtrack.job_start(progtrack.JOB_REPO_DELSEARCH) |
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1619 |
progtrack.job_add_progress(progtrack.JOB_REPO_DELSEARCH) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1620 |
self.__purge_search_index() |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1621 |
progtrack.job_add_progress(progtrack.JOB_REPO_DELSEARCH) |
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1622 |
progtrack.job_done(progtrack.JOB_REPO_DELSEARCH) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1623 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1624 |
# Next, remove all of the packages to be removed |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1625 |
# from the catalog (if they are present). That way |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1626 |
# any active clients are less likely to be surprised |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1627 |
# when files for packages start disappearing. |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1628 |
progtrack.job_start(progtrack.JOB_REPO_UPDATE_CAT) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1629 |
c.batch_mode = True |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1630 |
save_catalog = False |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1631 |
for pfmri in packages: |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1632 |
progtrack.job_add_progress( |
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1633 |
progtrack.JOB_REPO_UPDATE_CAT) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1634 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1635 |
c.remove_package(pfmri) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1636 |
except apx.UnknownCatalogEntry: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1637 |
# Assume already removed from catalog or |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1638 |
# not yet added to it. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1639 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1640 |
save_catalog = True |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1641 |
|
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1642 |
progtrack.job_add_progress( |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1643 |
progtrack.JOB_REPO_UPDATE_CAT) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1644 |
c.batch_mode = False |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1645 |
if save_catalog: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1646 |
# Only need to re-write catalog if at least one |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1647 |
# package had to be removed from it. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1648 |
c.finalize(pfmris=packages) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1649 |
c.save() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1650 |
|
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1651 |
progtrack.job_done(progtrack.JOB_REPO_UPDATE_CAT) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1652 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1653 |
# Next, build a list of all of the hashes for the files |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1654 |
# that can potentially be removed from the repository. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1655 |
# This will also indirectly abort the operation should |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1656 |
# any of the packages not actually have a manifest in |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1657 |
# the repository. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1658 |
pfiles = set() |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1659 |
progtrack.job_start(progtrack.JOB_REPO_ANALYZE_RM, |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1660 |
goal=len(packages)) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1661 |
for pfmri in packages: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1662 |
pfiles.update(get_hashes(pfmri)) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1663 |
progtrack.job_add_progress( |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1664 |
progtrack.JOB_REPO_ANALYZE_RM) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1665 |
progtrack.job_done(progtrack.JOB_REPO_ANALYZE_RM) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1666 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1667 |
# Now for the slow part; iterate over every manifest in |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1668 |
# the repository (excluding the ones being removed) and |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1669 |
# remove any hashes in use from the list to be removed. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1670 |
# However, if the package being removed doesn't have any |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1671 |
# payloads, then we can skip checking all of the |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1672 |
# packages in the repository for files in use. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1673 |
if pfiles: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1674 |
# Number of packages to check is total found in |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1675 |
# repo minus number to be removed. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1676 |
slist = os.listdir(self.manifest_root) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1677 |
remaining = sum( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1678 |
1 |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1679 |
for s in slist |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1680 |
for v in os.listdir(os.path.join( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1681 |
self.manifest_root, s)) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1682 |
) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1683 |
|
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1684 |
progtrack.job_start( |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1685 |
progtrack.JOB_REPO_ANALYZE_REPO, |
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1686 |
goal=remaining) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1687 |
for name in slist: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1688 |
# Stem must be decoded before use. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1689 |
try: |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
1690 |
pname = unquote(name) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1691 |
except Exception: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1692 |
# Assume error is result of |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1693 |
# unexpected file in directory; |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1694 |
# just skip it and drive on. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1695 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1696 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1697 |
pdir = os.path.join(self.manifest_root, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1698 |
name) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1699 |
for ver in os.listdir(pdir): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1700 |
if not pfiles: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1701 |
# Skip remaining entries |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1702 |
# since no files are |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1703 |
# safe to remove, but |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1704 |
# update progress. |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1705 |
progtrack.job_add_progress(progtrack.JOB_REPO_ANALYZE_REPO) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1706 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1707 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1708 |
# Version must be decoded before |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1709 |
# use. |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
1710 |
pver = unquote(ver) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1711 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1712 |
pfmri = fmri.PkgFmri( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1713 |
"@".join((pname, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1714 |
pver)), publisher=self.publisher) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1715 |
except Exception: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1716 |
# Assume error is result |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1717 |
# of unexpected file in |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1718 |
# directory; just skip |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1719 |
# it and drive on. |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1720 |
progtrack.job_add_progress(progtrack.JOB_REPO_ANALYZE_REPO) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1721 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1722 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1723 |
if pfmri in packages: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1724 |
# Package is one of |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1725 |
# those queued for |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1726 |
# removal. |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1727 |
progtrack.job_add_progress(progtrack.JOB_REPO_ANALYZE_REPO) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1728 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1729 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1730 |
# Any files in use by another |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1731 |
# package can't be removed. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1732 |
pfiles -= get_hashes(pfmri) |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1733 |
progtrack.job_add_progress(progtrack.JOB_REPO_ANALYZE_REPO) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1734 |
progtrack.job_done( |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1735 |
progtrack.JOB_REPO_ANALYZE_REPO) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1736 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1737 |
# Next, remove the manifests of the packages to be |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1738 |
# removed. (This is done before removing the files |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1739 |
# so that clients won't have a chance to retrieve a |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1740 |
# manifest which has missing files.) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1741 |
progtrack.job_start(progtrack.JOB_REPO_RM_MFST, |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1742 |
goal=len(packages)) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1743 |
for pfmri in packages: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1744 |
mpath = self.manifest(pfmri) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1745 |
portable.remove(mpath) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1746 |
progtrack.job_add_progress( |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1747 |
progtrack.JOB_REPO_RM_MFST) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1748 |
progtrack.job_done(progtrack.JOB_REPO_RM_MFST) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1749 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1750 |
# Next, remove any package files that are not |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1751 |
# referenced by other packages. |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1752 |
progtrack.job_start(progtrack.JOB_REPO_RM_FILES, |
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1753 |
goal=len(pfiles)) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1754 |
for h in pfiles: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1755 |
# File might already be gone (don't care if |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1756 |
# it is). |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1757 |
fpath = self.cache_store.lookup(h) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1758 |
if fpath is not None: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1759 |
portable.remove(fpath) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1760 |
progtrack.job_add_progress( |
3245
d04bb3ca0128
20780066 change ordering comparisons for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3234
diff
changeset
|
1761 |
progtrack.JOB_REPO_RM_FILES) |
2693
cfee571ea6d5
7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents:
2689
diff
changeset
|
1762 |
progtrack.job_done(progtrack.JOB_REPO_RM_FILES) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1763 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1764 |
# Finally, tidy up repository structure by discarding |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1765 |
# unused package data directories for any packages |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1766 |
# removed. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1767 |
def rmdir(d): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1768 |
"""rmdir; but ignores non-empty directories.""" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1769 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1770 |
os.rmdir(d) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1771 |
except OSError as e: |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1772 |
if e.errno not in ( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1773 |
errno.ENOTEMPTY, |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1774 |
errno.EEXIST): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1775 |
raise |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1776 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1777 |
for name in set( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1778 |
f.get_dir_path(stemonly=True) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1779 |
for f in packages): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1780 |
rmdir(os.path.join(self.manifest_root, name)) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1781 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1782 |
if self.file_root: |
2530
c7e2a2d42245
18424 pkgrepo remove stacktrace when there are no files in the repo
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2515
diff
changeset
|
1783 |
try: |
c7e2a2d42245
18424 pkgrepo remove stacktrace when there are no files in the repo
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2515
diff
changeset
|
1784 |
for entry in os.listdir(self.file_root): |
c7e2a2d42245
18424 pkgrepo remove stacktrace when there are no files in the repo
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2515
diff
changeset
|
1785 |
rmdir(os.path.join( |
c7e2a2d42245
18424 pkgrepo remove stacktrace when there are no files in the repo
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2515
diff
changeset
|
1786 |
self.file_root, entry)) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1787 |
except EnvironmentError as e: |
2530
c7e2a2d42245
18424 pkgrepo remove stacktrace when there are no files in the repo
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2515
diff
changeset
|
1788 |
if e.errno != errno.ENOENT: |
c7e2a2d42245
18424 pkgrepo remove stacktrace when there are no files in the repo
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2515
diff
changeset
|
1789 |
raise |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1790 |
except EnvironmentError as e: |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1791 |
raise apx._convert_error(e) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1792 |
finally: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1793 |
# This ensures batch_mode is reset in the event of an |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1794 |
# error. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1795 |
c.batch_mode = False |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1796 |
self.__unlock_rstore() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
1797 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1798 |
def rebuild(self, build_catalog=True, build_index=False): |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1799 |
"""Rebuilds the repository catalog and search indexes using the |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1800 |
package manifests currently in the repository. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1801 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1802 |
'build_catalog' is an optional boolean value indicating whether |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1803 |
package catalogs should be rebuilt. If True, existing search |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1804 |
data will be discarded. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1805 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1806 |
'build_index' is an optional boolean value indicating whether |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1807 |
search indexes should be built. |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1808 |
""" |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1809 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1810 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1811 |
raise RepositoryMirrorError() |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1812 |
if self.read_only: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1813 |
raise RepositoryReadOnlyError() |
2297
9c53302b94fd
18176 missing repository catalog prevents rebuild and refresh
Shawn Walker <shawn.walker@oracle.com>
parents:
2286
diff
changeset
|
1814 |
if not self.catalog_root or self.catalog_version == 0: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1815 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1816 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1817 |
self.__lock_rstore() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1818 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1819 |
self.__rebuild(build_catalog=build_catalog, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1820 |
build_index=build_index) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1821 |
finally: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1822 |
self.__unlock_rstore() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1823 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1824 |
def __run_update_index(self): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1825 |
""" Determines which fmris need to be indexed and passes them |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1826 |
to the indexer. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1827 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1828 |
Note: Only one instance of this method should be running. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1829 |
External locking is expected to ensure this behavior. Calling |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1830 |
refresh index is the preferred method to use to reindex. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1831 |
""" |
382
95304bd3b365
1854 rework depot to use higher-level framework
Shawn Walker <swalker@opensolaris.org>
parents:
diff
changeset
|
1832 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1833 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1834 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1835 |
if not self.index_root or self.catalog_version < 1: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1836 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1837 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1838 |
c = self.catalog |
1635
fc767eea5b69
13485 indexer.check_for_updates broken by catalog v1
Brock Pytlik <bpytlik@sun.com>
parents:
1542
diff
changeset
|
1839 |
fmris_to_index = indexer.Indexer.check_for_updates( |
fc767eea5b69
13485 indexer.check_for_updates broken by catalog v1
Brock Pytlik <bpytlik@sun.com>
parents:
1542
diff
changeset
|
1840 |
self.index_root, c) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1841 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1842 |
if fmris_to_index: |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
1843 |
self.__index_log("Updating search indexes") |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1844 |
self.__update_searchdb_unlocked(fmris_to_index) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1845 |
else: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1846 |
ind = indexer.Indexer(self.index_root, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1847 |
self._get_manifest, self.manifest, |
1475
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
1848 |
log=self.__index_log, |
a667a9efcae9
7360 indexing workfile size should be configurable
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1472
diff
changeset
|
1849 |
sort_file_max_size=self.__sort_file_max_size) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1850 |
ind.setup() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1851 |
if not self.__search_available: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1852 |
self.__index_log("Search Available") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1853 |
self.__search_available = True |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
941
diff
changeset
|
1854 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1855 |
def search(self, queries): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1856 |
"""Searches the index for each query in the list of queries. |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1857 |
Each entry should be the output of str(Query), or a Query |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1858 |
object.""" |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1859 |
|
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1860 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1861 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1862 |
if not self.index_root or not self.catalog_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
1863 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1864 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1865 |
self.__check_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1866 |
if not self.search_available: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1867 |
raise RepositorySearchUnavailableError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1868 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1869 |
def _search(q): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1870 |
assert self.index_root |
1895
0a260cc2a689
15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents:
1893
diff
changeset
|
1871 |
l = sqp.QueryLexer() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1872 |
l.build() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1873 |
qqp = sqp.QueryParser(l) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1874 |
query = qqp.parse(q.text) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1875 |
query.set_info(num_to_return=q.num_to_return, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1876 |
start_point=q.start_point, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1877 |
index_dir=self.index_root, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1878 |
get_manifest_path=self.manifest, |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1879 |
case_sensitive=q.case_sensitive) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1880 |
if q.return_type == sqp.Query.RETURN_PACKAGES: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1881 |
query.propagate_pkg_return() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1882 |
return query.search(self.catalog.fmris) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1883 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1884 |
query_lst = [] |
1291
0f82f71cbf19
9845 Query.fromstr needs more error handling
Brock Pytlik <bpytlik@sun.com>
parents:
1288
diff
changeset
|
1885 |
try: |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1886 |
for s in queries: |
1895
0a260cc2a689
15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents:
1893
diff
changeset
|
1887 |
if not isinstance(s, qp.Query): |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1888 |
query_lst.append( |
1895
0a260cc2a689
15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents:
1893
diff
changeset
|
1889 |
sqp.Query.fromstr(s)) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1890 |
else: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1891 |
query_lst.append(s) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1892 |
except sqp.QueryException as e: |
1291
0f82f71cbf19
9845 Query.fromstr needs more error handling
Brock Pytlik <bpytlik@sun.com>
parents:
1288
diff
changeset
|
1893 |
raise RepositoryError(e) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1894 |
return [_search(q) for q in query_lst] |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
1895 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1896 |
@property |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
1897 |
def search_available(self): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1898 |
return (self.__search_available and self.index_root and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1899 |
os.path.exists(self.index_root)) or self.__check_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1900 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1901 |
def update_publisher(self, pub): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1902 |
"""Updates the configuration information for the publisher |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1903 |
defined by the provided Publisher object. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1904 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1905 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1906 |
if self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1907 |
raise RepositoryMirrorError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1908 |
if self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1909 |
raise RepositoryReadOnlyError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1910 |
if not self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1911 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1912 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1913 |
p5ipath = os.path.join(self.root, "pub.p5i") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1914 |
fn = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1915 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1916 |
dirname = os.path.dirname(p5ipath) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1917 |
fd, fn = tempfile.mkstemp(dir=dirname) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1918 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1919 |
st = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1920 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1921 |
st = os.stat(p5ipath) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1922 |
except OSError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1923 |
if e.errno != errno.ENOENT: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1924 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1925 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1926 |
if st: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1927 |
os.fchmod(fd, stat.S_IMODE(st.st_mode)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1928 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1929 |
portable.chown(fn, st.st_uid, st.st_gid) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1930 |
except OSError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1931 |
if e.errno != errno.EPERM: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1932 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1933 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1934 |
os.fchmod(fd, misc.PKG_FILE_MODE) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1935 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1936 |
with os.fdopen(fd, "wb") as f: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1937 |
with codecs.EncodedFile(f, "utf-8") as ef: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1938 |
p5i.write(ef, [pub]) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1939 |
portable.rename(fn, p5ipath) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
1940 |
except EnvironmentError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1941 |
if e.errno == errno.EACCES: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1942 |
raise apx.PermissionsException(e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1943 |
elif e.errno == errno.EROFS: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1944 |
raise apx.ReadOnlyFileSystemException( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1945 |
e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1946 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1947 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1948 |
if fn and os.path.exists(fn): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
1949 |
os.unlink(fn) |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
1950 |
|
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1951 |
def __build_verify_error(self, error, path, reason): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1952 |
"""Given an integer error code, a path within the repository, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1953 |
and a 'reason' dictionary containing more information about |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1954 |
the error, return a tuple of the form: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1955 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1956 |
(error_code, message, path, reason) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1957 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1958 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1959 |
# if we're looking at a path to a file hash, and we have a pfmri |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1960 |
# we'd like to print the 'path' attribute as well as its |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1961 |
# location within the repository. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1962 |
hsh = reason.get("hash") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1963 |
pfmri = reason.get("pkg") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1964 |
if hsh and pfmri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1965 |
m = self._get_manifest(pfmri) |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1966 |
# this is not terribly efficient, but the expectation is |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1967 |
# that this will rarely happen. |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1968 |
for ac in m.gen_actions_by_types( |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1969 |
actions.payload_types.keys()): |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1970 |
for hash in digest.DEFAULT_HASH_ATTRS: |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1971 |
if ac.attrs.get(hash) == hsh: |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1972 |
fpath = ac.attrs.get("path") |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1973 |
if fpath: |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
1974 |
reason["fpath"] = fpath |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1975 |
if ac.hash == hsh: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1976 |
fpath = ac.attrs.get("path") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1977 |
if fpath: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1978 |
reason["fpath"] = fpath |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1979 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1980 |
message = _("Unknown error") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1981 |
if error == REPO_VERIFY_BADHASH: |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1982 |
message = _("Invalid file hash: {0}").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1983 |
reason["hash"]) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1984 |
del reason["hash"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1985 |
elif error == REPO_VERIFY_BADMANIFEST: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1986 |
message = _("Corrupt manifest.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1987 |
reason["err"] = _("Use pkglint(1) for more details.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1988 |
elif error == REPO_VERIFY_NOFILE: |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1989 |
message = _("Missing file: {0}").format(reason["hash"]) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1990 |
del reason["hash"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1991 |
elif error == REPO_VERIFY_BADGZIP: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1992 |
message = _("Corrupted gzip file.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1993 |
elif error in [REPO_VERIFY_PERM, REPO_VERIFY_MFPERM]: |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1994 |
message = _("Verification failure: {0}").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
1995 |
reason["err"]) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1996 |
del reason["err"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1997 |
elif error == REPO_VERIFY_UNKNOWN: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1998 |
message = _("Bad manifest.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
1999 |
elif error == REPO_VERIFY_BADSIG: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2000 |
message = _("Bad signature.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2001 |
elif error == REPO_VERIFY_WARN_OPENPERMS: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2002 |
# This message constitutes a warning rather than |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2003 |
# an error. No attempt is made by 'pkgrepo fix' |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2004 |
# to rectify this error, as it is potentially |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2005 |
# outside our responsibility to do so. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2006 |
message = _("Restrictive permissions.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2007 |
reason["err"] = \ |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2008 |
_("Some repository content for publisher '{0}' " |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2009 |
"or paths leading to the repository were not " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2010 |
"world-readable or were not readable by " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2011 |
"'pkg5srv:pkg5srv', which can cause access errors " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2012 |
"if the repository contents are served by the " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2013 |
"following services:\n" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2014 |
" svc:/application/pkg/server\n" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2015 |
" svc:/application/pkg/system-repository.\n" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2016 |
"Only the first path found with restrictive " |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2017 |
"permissions is shown.").format(reason["pub"]) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2018 |
del reason["pub"] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2019 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2020 |
raise Exception( |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2021 |
"Unknown repository verify error code: {0}".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2022 |
error)) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2023 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2024 |
return error, path, message, reason |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2025 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2026 |
def __get_hashes(self, path, pfmri): |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2027 |
"""Given a PkgFmri, return a set containing tuples of all of |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2028 |
the hashes of the files its manifest references which should |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2029 |
correspond to files in the repository. Each tuple is of the form |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2030 |
(file_name, hash_value, hash_func) where hash_func is the |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2031 |
function used to compute that hash and file_name is the name |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2032 |
of the hash used to store the file in the repository.""" |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2033 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2034 |
hashes = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2035 |
errors = [] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2036 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2037 |
m = self._get_manifest(pfmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2038 |
for a in m.gen_actions(): |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2039 |
if not a.has_payload: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2040 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2041 |
|
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2042 |
# We store files using the least preferred hash |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2043 |
# in the repository to remain as backwards- |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2044 |
# compatible as possible. |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2045 |
attr, fname, hfunc = \ |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2046 |
digest.get_least_preferred_hash(a) |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2047 |
attr, hval, hfunc = \ |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2048 |
digest.get_preferred_hash(a) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2049 |
# Action payload. |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2050 |
hashes.add((fname, hval, hfunc)) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2051 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2052 |
# Signature actions have additional payloads |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2053 |
if a.name == "signature": |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2054 |
attr, fname, hfunc = \ |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2055 |
digest.get_least_preferred_hash(a, |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2056 |
hash_type=digest.CHAIN) |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2057 |
attr, hval, hfunc = \ |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2058 |
digest.get_preferred_hash(a, |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2059 |
hash_type=digest.CHAIN) |
2984
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2060 |
|
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2061 |
# Since a chain attribute may contain |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2062 |
# several hashes, we need to add each |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2063 |
# fname in the chain and corresponding |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2064 |
# preferred hash to our set of hashes. |
3164
21e62efb9dd7
19381136 signature consumers assume chain present causing traceback
saurabh.vyas@oracle.com
parents:
3158
diff
changeset
|
2065 |
if not fname or not hval: |
21e62efb9dd7
19381136 signature consumers assume chain present causing traceback
saurabh.vyas@oracle.com
parents:
3158
diff
changeset
|
2066 |
continue |
21e62efb9dd7
19381136 signature consumers assume chain present causing traceback
saurabh.vyas@oracle.com
parents:
3158
diff
changeset
|
2067 |
|
2984
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2068 |
fnames = fname.split() |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2069 |
chains = hval.split() |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2070 |
for fitem, citem in zip( |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2071 |
fnames, chains): |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2072 |
hashes.add((fitem, citem, |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2073 |
hfunc)) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2074 |
except apx.PermissionsException: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2075 |
errors.append((REPO_VERIFY_MFPERM, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2076 |
{"err": _("Permission denied.")})) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2077 |
return hashes, errors |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2078 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2079 |
def __verify_manifest(self, path, pfmri): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2080 |
"""Verify that a manifest can be found for this pfmri""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2081 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2082 |
m = self._get_manifest(pfmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2083 |
except apx.InvalidPackageErrors: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2084 |
return (REPO_VERIFY_BADMANIFEST, path, {}) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2085 |
except apx.PermissionsException as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2086 |
return (REPO_VERIFY_PERM, path, {"err": str(e), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2087 |
"pkg": pfmri}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2088 |
|
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2089 |
def __verify_hash(self, path, pfmri, h, alg=digest.DEFAULT_HASH_FUNC): |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2090 |
"""Perform hash verification on the given gzip file. |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2091 |
'path' is the full path to the file in the repository. 'pfmri' |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2092 |
is the package that we're verifying. 'h' is the expected hash |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2093 |
of the path. 'alg' is the hash function used to compute the |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2094 |
hash.""" |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2095 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2096 |
gzf = None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2097 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2098 |
gzf = PkgGzipFile(fileobj=open(path, "rb")) |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2099 |
fhash = alg() |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2100 |
fhash.update(gzf.read()) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2101 |
actual = fhash.hexdigest() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2102 |
if actual != h: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2103 |
return (REPO_VERIFY_BADHASH, path, |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2104 |
{"actual": actual, "hash": h, |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2105 |
"pkg": pfmri}) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2106 |
except (ValueError, zlib.error) as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2107 |
return (REPO_VERIFY_BADGZIP, path, |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2108 |
{"hash": h, "pkg": pfmri}) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2109 |
except IOError as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2110 |
if e.errno in [errno.EACCES, errno.EPERM]: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2111 |
return (REPO_VERIFY_PERM, path, |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2112 |
{"err": str(e), "hash": h, |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2113 |
"pkg": pfmri}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2114 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2115 |
return (REPO_VERIFY_BADGZIP, path, |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2116 |
{"hash": h, "pkg": pfmri}) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2117 |
finally: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2118 |
if gzf: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2119 |
gzf.close() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2120 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2121 |
def __verify_perm(self, path, pfmri, h): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2122 |
"""Check that we don't get any permissions errors when |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2123 |
trying to stat the given path.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2124 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2125 |
st = os.stat(path) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2126 |
# if it's a directory, we'll try to list it |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2127 |
if stat.S_ISDIR(st.st_mode): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2128 |
os.listdir(path) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2129 |
except OSError as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2130 |
if e.errno in [errno.EPERM, errno.EACCES]: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2131 |
if not pfmri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2132 |
return (REPO_VERIFY_MFPERM, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2133 |
{"err": str(e)}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2134 |
return (REPO_VERIFY_PERM, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2135 |
{"hash": h, "err": str(e), "pkg": pfmri}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2136 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2137 |
return (REPO_VERIFY_NOFILE, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2138 |
{"hash": h, "err": str(e), "pkg": pfmri}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2139 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2140 |
def __verify_signature(self, path, pfmri, pub, trust_anchors, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2141 |
sig_required_names, use_crls): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2142 |
"""Verify signatures on a given FMRI.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2143 |
m = self._get_manifest(pfmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2144 |
errors = [] |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2145 |
for sig in m.gen_actions_by_type("signature"): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2146 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2147 |
sig.verify_sig(m.gen_actions(), pub, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2148 |
trust_anchors, use_crls, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2149 |
required_names=sig_required_names) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2150 |
except apx.UnverifiedSignature as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2151 |
errors.append((REPO_VERIFY_BADSIG, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2152 |
{"err": str(e), "pkg": pfmri})) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2153 |
except apx.CertificateException as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2154 |
errors.append((REPO_VERIFY_BADSIG, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2155 |
{"err": str(e), "pkg": pfmri})) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2156 |
except apx.TransportError as e: |
2984
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2157 |
errors.append((REPO_VERIFY_BADSIG, path, |
20b83de1f131
17829858 pkgrepo verify should cope with many-chained signature actions
Tim Foster <tim.s.foster@oracle.com>
parents:
2974
diff
changeset
|
2158 |
{"err": str(e), "pkg": pfmri})) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2159 |
return errors |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2160 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2161 |
def __verify_permissions(self): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2162 |
"""Determine if any of the files or directories in the |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2163 |
repository are not readable by either the pkg5srv user or group, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2164 |
or are not world readable. We return as soon as we find one |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2165 |
inaccessible file, returning the name of that file or directory. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2166 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2167 |
We also walk up the directory path from the repository to '/' |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2168 |
checking that the repository would be accessible. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2169 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2170 |
We only return the first file found because for large |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2171 |
repositories with many files affected, we'd be flooding the user |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2172 |
with information. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2173 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2174 |
This check exists as well as verify_perm() since it causes a |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2175 |
warning to be emitted if non-world readable files are found, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2176 |
whereas verify_perm() will emit an error. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2177 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2178 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2179 |
pkg5srv_uid = \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2180 |
pkg.portable.get_user_by_name("pkg5srv", "/etc", None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2181 |
pkg5srv_gid = \ |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2182 |
pkg.portable.get_group_by_name("pkg5srv", "/etc", None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2183 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2184 |
def pkg5srv_readable(st): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2185 |
"""Returns true if the pkg5srv user can read |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2186 |
this file/dir""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2187 |
if stat.S_ISDIR(st.st_mode): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2188 |
if (st.st_uid == pkg5srv_uid and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2189 |
st.st_mode & stat.S_IXUSR and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2190 |
st.st_mode & stat.S_IRUSR): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2191 |
return True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2192 |
if (st.st_gid == pkg5srv_gid and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2193 |
st.st_mode & stat.S_IXGRP and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2194 |
st.st_mode & stat.S_IRGRP): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2195 |
return True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2196 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2197 |
if (st.st_uid == pkg5srv_uid and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2198 |
st.st_mode & stat.S_IRUSR): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2199 |
return True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2200 |
if (st.st_gid == pkg5srv_gid and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2201 |
st.st_mode & stat.S_IRGRP): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2202 |
return True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2203 |
return False |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2204 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2205 |
def world_readable(st): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2206 |
"""Returns true if anyone can read this |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2207 |
file/dir.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2208 |
if stat.S_ISDIR(st.st_mode): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2209 |
if (st.st_mode & stat.S_IROTH and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2210 |
st.st_mode & stat.S_IXOTH): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2211 |
return True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2212 |
else: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2213 |
if st.st_mode & stat.S_IROTH: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2214 |
return True |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2215 |
return False |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2216 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2217 |
# Scan directories checking file permissions. First we |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2218 |
# walk up the directory path from self.__root |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2219 |
components = self.__root.split("/") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2220 |
path = "" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2221 |
for comp in components: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2222 |
if not comp: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2223 |
continue |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2224 |
path = "{0}/{1}".format(path, comp) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2225 |
st = os.stat(path) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2226 |
if not (pkg5srv_readable(st) or |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2227 |
world_readable(st)): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2228 |
return False, path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2229 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2230 |
for path, dirnames, filenames in os.walk(self.__root): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2231 |
# we don't care about anything in our quarantine |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2232 |
# directory. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2233 |
if REPO_QUARANTINE_DIR in path: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2234 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2235 |
st = os.stat(path) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2236 |
if not (pkg5srv_readable(st) or |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2237 |
world_readable(st)): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2238 |
return False, path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2239 |
for fname in filenames: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2240 |
pth = os.path.join(path, fname) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2241 |
st = os.stat(pth) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2242 |
if not (pkg5srv_readable(st) or |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2243 |
world_readable(st)): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2244 |
return False, pth |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2245 |
return True, None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2246 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2247 |
def __gen_verify(self, progtrack, pub, trust_anchors, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2248 |
sig_required_names, use_crls): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2249 |
"""A generator that produces verify errors, each a tuple |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2250 |
of the form (error_code, path, message, details)""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2251 |
# We may not have a manifest_root directory if no |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2252 |
# packages have ever been published for this publisher. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2253 |
if not os.path.exists(self.manifest_root): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2254 |
return |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2255 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2256 |
err = self.__verify_perm(self.manifest_root, None, None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2257 |
if err: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2258 |
yield self.__build_verify_error(*err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2259 |
return |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2260 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2261 |
# Build a list of all of the manifests that must be |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2262 |
# verified. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2263 |
mflist = os.listdir(self.manifest_root) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2264 |
goal = len(mflist) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2265 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2266 |
# If there is more than one version in the manifest dir, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2267 |
# then we add each one to the goal. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2268 |
for name in mflist: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2269 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2270 |
mfdir = os.path.join(self.manifest_root, name) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2271 |
vers = len(os.listdir(mfdir)) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2272 |
if vers > 1: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2273 |
goal += vers - 1 |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2274 |
except OSError as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2275 |
# being unable to read the manifest dir is bad, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2276 |
# but we'll deal with it later |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2277 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2278 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2279 |
# Add the repo permissions error check to the number of items |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2280 |
# goal. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2281 |
goal +=1 |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2282 |
progtrack.repo_verify_start(goal) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2283 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2284 |
# Scan the entire repository for bad file permissions |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2285 |
progtrack.repo_verify_start_pkg(None, repository_scan=True) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2286 |
valid_perms, path = self.__verify_permissions() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2287 |
if not valid_perms: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2288 |
# We intentionally don't use the path as the first |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2289 |
# argument to __build_verify_error(..) as we do not want |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2290 |
# 'pkgrepo fix' to attempt to fix this particular error, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2291 |
# since it can include paths outside the repository. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2292 |
yield self.__build_verify_error( |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2293 |
REPO_VERIFY_WARN_OPENPERMS, None, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2294 |
{"permissionspath": path, "pub": pub.prefix}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2295 |
progtrack.repo_verify_end_pkg(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2296 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2297 |
for name in mflist: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2298 |
pdir = os.path.join(self.manifest_root, name) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2299 |
err = self.__verify_perm(pdir, None, None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2300 |
if err: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2301 |
yield self.__build_verify_error(*err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2302 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2303 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2304 |
# Stem must be decoded before use. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2305 |
try: |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
2306 |
pname = unquote(name) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2307 |
except Exception: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2308 |
# Assume error is result of an |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2309 |
# unexpected file in the directory. We |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2310 |
# don't know the FMRI here, so use None. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2311 |
progtrack.repo_verify_start_pkg(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2312 |
progtrack.repo_verify_add_progress(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2313 |
yield self.__build_verify_error( |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2314 |
REPO_VERIFY_UNKNOWN, pdir, {"err": str(e)}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2315 |
progtrack.repo_verify_end_pkg(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2316 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2317 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2318 |
for ver in os.listdir(pdir): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2319 |
path = os.path.join(pdir, ver) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2320 |
# Version must be decoded before |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2321 |
# use. |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
2322 |
pver = unquote(ver) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2323 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2324 |
pfmri = fmri.PkgFmri("@".join((pname, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2325 |
pver)), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2326 |
publisher=self.publisher) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2327 |
if not os.path.isfile(path): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2328 |
raise Exception( |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2329 |
"{0} is not a file".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2330 |
path)) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2331 |
except Exception as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2332 |
# Assume the error is result of an |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2333 |
# unexpected file in the directory. We |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2334 |
# don't know the FMRI here, so use None. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2335 |
progtrack.repo_verify_start_pkg(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2336 |
progtrack.repo_verify_add_progress(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2337 |
yield self.__build_verify_error( |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2338 |
REPO_VERIFY_UNKNOWN, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2339 |
{"err": str(e)}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2340 |
progtrack.repo_verify_end_pkg(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2341 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2342 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2343 |
progtrack.repo_verify_start_pkg(pfmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2344 |
err = self.__verify_manifest(path, pfmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2345 |
if err: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2346 |
# with a bad manifest, we can go no |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2347 |
# further |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2348 |
yield self.__build_verify_error(*err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2349 |
progtrack.repo_verify_end_pkg(None) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2350 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2351 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2352 |
hashes, errors = self.__get_hashes(path, pfmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2353 |
for err in errors: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2354 |
yield self.__build_verify_error(*err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2355 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2356 |
# verify manifest signatures |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2357 |
errs = self.__verify_signature(path, pfmri, pub, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2358 |
trust_anchors, sig_required_names, use_crls) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2359 |
for err in errs: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2360 |
yield self.__build_verify_error(*err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2361 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2362 |
# verify payload delivered by this pkg |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2363 |
errors = [] |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2364 |
for fname, h, alg in hashes: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2365 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2366 |
path = self.cache_store.lookup( |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2367 |
fname, |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2368 |
check_existence=False) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2369 |
except apx.PermissionsException as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2370 |
# if we can't even get the path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2371 |
# within the repository, then |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2372 |
# we'll do the best we can to |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2373 |
# report the problem. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2374 |
errors.append((REPO_VERIFY_PERM, |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2375 |
pfmri, {"hash": fname, |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2376 |
"err": _("Permission " |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2377 |
"denied.", "path", h)})) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2378 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2379 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2380 |
err = self.__verify_perm(path, pfmri, h) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2381 |
if err: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2382 |
errors.append(err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2383 |
continue |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2384 |
err = self.__verify_hash(path, pfmri, h, |
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
2385 |
alg=alg) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2386 |
if err: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2387 |
errors.append(err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2388 |
for err in errors: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2389 |
yield self.__build_verify_error(*err) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2390 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2391 |
progtrack.repo_verify_end_pkg(fmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2392 |
progtrack.job_done(progtrack.JOB_REPO_VERIFY_REPO) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2393 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2394 |
def verify(self, pub=None, progtrack=None, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2395 |
trust_anchor_dir=None, sig_required_names=None, use_crls=False): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2396 |
"""A generator which verifies the contents of the repository |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2397 |
store, checking for several different types of errors. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2398 |
No modifying operations may be performed until complete. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2399 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2400 |
'progtrack' is an optional ProgressTracker object. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2401 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2402 |
'trust_anchor_dir' is set in the repository configuration and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2403 |
corresponds to the image property of the same name. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2404 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2405 |
'sig_required_names' is set in the repository configuration and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2406 |
corresponds to the image property of the same name. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2407 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2408 |
'use_crls' is set in the repository configuration and |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2409 |
corresponds to the image property of the same name. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2410 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2411 |
The generator yields tuples of the form: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2412 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2413 |
(error_code, path, message, reason) where |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2414 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2415 |
'error_code' an integer error, correponding to REPO_VERIFY_* |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2416 |
'path' the path to the broken file in the repository |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2417 |
'message' a human-readable summary of the error |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2418 |
'reason' a dictionary of strings containing more detail |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2419 |
about the nature of the error. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2420 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2421 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2422 |
if not self.catalog_root or self.catalog_version < 1: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2423 |
raise RepositoryUnsupportedOperationError() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2424 |
if not self.manifest_root: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2425 |
raise RepositoryUnsupportedOperationError() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2426 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2427 |
if not progtrack: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2428 |
progtrack = progtrack.NullProgressTracker() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2429 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2430 |
# For signature verification, we need to setup a publisher |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2431 |
# meta_root, and build a dictionary of trust-anchors. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2432 |
tmp_metaroot = tempfile.mkdtemp(prefix="pkgrepo-verify.") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2433 |
pub.meta_root = tmp_metaroot |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2434 |
trust_anchors = {} |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2435 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2436 |
if not os.path.isdir(trust_anchor_dir): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2437 |
raise RepositorySigNoTrustAnchorDirError( |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2438 |
trust_anchor_dir) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2439 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2440 |
for fn in os.listdir(trust_anchor_dir): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2441 |
pth = os.path.join(trust_anchor_dir, fn) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2442 |
if os.path.islink(pth): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2443 |
continue |
3321
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2444 |
with open(pth, "rb") as f: |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2445 |
trusted_ca = x509.load_pem_x509_certificate( |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2446 |
f.read(), default_backend()) |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2447 |
|
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2448 |
# Note that while we store certs by their subject |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2449 |
# hashes, we use our own hashing since cryptography has |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2450 |
# no interface for the subject hash and other crypto |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2451 |
# frameworks have been inconsistent with OpenSSL. |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2452 |
s = hashlib.sha1(misc.force_bytes( |
52e8eec3014c
17377205 IPS should not use M2Crypto
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3273
diff
changeset
|
2453 |
trusted_ca.subject)).hexdigest() |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2454 |
trust_anchors.setdefault(s, []) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2455 |
trust_anchors[s].append(trusted_ca) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2456 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2457 |
self.__lock_rstore() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2458 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2459 |
for err in self.__gen_verify(progtrack, pub, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2460 |
trust_anchors, sig_required_names, use_crls): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2461 |
yield err |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2462 |
except (Exception, EnvironmentError) as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2463 |
import traceback |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2464 |
traceback.print_exc(e) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2465 |
raise apx._convert_error(e) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2466 |
finally: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2467 |
self.__unlock_rstore() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2468 |
shutil.rmtree(tmp_metaroot) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2469 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2470 |
def fix(self, pub=None, progtrack=None, verify_callback=None, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2471 |
trust_anchor_dir=None, sig_required_names=None, use_crls=False): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2472 |
"""Verify, then quarantine any packages in the repository that |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2473 |
were found to be faulty, according to self.verify(..). |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2474 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2475 |
This method yields tuples of the form: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2476 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2477 |
(status_code, fmri, message, reason) where |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2478 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2479 |
'status_code' an int status code, corresponding to REPO_FIX_* |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2480 |
'path' the path that was fixed |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2481 |
'message' a summary of the operation performed |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2482 |
'reason' a dictionary of strings describing the operation |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2483 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2484 |
Note, the 'fmri' value may not be a valid FMRI if the manifest |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2485 |
being fixed was corrupt, in which case a path to the corrupted |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2486 |
manifest in the repository is used instead. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2487 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2488 |
If any object referred to by a manifest is quarantined, then |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2489 |
the manifest for that package is also quarantined, however other |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2490 |
files referenced by the manifest are not moved to quarantine |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2491 |
in case they are referenced by other packages. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2492 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2493 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2494 |
if self.read_only: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2495 |
raise RepositoryReadOnlyError() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2496 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2497 |
if not progtrack: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2498 |
progtrack = progress.NullProgressTracker() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2499 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2500 |
broken_items = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2501 |
for error, path, message, reason in self.verify(pub=pub, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2502 |
progtrack=progtrack, trust_anchor_dir=trust_anchor_dir, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2503 |
sig_required_names=sig_required_names, use_crls=use_crls): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2504 |
if verify_callback: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2505 |
verify_callback(progtrack, (error, path, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2506 |
message, reason)) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2507 |
# we don't attempt to fix this error, since it can |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2508 |
# involve paths outside the repository. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2509 |
if error == REPO_VERIFY_WARN_OPENPERMS: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2510 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2511 |
fmri = reason.get("pkg") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2512 |
broken_items.add((path, fmri)) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2513 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2514 |
quarantine_root = None |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2515 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2516 |
def _make_quarantine_root(): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2517 |
"""Make a directory where we can quarantine content.""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2518 |
quarantine_base = os.path.join(self.root, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2519 |
REPO_QUARANTINE_DIR) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2520 |
if not os.path.exists(quarantine_base): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2521 |
os.mkdir(quarantine_base) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2522 |
qroot = tempfile.mkdtemp(prefix="fix.", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2523 |
dir=quarantine_base) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2524 |
return qroot |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2525 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2526 |
# look for broken package content where the bad file doesn't |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2527 |
# match the path to the manifest (eg. file content) and add |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2528 |
# the manifest path to the list of broken items, so that we |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2529 |
# move the manifest to quarantine as well. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2530 |
for path, fmri in broken_items.copy(): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2531 |
if not fmri: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2532 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2533 |
mpath = self.manifest(fmri) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2534 |
if path == mpath: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2535 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2536 |
broken_items.add((mpath, fmri)) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2537 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2538 |
progtrack.job_start(progtrack.JOB_REPO_FIX_REPO, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2539 |
goal=len(broken_items)) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2540 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2541 |
# keep a set of all the paths we've applied fixes to |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2542 |
fixed_paths = set() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2543 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2544 |
for path, fmri in broken_items: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2545 |
progtrack.job_add_progress(progtrack.JOB_REPO_FIX_REPO) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2546 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2547 |
# we've already applied a fix to this path |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2548 |
if path in fixed_paths: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2549 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2550 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2551 |
# we can't do anything about missing files |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2552 |
if not os.path.exists(path): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2553 |
yield (REPO_FIX_ITEM, path, |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2554 |
_("Missing file {0} must be fixed by " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2555 |
"republishing the package.").format(path), |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2556 |
{"pkg": fmri}) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2557 |
continue |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2558 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2559 |
basename = os.path.basename(path) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2560 |
dir = os.path.dirname(path) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2561 |
dir = dir.replace(self.root, "", 1).lstrip("/") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2562 |
if not quarantine_root: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2563 |
quarantine_root = _make_quarantine_root() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2564 |
qdir = os.path.join(quarantine_root, dir) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2565 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2566 |
os.makedirs(qdir) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2567 |
except OSError as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2568 |
if e.errno != errno.EEXIST: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2569 |
raise |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2570 |
dest = os.path.join(qdir, basename) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2571 |
if os.path.exists(dest): |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2572 |
# this should never happen, since we have a |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2573 |
# unique quarantine root per fix(..) call |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2574 |
raise RepositoryQuarantinedPathExistsError() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2575 |
|
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2576 |
message = _("Moving {src} to {dest}").format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2577 |
src=path, dest=dest) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2578 |
status = REPO_FIX_ITEM |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2579 |
reason = {"dest": dest, "pkg": fmri} |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2580 |
try: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2581 |
shutil.move(path, qdir) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2582 |
fixed_paths.add(path) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2583 |
except Exception as e: |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2584 |
status = REPO_FIX_FAILED |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2585 |
message = _("Unable to quarantine {path}: " |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
2586 |
"{err}").format(path=path, err=e) |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2587 |
finally: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2588 |
yield(status, path, message, reason) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2589 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2590 |
progtrack.job_done(progtrack.JOB_REPO_FIX_REPO) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2591 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2592 |
if broken_items: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2593 |
self.rebuild() |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2594 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2595 |
def valid_new_fmri(self, pfmri): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2596 |
"""Check that the FMRI supplied as an argument would be valid |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2597 |
to add to the repository catalog. This checks to make sure |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2598 |
that any past catalog operations (such as a rename or freeze) |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2599 |
would not prohibit the caller from adding this FMRI.""" |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
2600 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2601 |
if self.mirror: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2602 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2603 |
if not self.catalog_root: |
1902
59b7214232cb
6957 mDNS support for depot
johansen <johansen@opensolaris.org>
parents:
1895
diff
changeset
|
2604 |
raise RepositoryUnsupportedOperationError() |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2605 |
if not fmri.is_valid_pkg_name(pfmri.get_name()): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2606 |
return False |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2607 |
if not pfmri.version: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2608 |
return False |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
2609 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2610 |
c = self.catalog |
1537 | 2611 |
entry = c.get_entry(pfmri) |
2612 |
return entry is None |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
2613 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2614 |
def valid_append_fmri(self, pfmri): |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2615 |
if self.mirror: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2616 |
raise RepositoryMirrorError() |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2617 |
if not self.catalog_root: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2618 |
raise RepositoryUnsupportedOperationError() |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2619 |
if not fmri.is_valid_pkg_name(pfmri.get_name()): |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2620 |
return False |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2621 |
if not pfmri.version: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2622 |
return False |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2623 |
if not pfmri.version.timestr: |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2624 |
return False |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2625 |
|
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2626 |
c = self.catalog |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
2627 |
entry = c.get_entry(pfmri) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2628 |
return entry is not None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2629 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2630 |
catalog_root = property(lambda self: self.__catalog_root) |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2631 |
file_layout = property(lambda self: self.__file_layout) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2632 |
file_root = property(lambda self: self.__file_root) |
2206
515600709242
17755 incremental repository package refresh not so incremental
Shawn Walker <shawn.walker@oracle.com>
parents:
2143
diff
changeset
|
2633 |
read_only = property(lambda self: self.__read_only, __set_read_only) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2634 |
root = property(lambda self: self.__root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2635 |
writable_root = property(lambda self: self.__writable_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2636 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2637 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2638 |
class Repository(object): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2639 |
"""A Repository object is a representation of data contained within a |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2640 |
pkg(5) repository and an interface to manipulate it.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2641 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2642 |
def __init__(self, allow_invalid=False, cfgpathname=None, create=False, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2643 |
file_root=None, log_obj=None, mirror=False, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2644 |
properties=misc.EmptyDict, read_only=False, root=None, |
2064
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2645 |
sort_file_max_size=indexer.SORT_FILE_MAX_SIZE, writable_root=None): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2646 |
"""Prepare the repository for use.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2647 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2648 |
# This lock is used to protect the repository from multiple |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2649 |
# threads modifying it at the same time. This must be set |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2650 |
# first. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2651 |
self.__lock = pkg.nrlock.NRLock() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2652 |
self.__prop_lock = pkg.nrlock.NRLock() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2653 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2654 |
# Setup any root overrides or root defaults first. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2655 |
self.__file_root = file_root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2656 |
self.__pub_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2657 |
self.__root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2658 |
self.__tmp_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2659 |
self.__writable_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2660 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2661 |
# Set root after roots above. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2662 |
self.__set_root(root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2663 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2664 |
# Set writable root last. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2665 |
self.__set_writable_root(writable_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2666 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2667 |
# Stats |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2668 |
self.__catalog_requests = 0 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2669 |
self.__file_requests = 0 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2670 |
self.__manifest_requests = 0 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2671 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2672 |
# Initialize. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2673 |
self.__cfgpathname = cfgpathname |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2674 |
self.__cfg = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2675 |
self.__mirror = mirror |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2676 |
self.__read_only = read_only |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2677 |
self.__rstores = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2678 |
self.__sort_file_max_size = sort_file_max_size |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2679 |
self.log_obj = log_obj |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2680 |
self.version = -1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2681 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2682 |
self.__lock_repository() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2683 |
try: |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2684 |
self.__init_state(allow_invalid=allow_invalid, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2685 |
create=create, properties=properties) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2686 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2687 |
self.__unlock_repository() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2688 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2689 |
def __init_format(self, allow_invalid=False, create=False, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2690 |
properties=misc.EmptyI): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2691 |
"""Private helper function to determine repository format and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2692 |
validity. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2693 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2694 |
|
2219
60ad60f7592c
2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents:
2206
diff
changeset
|
2695 |
try: |
60ad60f7592c
2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents:
2206
diff
changeset
|
2696 |
if not create and self.root and \ |
60ad60f7592c
2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents:
2206
diff
changeset
|
2697 |
os.path.isfile(self.root): |
60ad60f7592c
2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents:
2206
diff
changeset
|
2698 |
raise RepositoryInvalidError(self.root) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2699 |
except EnvironmentError as e: |
2219
60ad60f7592c
2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents:
2206
diff
changeset
|
2700 |
raise apx._convert_error(e) |
60ad60f7592c
2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents:
2206
diff
changeset
|
2701 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2702 |
cfgpathname = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2703 |
if self.__cfgpathname: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2704 |
# Use the custom configuration. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2705 |
cfgpathname = self.__cfgpathname |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2706 |
elif self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2707 |
# Fallback to older standard configuration. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2708 |
cfgpathname = os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2709 |
"cfg_cache") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2710 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2711 |
if self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2712 |
# Determine if the standard configuration file exists, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2713 |
# and if so, ignore any custom location specified as it |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2714 |
# is only valid for older formats. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2715 |
cfgpath = os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2716 |
"pkg5.repository") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2717 |
if (cfgpathname and not os.path.exists(cfgpathname)) or \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2718 |
os.path.isfile(cfgpath): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2719 |
cfgpathname = cfgpath |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2720 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2721 |
# Load the repository configuration. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2722 |
self.__cfg = RepositoryConfig(target=cfgpathname, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2723 |
overrides=properties) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2724 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2725 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2726 |
self.version = int(self.cfg.get_property("repository", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2727 |
"version")) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2728 |
except (cfg.PropertyConfigError, ValueError): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2729 |
# If version couldn't be read from configuration, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2730 |
# then allow fallback path below to set things right. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2731 |
self.version = -1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2732 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2733 |
if self.version <= 0 and self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2734 |
# If version doesn't exist, attempt to determine version |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2735 |
# based on structure. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2736 |
pub_root = os.path.join(self.root, "publisher") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2737 |
cat_root = os.path.join(self.root, "catalog") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2738 |
if os.path.exists(pub_root) or \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2739 |
(self.cfg.version > 3 and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2740 |
not os.path.exists(cat_root)): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2741 |
# If publisher root exists or new configuration |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2742 |
# format exists (and the old catalog root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2743 |
# does not), assume this is a v4 repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2744 |
self.version = 4 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2745 |
elif self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2746 |
if os.path.exists(cat_root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2747 |
if os.path.exists(os.path.join( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2748 |
cat_root, "attrs")): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2749 |
# Old catalog implies v2. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2750 |
self.version = 2 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2751 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2752 |
# Assume version 3 otherwise. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2753 |
self.version = 3 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2754 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2755 |
# Reload the repository configuration |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2756 |
# so that configuration definitions |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2757 |
# can match. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2758 |
self.__cfg = RepositoryConfig( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2759 |
target=cfgpathname, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2760 |
overrides=properties, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2761 |
version=self.version) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2762 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2763 |
raise RepositoryInvalidError( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2764 |
self.root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2765 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2766 |
raise RepositoryInvalidError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2767 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2768 |
self.cfg.set_property("repository", "version", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2769 |
self.version) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2770 |
elif self.version <= 0 and self.file_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2771 |
# If only file root specified, treat as version 4 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2772 |
# repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2773 |
self.version = 4 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2774 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2775 |
# Setup roots. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2776 |
if self.root and not self.file_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2777 |
# Don't create the default file root at this point, but |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2778 |
# set its default location if it exists. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2779 |
froot = os.path.join(self.root, "file") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2780 |
if not self.file_root and os.path.exists(froot): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2781 |
self.__file_root = froot |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2782 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2783 |
if self.version > CURRENT_REPO_VERSION: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2784 |
raise RepositoryVersionError(self.root, |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
2785 |
self.version, CURRENT_REPO_VERSION) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2786 |
if self.version == 4: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2787 |
if self.root and not self.pub_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2788 |
# Don't create the publisher root at this point, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2789 |
# but set its expected location. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2790 |
self.__pub_root = os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2791 |
"publisher") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2792 |
|
2064
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2793 |
if not create and cfgpathname and \ |
2515
c84f703961a9
17988 dynamic-mirror service needs update for image format changes
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2465
diff
changeset
|
2794 |
not os.path.exists(cfgpathname) and \ |
c84f703961a9
17988 dynamic-mirror service needs update for image format changes
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2465
diff
changeset
|
2795 |
not (os.path.exists(self.pub_root) or |
c84f703961a9
17988 dynamic-mirror service needs update for image format changes
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2465
diff
changeset
|
2796 |
os.path.exists(os.path.join( |
c84f703961a9
17988 dynamic-mirror service needs update for image format changes
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2465
diff
changeset
|
2797 |
self.root, "pkg5.image")) and |
2942
17aad7c202b0
17336089 modules/server/repository.py is missing a module import
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
2843
diff
changeset
|
2798 |
int(cfg.FileConfig(os.path.join( |
17aad7c202b0
17336089 modules/server/repository.py is missing a module import
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
2843
diff
changeset
|
2799 |
self.root, "pkg5.image")). |
17aad7c202b0
17336089 modules/server/repository.py is missing a module import
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
2843
diff
changeset
|
2800 |
get_property("image", "version")) >= 3): |
2064
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2801 |
# If this isn't a repository creation operation, |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2802 |
# and the base configuration file doesn't exist, |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2803 |
# this isn't a valid repository. |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2804 |
raise RepositoryInvalidError(self.root) |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
2805 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2806 |
# Setup repository stores. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2807 |
def_pub = self.cfg.get_property("publisher", "prefix") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2808 |
if self.version == 4: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2809 |
# For repository versions 4+, there is a repository |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2810 |
# store for the top-level file root (and it must |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2811 |
# be in V1 Layout)... |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2812 |
froot = self.file_root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2813 |
if not froot: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2814 |
froot = os.path.join(self.root, "file") |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2815 |
rstore = _RepoStore(file_layout=layout.V1Layout(), |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2816 |
file_root=froot, log_obj=self.log_obj, |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2817 |
mirror=self.mirror, read_only=self.read_only) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2818 |
self.__rstores[rstore.publisher] = rstore |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2819 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2820 |
# ...and then one for each publisher if any are known. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2821 |
if self.pub_root and os.path.exists(self.pub_root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2822 |
for pub in os.listdir(self.pub_root): |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2823 |
self.__new_rstore(pub, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2824 |
allow_invalid=allow_invalid) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2825 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2826 |
# If a default publisher is set, ensure that a storage |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2827 |
# object always exists for it. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2828 |
if def_pub and def_pub not in self.__rstores: |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2829 |
self.__new_rstore(def_pub, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2830 |
allow_invalid=allow_invalid) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2831 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2832 |
# For older repository versions, there is only one |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2833 |
# repository store, and it might have an associated |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2834 |
# publisher prefix. (This might be in a mix of V0 and |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2835 |
# V1 layouts.) |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2836 |
rstore = _RepoStore(allow_invalid=allow_invalid, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2837 |
file_root=self.file_root, |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2838 |
log_obj=self.log_obj, pub=def_pub, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2839 |
mirror=self.mirror, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2840 |
read_only=self.read_only, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2841 |
root=self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2842 |
writable_root=self.writable_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2843 |
self.__rstores[rstore.publisher] = rstore |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2844 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2845 |
if not self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2846 |
# Nothing more to do. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2847 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2848 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2849 |
try: |
2044
a46dff79cf01
16916 repository class should allow root to be a symlink
Shawn Walker <shawn.walker@oracle.com>
parents:
2043
diff
changeset
|
2850 |
fs = os.stat(self.root) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2851 |
except OSError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2852 |
# If the stat failed due to this, then assume the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2853 |
# repository is possibly valid but that there is a |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2854 |
# permissions issue. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2855 |
if e.errno == errno.EACCES: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2856 |
raise apx.PermissionsException( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2857 |
e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2858 |
elif e.errno == errno.ENOENT: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2859 |
raise RepositoryInvalidError(self.root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2860 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2861 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2862 |
if not stat.S_ISDIR(stat.S_IFMT(fs.st_mode)): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2863 |
# Not a directory. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2864 |
raise RepositoryInvalidError(self.root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2865 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2866 |
# Ensure obsolete search data is removed. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2867 |
if self.version >= 3 and not self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2868 |
searchdb_file = os.path.join(self.root, "search") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2869 |
for ext in ".pag", ".dir": |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2870 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2871 |
os.unlink(searchdb_file + ext) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2872 |
except OSError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2873 |
# If these can't be removed, it doesn't |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2874 |
# matter. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2875 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2876 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2877 |
def __init_state(self, allow_invalid=False, create=False, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2878 |
properties=misc.EmptyDict): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2879 |
"""Private helper function to initialize state.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2880 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2881 |
# Discard current repository storage state data. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2882 |
self.__rstores = {} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2883 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2884 |
# Determine format, configuration location, and validity. |
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2885 |
self.__init_format(allow_invalid=allow_invalid, create=create, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2886 |
properties=properties) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2887 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2888 |
# Ensure default configuration is written. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2889 |
self.__write_config() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2890 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2891 |
def __lock_repository(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2892 |
"""Locks the repository preventing multiple consumers from |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2893 |
modifying it during operations.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2894 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2895 |
# XXX need filesystem lock too? |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2896 |
self.__lock.acquire() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2897 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2898 |
def __log(self, msg, context="", severity=logging.INFO): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2899 |
if self.log_obj: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2900 |
self.log_obj.log(msg=msg, context=context, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2901 |
severity=severity) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2902 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2903 |
def __set_mirror(self, value): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2904 |
self.__prop_lock.acquire() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2905 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2906 |
self.__mirror = value |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2907 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2908 |
rstore.mirror = value |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2909 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2910 |
self.__prop_lock.release() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2911 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2912 |
def __set_read_only(self, value): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2913 |
self.__prop_lock.acquire() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2914 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2915 |
self.__read_only = value |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2916 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2917 |
rstore.read_only = value |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2918 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2919 |
self.__prop_lock.release() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2920 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2921 |
def __set_root(self, root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2922 |
self.__prop_lock.acquire() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2923 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2924 |
if root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2925 |
root = os.path.abspath(root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2926 |
self.__root = root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2927 |
self.__tmp_root = os.path.join(root, "tmp") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2928 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2929 |
self.__root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2930 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2931 |
self.__prop_lock.release() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2932 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2933 |
def __set_writable_root(self, root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2934 |
self.__prop_lock.acquire() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2935 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2936 |
if root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2937 |
root = os.path.abspath(root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2938 |
self.__tmp_root = os.path.join(root, "tmp") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2939 |
elif self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2940 |
self.__tmp_root = os.path.join(self.root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2941 |
"tmp") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2942 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2943 |
self.__tmp_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2944 |
self.__writable_root = root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2945 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2946 |
self.__prop_lock.release() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2947 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2948 |
def __unlock_repository(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2949 |
"""Unlocks the repository so other consumers may modify it.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2950 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2951 |
# XXX need filesystem unlock too? |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2952 |
self.__lock.release() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2953 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2954 |
def __write_config(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2955 |
"""Save the repository's current configuration data.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2956 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2957 |
# No changes should be written to disk in readonly mode. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2958 |
if self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2959 |
return |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2960 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2961 |
# Save a new configuration (or refresh existing). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2962 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2963 |
self.cfg.write() |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
2964 |
except EnvironmentError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2965 |
# If we're unable to write due to the following |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2966 |
# errors, it isn't critical to the operation of |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2967 |
# the repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2968 |
if e.errno not in (errno.EPERM, errno.EACCES, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2969 |
errno.EROFS): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2970 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2971 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
2972 |
def __new_rstore(self, pub, allow_invalid=False): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2973 |
assert pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2974 |
if pub in self.__rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2975 |
raise RepositoryDuplicatePublisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2976 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2977 |
if self.pub_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2978 |
# Newer repository format stores repository data |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2979 |
# partitioned by publisher. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2980 |
root = os.path.join(self.pub_root, pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2981 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2982 |
# Older repository formats store repository data |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2983 |
# in a shared root area. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2984 |
root = self.root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2985 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2986 |
writ_root = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2987 |
if self.writable_root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2988 |
writ_root = os.path.join(self.writable_root, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2989 |
"publisher", pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2990 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2991 |
froot = self.file_root |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2992 |
if self.root and froot and \ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2993 |
froot.startswith(self.root): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2994 |
# Ignore the file root if it's the default one. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2995 |
froot = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
2996 |
|
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2997 |
file_layout = None |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2998 |
if self.version >= 4: |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
2999 |
# For version 4 and newer repositories, assume a V1 |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
3000 |
# layout for file content. Older repository formats |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
3001 |
# might use a mix of layouts. |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
3002 |
file_layout = layout.V1Layout() |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
3003 |
|
2990
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
3004 |
rstore = _RepoStore(allow_invalid=allow_invalid, |
2cc6693a7d83
17515714 pkgrepo should allow some operations for corrupt repositories
Shawn Walker <shawn.walker@oracle.com>
parents:
2984
diff
changeset
|
3005 |
file_layout=file_layout, file_root=froot, |
2606
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
3006 |
log_obj=self.log_obj, mirror=self.mirror, pub=pub, |
a9d3345192ee
19130 non-existent caches can significantly degrade transport performance
Shawn Walker <shawn.walker@oracle.com>
parents:
2591
diff
changeset
|
3007 |
read_only=self.read_only, root=root, |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3008 |
sort_file_max_size=self.__sort_file_max_size, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3009 |
writable_root=writ_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3010 |
self.__rstores[pub] = rstore |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3011 |
return rstore |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3012 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3013 |
def abandon(self, trans_id): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3014 |
"""Aborts a transaction with the specified Transaction ID. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3015 |
Returns the current package state. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3016 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3017 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3018 |
rstore = self.get_trans_rstore(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3019 |
return rstore.abandon(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3020 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3021 |
def add(self, trans_id, action): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3022 |
"""Adds an action and its content to a transaction with the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3023 |
specified Transaction ID. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3024 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3025 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3026 |
rstore = self.get_trans_rstore(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3027 |
return rstore.add(trans_id, action) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3028 |
|
3101
3e5f4c6e7bab
19175228 pkgrecv --clone creates a pub.p5i file which makes the repo unusable from AI
Erik Trauschke <erik.trauschke@oracle.com>
parents:
2990
diff
changeset
|
3029 |
def add_publisher(self, pub, skip_config=False): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3030 |
"""Creates a repository storage area for the publisher defined |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3031 |
by the provided Publisher object and then stores the publisher's |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3032 |
configuration information. Only supported for version 4 and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3033 |
later repositories. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3034 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3035 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3036 |
if self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3037 |
raise RepositoryMirrorError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3038 |
if self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3039 |
raise RepositoryReadOnlyError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3040 |
if not self.pub_root or self.version < 4: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3041 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3042 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3043 |
# Create the new repository storage area. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3044 |
rstore = self.__new_rstore(pub.prefix) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3045 |
|
3101
3e5f4c6e7bab
19175228 pkgrecv --clone creates a pub.p5i file which makes the repo unusable from AI
Erik Trauschke <erik.trauschke@oracle.com>
parents:
2990
diff
changeset
|
3046 |
if skip_config: |
3e5f4c6e7bab
19175228 pkgrecv --clone creates a pub.p5i file which makes the repo unusable from AI
Erik Trauschke <erik.trauschke@oracle.com>
parents:
2990
diff
changeset
|
3047 |
return |
3e5f4c6e7bab
19175228 pkgrecv --clone creates a pub.p5i file which makes the repo unusable from AI
Erik Trauschke <erik.trauschke@oracle.com>
parents:
2990
diff
changeset
|
3048 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3049 |
# Update the publisher's configuration. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3050 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3051 |
rstore.update_publisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3052 |
except: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3053 |
# If the above fails, be certain to delete the new |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3054 |
# repository storage area and then re-raise the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3055 |
# original exception. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3056 |
exc_type, exc_value, exc_tb = sys.exc_info() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3057 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3058 |
shutil.rmtree(rstore.root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3059 |
finally: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3060 |
# This ensures that the original exception and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3061 |
# traceback are used. |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
3062 |
six.reraise(exc_value, None, exc_tb) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3063 |
|
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3064 |
def remove_publisher(self, pfxs, repo_path, synch=False): |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3065 |
"""Removes a repository storage area and configuration |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3066 |
information for the publisher defined by the provided |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3067 |
publisher prefix. pfxs must be an iterable. |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3068 |
""" |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3069 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3070 |
if self.mirror: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3071 |
raise RepositoryMirrorError() |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3072 |
if self.read_only: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3073 |
raise RepositoryReadOnlyError() |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3074 |
if not self.pub_root or self.version < 4: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3075 |
raise RepositoryUnsupportedOperationError() |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3076 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3077 |
# create a temp folder, move the publisher folder into it |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3078 |
# and then remove the temp folder recursively |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3079 |
tmp_paths = [] |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3080 |
self.__lock_repository() |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3081 |
try: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3082 |
for pfx in pfxs: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3083 |
repo_tmp_path = self.__mkdtemppub(pfx) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3084 |
tmp_paths.append(repo_tmp_path) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3085 |
pub_path = os.path.join(repo_path, "publisher", |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3086 |
pfx) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3087 |
if os.path.exists(pub_path) and \ |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3088 |
os.path.exists(repo_tmp_path) : |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3089 |
portable.rename(pub_path, |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3090 |
repo_tmp_path) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3091 |
except EnvironmentError as e: |
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3092 |
if e.errno == errno.EACCES: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3093 |
raise apx.PermissionsException( |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3094 |
e.filename) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3095 |
if e.errno == errno.EROFS: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3096 |
raise apx.ReadOnlyFileSystemException( |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3097 |
e.filename) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3098 |
raise |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3099 |
finally: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3100 |
self.__unlock_repository() |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3101 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3102 |
nullf = open(os.devnull, "w") |
3273
776d569cd953
17983590 problem in PYTHON-MOD/PKG
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3245
diff
changeset
|
3103 |
args = ["/usr/bin/rm", "-rf"] |
776d569cd953
17983590 problem in PYTHON-MOD/PKG
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3245
diff
changeset
|
3104 |
args.extend(tmp_paths) |
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3105 |
if not synch: |
3273
776d569cd953
17983590 problem in PYTHON-MOD/PKG
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3245
diff
changeset
|
3106 |
args = ["/usr/bin/nohup"] + args |
776d569cd953
17983590 problem in PYTHON-MOD/PKG
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3245
diff
changeset
|
3107 |
subp = subprocess.Popen(args, stdout=nullf, stderr=nullf) |
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3108 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3109 |
if synch: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3110 |
subp.wait() |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3111 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3112 |
def __mkdtemppub(self, pfx): |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3113 |
"""Create a temp directory under repository directory |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3114 |
and corresponding temp pub folder with format |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3115 |
rm.pubname.xxxxxx under this folder |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3116 |
""" |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3117 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3118 |
if not self.root: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3119 |
return |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3120 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3121 |
if self.writable_root: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3122 |
root = self.writable_root |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3123 |
else: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3124 |
root = self.root |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3125 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3126 |
tempdir = os.path.normpath(os.path.join(root, "tmp")) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3127 |
|
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3128 |
try: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3129 |
misc.makedirs(tempdir) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3130 |
return tempfile.mkdtemp(prefix="rm." + pfx + ".", |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3131 |
dir=tempdir) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3132 |
|
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3133 |
except EnvironmentError as e: |
2970
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3134 |
if e.errno == errno.EACCES: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3135 |
raise apx.PermissionsException( |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3136 |
e.filename) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3137 |
if e.errno == errno.EROFS: |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3138 |
raise apx.ReadOnlyFileSystemException( |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3139 |
e.filename) |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3140 |
raise |
b3a133bfb608
15771544 pkgrepo should have a way of removing an entire publisher
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
2962
diff
changeset
|
3141 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3142 |
def add_package(self, pfmri): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3143 |
"""Adds the specified FMRI to the repository's catalog.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3144 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3145 |
rstore = self.get_pub_rstore(pfmri.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3146 |
return rstore.add_package(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3147 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3148 |
def append(self, client_release, pfmri, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3149 |
"""Starts an append transaction for the specified client |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3150 |
release and FMRI. Returns the Transaction ID for the new |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3151 |
transaction.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3152 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3153 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3154 |
if not isinstance(pfmri, fmri.PkgFmri): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3155 |
pfmri = fmri.PkgFmri(pfmri, client_release) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3156 |
except fmri.FmriError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3157 |
raise RepositoryInvalidFMRIError(e) |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
3158 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3159 |
if pub and not pfmri.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3160 |
pfmri.publisher = pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3161 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3162 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3163 |
rstore = self.get_pub_rstore(pfmri.publisher) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3164 |
except RepositoryUnknownPublisher as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3165 |
if not pfmri.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3166 |
# No publisher given in FMRI and no default |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3167 |
# publisher so treat as invalid FMRI. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3168 |
raise RepositoryUnqualifiedFMRIError(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3169 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3170 |
return rstore.append(client_release, pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3171 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3172 |
def catalog_0(self, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3173 |
"""Returns a generator object for the full version of |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3174 |
the catalog contents. Incremental updates are not provided |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3175 |
as the v0 updatelog does not support renames, obsoletion, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3176 |
package removal, etc. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3177 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3178 |
'pub' is the prefix of the publisher to return catalog data for. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3179 |
If not specified, the default publisher will be used. If no |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3180 |
default publisher has been configured, an AssertionError will be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3181 |
raised. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3182 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3183 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3184 |
self.inc_catalog() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3185 |
rstore = self.get_pub_rstore(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3186 |
return rstore.catalog_0() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3187 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3188 |
def catalog_1(self, name, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3189 |
"""Returns the absolute pathname of the named catalog file. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3190 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3191 |
'pub' is the prefix of the publisher to return catalog data for. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3192 |
If not specified, the default publisher will be used. If no |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3193 |
default publisher has been configured, an AssertionError will be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3194 |
raised. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3195 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3196 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3197 |
self.inc_catalog() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3198 |
rstore = self.get_pub_rstore(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3199 |
return rstore.catalog_1(name) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3200 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3201 |
def close(self, trans_id, add_to_catalog=True): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3202 |
"""Closes the transaction specified by 'trans_id'. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3203 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3204 |
Returns a tuple containing the package FMRI and the current |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3205 |
package state in the catalog. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3206 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3207 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3208 |
self.inc_catalog() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3209 |
rstore = self.get_trans_rstore(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3210 |
return rstore.close(trans_id, add_to_catalog=add_to_catalog) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3211 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3212 |
def file(self, fhash, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3213 |
"""Returns the absolute pathname of the file specified by the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3214 |
provided SHA1-hash name. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3215 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3216 |
'pub' is the prefix of the publisher to return catalog data for. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3217 |
If not specified, the default publisher will be used. If no |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3218 |
default publisher has been configured, an AssertionError will be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3219 |
raised. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3220 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3221 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3222 |
self.inc_file() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3223 |
if pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3224 |
rstore = self.get_pub_rstore(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3225 |
return rstore.file(fhash) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3226 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3227 |
# If a publisher wasn't specified, every repository store will |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3228 |
# have to be tried since default publisher can't safely apply |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3229 |
# here. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3230 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3231 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3232 |
return rstore.file(fhash) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3233 |
except RepositoryFileNotFoundError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3234 |
# Ignore and try next repository store. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3235 |
pass |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3236 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3237 |
# Not found in any repository store. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3238 |
raise RepositoryFileNotFoundError(fhash) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3239 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3240 |
def get_catalog(self, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3241 |
"""Return the catalog object for the given publisher. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3242 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3243 |
'pub' is the optional name of the publisher to return the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3244 |
catalog for. If not provided, the default publisher's |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3245 |
catalog will be returned. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3246 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3247 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3248 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3249 |
rstore = self.get_pub_rstore(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3250 |
return rstore.catalog |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3251 |
except RepositoryUnknownPublisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3252 |
if pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3253 |
# In this case, an unknown publisher's |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3254 |
# catalog was requested. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3255 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3256 |
# No catalog to return. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3257 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3258 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3259 |
def get_pub_rstore(self, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3260 |
"""Return a repository storage object matching the given |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3261 |
publisher (if provided). If not provided, a repository |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3262 |
storage object for the default publisher will be returned. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3263 |
A RepositoryUnknownPublisher exception will be raised if |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3264 |
no storage object for the given publisher exists. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3265 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3266 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3267 |
if pub is None: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3268 |
pub = self.cfg.get_property("publisher", "prefix") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3269 |
if not pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3270 |
raise RepositoryUnknownPublisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3271 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3272 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3273 |
rstore = self.__rstores[pub] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3274 |
except KeyError: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3275 |
raise RepositoryUnknownPublisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3276 |
return rstore |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3277 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3278 |
def __get_cfg_publisher(self, pub): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3279 |
"""Return a publisher object for the given publisher prefix |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3280 |
based on the repository's configuration information. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3281 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3282 |
assert self.version < 4 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3283 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3284 |
alias = self.cfg.get_property("publisher", "alias") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3285 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3286 |
rargs = {} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3287 |
for prop in ("collection_type", "description", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3288 |
"legal_uris", "mirrors", "name", "origins", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3289 |
"refresh_seconds", "registration_uri", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3290 |
"related_uris"): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3291 |
rargs[prop] = self.cfg.get_property( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3292 |
"repository", prop) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3293 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3294 |
repo = publisher.Repository(**rargs) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3295 |
return publisher.Publisher(pub, alias=alias, |
2310
ce10607d5332
11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2301
diff
changeset
|
3296 |
repository=repo) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3297 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3298 |
def get_publishers(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3299 |
"""Return publisher objects for all publishers known by the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3300 |
repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3301 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3302 |
return [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3303 |
self.get_publisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3304 |
for pub in self.publishers |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3305 |
] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3306 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3307 |
def get_publisher(self, pub): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3308 |
"""Return the publisher object for the given publisher. Raises |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3309 |
RepositoryUnknownPublisher if no matching publisher can be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3310 |
found. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3311 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3312 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3313 |
if not pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3314 |
raise RepositoryUnknownPublisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3315 |
if self.version < 4: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3316 |
return self.__get_cfg_publisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3317 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3318 |
rstore = self.get_pub_rstore(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3319 |
if not rstore: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3320 |
raise RepositoryUnknownPublisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3321 |
return rstore.get_publisher() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3322 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3323 |
def get_status(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3324 |
"""Return a dictionary of status information about the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3325 |
repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3326 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3327 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3328 |
if self.locked: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3329 |
rstatus = "processing" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3330 |
else: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3331 |
rstatus = "online" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3332 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3333 |
rdata = { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3334 |
"repository": { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3335 |
"configuration": self.cfg.get_index(), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3336 |
"publishers": {}, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3337 |
"requests": { |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3338 |
"catalog": self.catalog_requests, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3339 |
"file": self.file_requests, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3340 |
"manifests": self.manifest_requests, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3341 |
}, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3342 |
"status": rstatus, # Overall repository state. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3343 |
"version": self.version, # Version of repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3344 |
}, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3345 |
"version": 1, # Version of status structure. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3346 |
} |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3347 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3348 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3349 |
if not rstore.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3350 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3351 |
pubdata = rdata["repository"]["publishers"] |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3352 |
pubdata[rstore.publisher] = rstore.get_status() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3353 |
return rdata |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3354 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3355 |
def get_trans_rstore(self, trans_id): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3356 |
"""Return a repository storage object matching the given |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3357 |
Transaction ID. If no repository storage object has a |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3358 |
matching Transaction ID, a RepositoryInvalidTransactionIDError |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3359 |
will be raised. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3360 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3361 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3362 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3363 |
if rstore.has_transaction(trans_id): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3364 |
return rstore |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3365 |
raise RepositoryInvalidTransactionIDError(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3366 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3367 |
@property |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3368 |
def in_flight_transactions(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3369 |
"""The number of transactions awaiting completion.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3370 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3371 |
return sum( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3372 |
rstore.in_flight_transactions |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3373 |
for rstore in self.rstores |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3374 |
) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3375 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3376 |
def inc_catalog(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3377 |
self.__catalog_requests += 1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3378 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3379 |
def inc_file(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3380 |
self.__file_requests += 1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3381 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3382 |
def inc_manifest(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3383 |
self.__manifest_requests += 1 |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3384 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3385 |
@property |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3386 |
def locked(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3387 |
"""A boolean value indicating whether the repository is locked. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3388 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3389 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3390 |
return self.__lock and self.__lock.locked |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3391 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3392 |
def manifest(self, pfmri, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3393 |
"""Returns the absolute pathname of the manifest file for the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3394 |
specified FMRI. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3395 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3396 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3397 |
self.inc_manifest() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3398 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3399 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3400 |
if not isinstance(pfmri, fmri.PkgFmri): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3401 |
pfmri = fmri.PkgFmri(pfmri) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3402 |
except fmri.FmriError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3403 |
raise RepositoryInvalidFMRIError(e) |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
3404 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3405 |
if not pub and pfmri.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3406 |
pub = pfmri.publisher |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3407 |
elif pub and not pfmri.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3408 |
pfmri.publisher = pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3409 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3410 |
if pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3411 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3412 |
rstore = self.get_pub_rstore(pub) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3413 |
except RepositoryUnknownPublisher as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3414 |
raise RepositoryManifestNotFoundError(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3415 |
return rstore.manifest(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3416 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3417 |
# If a publisher wasn't specified, every repository store will |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3418 |
# have to be tried since default publisher can't safely apply |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3419 |
# here. It's assumed that it's unlikely that two publishers |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3420 |
# share the exact same FMRI. Since this case is only for |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3421 |
# compatibility, it shouldn't be much of a concern. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3422 |
mpath = None |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3423 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3424 |
if not rstore.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3425 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3426 |
mpath = rstore.manifest(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3427 |
if not mpath or not os.path.exists(mpath): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3428 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3429 |
return mpath |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3430 |
raise RepositoryManifestNotFoundError(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3431 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3432 |
def open(self, client_release, pfmri, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3433 |
"""Starts a transaction for the specified client release and |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3434 |
FMRI. Returns the Transaction ID for the new transaction. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3435 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3436 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3437 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3438 |
if not isinstance(pfmri, fmri.PkgFmri): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3439 |
pfmri = fmri.PkgFmri(pfmri, client_release) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3440 |
except fmri.FmriError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3441 |
raise RepositoryInvalidFMRIError(e) |
2962
ce8cd4c07986
15433013 content hash handling should handle different hash functions
Tim Foster <tim.s.foster@oracle.com>
parents:
2942
diff
changeset
|
3442 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3443 |
if pub and not pfmri.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3444 |
pfmri.publisher = pub |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3445 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3446 |
try: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3447 |
rstore = self.get_pub_rstore(pfmri.publisher) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3448 |
except RepositoryUnknownPublisher as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3449 |
if not pfmri.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3450 |
# No publisher given in FMRI and no default |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3451 |
# publisher so treat as invalid FMRI. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3452 |
raise RepositoryUnqualifiedFMRIError(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3453 |
# A publisher was provided, but no repository storage |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3454 |
# object exists yet, so add one. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3455 |
rstore = self.__new_rstore(pfmri.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3456 |
return rstore.open(client_release, pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3457 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3458 |
def get_matching_fmris(self, patterns, pubs=misc.EmptyI): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3459 |
"""Given a user-specified list of FMRI pattern strings, return |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3460 |
a tuple of ('matching', 'references'), where matching is a dict |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3461 |
of matching fmris and references is a dict of the patterns |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3462 |
indexed by matching FMRI respectively: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3463 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3464 |
{ |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3465 |
pkgname: [fmri1, fmri2, ...], |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3466 |
pkgname: [fmri1, fmri2, ...], |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3467 |
... |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3468 |
} |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3469 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3470 |
{ |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3471 |
fmri1: [pat1, pat2, ...], |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3472 |
fmri2: [pat1, pat2, ...], |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3473 |
... |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3474 |
} |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3475 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3476 |
'patterns' is the list of package patterns to match. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3477 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3478 |
'pubs' is an optional set of publisher prefixes to restrict the |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3479 |
results to. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3480 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3481 |
Constraint used is always AUTO as per expected UI behavior when |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3482 |
determining successor versions. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3483 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3484 |
Note that patterns starting w/ pkg:/ require an exact match; |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3485 |
patterns containing '*' will using fnmatch rules; the default |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3486 |
trailing match rules are used for remaining patterns. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3487 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3488 |
Exactly duplicated patterns are ignored. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3489 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3490 |
Routine raises PackageMatchErrors if errors occur: it is illegal |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3491 |
to specify multiple different patterns that match the same |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3492 |
package name. Only patterns that contain wildcards are allowed |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3493 |
to match multiple packages. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3494 |
""" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3495 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3496 |
def merge(src, dest): |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
3497 |
for k, v in six.iteritems(src): |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3498 |
if k in dest: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3499 |
dest[k].extend(v) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3500 |
else: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3501 |
dest[k] = v |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3502 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3503 |
matching = {} |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3504 |
references = {} |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3505 |
unmatched = None |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3506 |
for rstore in self.rstores: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3507 |
if not rstore.catalog_root or not rstore.publisher: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3508 |
# No catalog to aggregate matches from. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3509 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3510 |
if pubs and rstore.publisher not in pubs: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3511 |
# Doesn't match specified publisher. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3512 |
continue |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3513 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3514 |
# Get matching items from target catalog and then |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3515 |
# merge the result. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3516 |
mdict, mrefs, munmatched = \ |
2591
13f24c472f0b
19055 providing multiple exact fmris breaks pkgsign
Brock Pytlik <brock.pytlik@oracle.com>
parents:
2580
diff
changeset
|
3517 |
rstore.catalog.get_matching_fmris(patterns) |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3518 |
merge(mdict, matching) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3519 |
merge(mrefs, references) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3520 |
if unmatched is None: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3521 |
unmatched = munmatched |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3522 |
else: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3523 |
# The only unmatched entries that are |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3524 |
# interesting are the ones that have no |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3525 |
# matches for any publisher. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3526 |
unmatched.intersection_update(munmatched) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3527 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3528 |
del mdict, mrefs, munmatched |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3529 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3530 |
if unmatched: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3531 |
# One or more patterns didn't match a package from any |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3532 |
# publisher. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3533 |
raise apx.PackageMatchErrors(unmatched_fmris=unmatched) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3534 |
if not matching: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3535 |
# No packages or no publishers matching 'pubs'. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3536 |
raise apx.PackageMatchErrors(unmatched_fmris=patterns) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3537 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3538 |
return matching, references |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3539 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3540 |
@property |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3541 |
def publishers(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3542 |
"""A set containing the list of publishers known to the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3543 |
repository.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3544 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3545 |
pubs = set() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3546 |
pub = self.cfg.get_property("publisher", "prefix") |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3547 |
if pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3548 |
pubs.add(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3549 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3550 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3551 |
if rstore.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3552 |
pubs.add(rstore.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3553 |
return pubs |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3554 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3555 |
def refresh_index(self, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3556 |
""" This function refreshes the search indexes if there any new |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3557 |
packages. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3558 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3559 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3560 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3561 |
if not rstore.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3562 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3563 |
if pub and rstore.publisher and rstore.publisher != pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3564 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3565 |
rstore.refresh_index() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3566 |
|
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3567 |
def remove_packages(self, packages, progtrack=None, pub=None): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3568 |
"""Removes the specified packages from the repository. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3569 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3570 |
'packages' is a list of FMRIs of packages to remove. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3571 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3572 |
'progtrack' is an optional ProgressTracker object. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3573 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3574 |
'pub' is an optional publisher prefix to limit the operation to. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3575 |
""" |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3576 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3577 |
plist = set() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3578 |
pubs = set() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3579 |
for p in packages: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3580 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3581 |
pfmri = p |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3582 |
if not isinstance(pfmri, fmri.PkgFmri): |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3583 |
pfmri = fmri.PkgFmri(pfmri) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3584 |
if pub and not pfmri.publisher: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3585 |
pfmri.publisher = pub |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3586 |
if pfmri.publisher: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3587 |
pubs.add(pfmri.publisher) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3588 |
plist.add(pfmri) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3589 |
except fmri.FmriError as e: |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3590 |
raise RepositoryInvalidFMRIError(e) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3591 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3592 |
if len(pubs) > 1: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3593 |
# Don't allow removal of packages from different |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3594 |
# publishers at the same time. Current transaction |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3595 |
# model relies on a single publisher at a time and |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3596 |
# transport is mapped the same way. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3597 |
raise RepositoryUnsupportedOperationError() |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3598 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3599 |
if not pub and pubs: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3600 |
# Use publisher specified in one of the FMRIs instead |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3601 |
# of default publisher. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3602 |
pub = list(pubs)[0] |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3603 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3604 |
try: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3605 |
rstore = self.get_pub_rstore(pub) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3606 |
except RepositoryUnknownPublisher as e: |
2301
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3607 |
for p in plist: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3608 |
if not pfmri.publisher: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3609 |
# No publisher given in FMRI and no |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3610 |
# default publisher so treat as |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3611 |
# invalid FMRI. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3612 |
raise RepositoryUnqualifiedFMRIError( |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3613 |
pfmri) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3614 |
raise |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3615 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3616 |
# Before moving on, assign publisher for every FMRI that doesn't |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3617 |
# have one already. |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3618 |
for p in plist: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3619 |
if not pfmri.publisher: |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3620 |
pfmri.publisher = rstore.publisher |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3621 |
|
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3622 |
rstore.remove_packages(packages, progtrack=progtrack) |
d4b6490d2c24
7213 pkgrepo should support package removal
Shawn Walker <shawn.walker@oracle.com>
parents:
2297
diff
changeset
|
3623 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3624 |
def add_content(self, pub=None, refresh_index=False): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3625 |
"""Looks for packages added to the repository that are not in |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3626 |
the catalog, adds them, and then updates search data by default. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3627 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3628 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3629 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3630 |
if not rstore.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3631 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3632 |
if pub and rstore.publisher and rstore.publisher != pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3633 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3634 |
rstore.add_content(refresh_index=refresh_index) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3635 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3636 |
def add_file(self, trans_id, data, size=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3637 |
"""Adds a file to a transaction with the specified Transaction |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3638 |
ID.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3639 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3640 |
rstore = self.get_trans_rstore(trans_id) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3641 |
return rstore.add_file(trans_id, data=data, size=size) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3642 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3643 |
def rebuild(self, build_catalog=True, build_index=False, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3644 |
"""Rebuilds the repository catalog and search indexes using the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3645 |
package manifests currently in the repository. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3646 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3647 |
'build_catalog' is an optional boolean value indicating whether |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3648 |
package catalogs should be rebuilt. If True, existing search |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3649 |
data will be discarded. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3650 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3651 |
'build_index' is an optional boolean value indicating whether |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3652 |
search indexes should be built. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3653 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3654 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3655 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3656 |
if not rstore.publisher: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3657 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3658 |
if pub and rstore.publisher and rstore.publisher != pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3659 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3660 |
rstore.rebuild(build_catalog=build_catalog, |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3661 |
build_index=build_index) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3662 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3663 |
def reload(self): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3664 |
"""Reloads the repository state information.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3665 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3666 |
self.__lock_repository() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3667 |
self.__init_state() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3668 |
self.__unlock_repository() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3669 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3670 |
def replace_package(self, pfmri): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3671 |
"""Replaces the information for the specified FMRI in the |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3672 |
repository's catalog.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3673 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3674 |
rstore = self.get_pub_rstore(pfmri.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3675 |
return rstore.replace_package(pfmri) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3676 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3677 |
def reset_search(self, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3678 |
"""Discards currenty loaded search data so that it will be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3679 |
reloaded for the next search operation. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3680 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3681 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3682 |
if pub and rstore.publisher and rstore.publisher != pub: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3683 |
continue |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3684 |
rstore.reset_search() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3685 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3686 |
def search(self, queries, pub=None): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3687 |
"""Searches the index for each query in the list of queries. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3688 |
Each entry should be the output of str(Query), or a Query |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3689 |
object. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3690 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3691 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3692 |
rstore = self.get_pub_rstore(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3693 |
return rstore.search(queries) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3694 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3695 |
def supports(self, op, ver): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3696 |
"""Returns a boolean value indicating whether the specified |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3697 |
operation is supported at the given version. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3698 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3699 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3700 |
if op == "search" and self.root: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3701 |
return True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3702 |
if op == "catalog" and ver == 1: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3703 |
# For catalog v1 to be "supported", all storage objects |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3704 |
# must use it. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3705 |
for rstore in self.rstores: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3706 |
if rstore.catalog_version == 0: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3707 |
return False |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3708 |
return True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3709 |
# Assume operation is supported otherwise. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3710 |
return True |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3711 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3712 |
def update_publisher(self, pub): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3713 |
"""Updates the configuration information for the publisher |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3714 |
defined by the provided Publisher object. Only supported |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3715 |
for version 4 and later repositories. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3716 |
""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3717 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3718 |
if self.mirror: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3719 |
raise RepositoryMirrorError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3720 |
if self.read_only: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3721 |
raise RepositoryReadOnlyError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3722 |
if not self.pub_root or self.version < 4: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3723 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3724 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3725 |
# Get the repository storage area for the given publisher. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3726 |
rstore = self.get_pub_rstore(pub.prefix) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3727 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3728 |
# Update the publisher's configuration. |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3729 |
rstore.update_publisher(pub) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
3730 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3731 |
def verify(self, pubs=[], allowed_checks=[], |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3732 |
force_dep_check=False, ignored_dep_files=[], progtrack=None): |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3733 |
"""A generator that verifies that repository content matches |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3734 |
expected state for all or specified publishers. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3735 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3736 |
'progtrack' is an optional ProgressTracker object. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3737 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3738 |
'pubs' is an optional publisher list to limit the |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3739 |
operation to. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3740 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3741 |
'disable_checks' is a list of verfications which should be |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3742 |
disabled. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3743 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3744 |
'force_dep_check' is a boolean variable to indicate whether we |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3745 |
should run complete dependency check. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3746 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3747 |
'ignored_dep_files' is a list of files which contain |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3748 |
ignored dependencies. |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3749 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3750 |
The generator yields tuples of the form: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3751 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3752 |
(error_code, path, message, details) where |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3753 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3754 |
'error_code' an integer error, correponding to REPO_VERIFY_* |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3755 |
'path' the path to the broken file in the repository |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3756 |
'message' a summary of the error |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3757 |
'details' a dictionary of strings containing more detail |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3758 |
about the nature of the error. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3759 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3760 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3761 |
if self.cfg.get_property("repository", "version") != 4: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3762 |
raise RepositoryInvalidVersionError(self.root, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3763 |
self.cfg.get_property("repository", "version"), 4) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3764 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3765 |
trust_anchor_dir = self.cfg.get_property("repository", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3766 |
"trust-anchor-directory") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3767 |
sig_required_names = set(self.cfg.get_property("repository", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3768 |
"signature-required-names")) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3769 |
use_crls = self.cfg.get_property("repository", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3770 |
"check-certificate-revocation") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
3771 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3772 |
for pub in pubs: |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3773 |
rstore = self.get_pub_rstore(pub.prefix) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3774 |
for verify_tuple in rstore.verify(progtrack=progtrack, |
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3775 |
pub=pub, trust_anchor_dir=trust_anchor_dir, |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3776 |
sig_required_names=sig_required_names, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3777 |
use_crls=use_crls): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3778 |
yield verify_tuple |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3779 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3780 |
if VERIFY_DEPENDENCY in allowed_checks: |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3781 |
for verify_tuple in self.__verify_depend( |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
3782 |
[pub.prefix for pub in pubs], |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3783 |
force_dep_check, progtrack, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3784 |
ignored_dep_files=ignored_dep_files): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3785 |
yield verify_tuple |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3786 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3787 |
def __build_error_tuple(self, fmri, depend, depType, message): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3788 |
"""Build a dependency verification error tuple.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3789 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3790 |
reason = {"pkg": fmri, "depend":depend, "type":depType} |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3791 |
return (REPO_VERIFY_DEPENDERROR, None, message, reason) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3792 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3793 |
def __find_verify_match(self, afmri, fmris, dep_type, all_pkgs, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3794 |
force_dep_check, ignored_pkgs): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3795 |
"""Generator function to find the matching package given the |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3796 |
dependency fmri.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3797 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3798 |
# Get the containing package stem for looking up the ignored |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3799 |
# deps. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3800 |
astem = afmri.get_pkg_stem(anarchy=True, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3801 |
include_scheme=False) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3802 |
for f in fmris: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3803 |
try: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3804 |
pfmri = fmri.PkgFmri(f) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3805 |
except fmri.IllegalFmri: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3806 |
yield self.__build_error_tuple( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3807 |
afmri.get_fmri(), f, dep_type, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3808 |
_("Illegal dependency FMRI.")) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3809 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3810 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3811 |
pstem = pfmri.get_pkg_stem(anarchy=True, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3812 |
include_scheme=False) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3813 |
# Feature is reserved dependency term. We should ignore |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3814 |
# dependency starts with feature. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3815 |
if pstem.startswith("feature/"): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3816 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3817 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3818 |
found = False |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3819 |
if pstem in all_pkgs: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3820 |
# If the dependency package does not have |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3821 |
# publisher and version, then find matched stem |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3822 |
# means dependency is found. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3823 |
if not pfmri.publisher and \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3824 |
not pfmri.version: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3825 |
found = True |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3826 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3827 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3828 |
rfmris = all_pkgs[pstem] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3829 |
for rf in rfmris: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3830 |
if pfmri.publisher and rf.publisher \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3831 |
!= pfmri.publisher: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3832 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3833 |
if pfmri.version: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3834 |
# For incorporate dependencies, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3835 |
# we need to do more work to |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3836 |
# see if the dependency is |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3837 |
# satisfied. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3838 |
if dep_type == "incorporate": |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3839 |
if not rf.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3840 |
pfmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3841 |
pkg.version.CONSTRAINT_AUTO): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3842 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3843 |
else: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3844 |
# If the current |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3845 |
# version is less than |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3846 |
# the dependency's, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3847 |
# skip. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3848 |
if not rf.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3849 |
pfmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3850 |
pkg.version.CONSTRAINT_NONE) \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3851 |
and rf.version != pfmri.version: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3852 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3853 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3854 |
# Dependency match found. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3855 |
found = True |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3856 |
break |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3857 |
# We can ignore missing optional dependencies if not in |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3858 |
# force_dep_check mode. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3859 |
elif not force_dep_check and dep_type == "optional": |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3860 |
found = True |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3861 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3862 |
if not found: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3863 |
if force_dep_check or astem not in ignored_pkgs: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3864 |
yield self.__build_error_tuple( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3865 |
afmri.get_fmri(), f, dep_type, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3866 |
_("Missing dependency.")) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3867 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3868 |
else: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3869 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3870 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3871 |
# To make sure the not found dependency is actually |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3872 |
# ignored, we need to check the ignored deps. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3873 |
for attrs in ignored_pkgs[astem]: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3874 |
pub = fmri.PkgFmri( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3875 |
attrs["pkg"]).publisher |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3876 |
if pub != None and pub != afmri.publisher: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3877 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3878 |
# Check the lower bound. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3879 |
minfmri = attrs.get( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3880 |
"min_ver", None) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3881 |
if minfmri and not ( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3882 |
afmri.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3883 |
minfmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3884 |
pkg.version.CONSTRAINT_NONE) \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3885 |
or afmri.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3886 |
minfmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3887 |
pkg.version.CONSTRAINT_AUTO)): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3888 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3889 |
# Check the upper bound. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3890 |
maxfmri = attrs.get("max_ver", None) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3891 |
if maxfmri and not ( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3892 |
maxfmri.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3893 |
afmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3894 |
pkg.version.CONSTRAINT_NONE) \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3895 |
or afmri.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3896 |
maxfmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3897 |
pkg.version.CONSTRAINT_AUTO)): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3898 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3899 |
# If verifying dep is not in this entry, then |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3900 |
# continue to next. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3901 |
if pstem not in attrs["depend"]: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3902 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3903 |
for ifmri in attrs["depend"][pstem]: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3904 |
# Do not ignore if publishers do not |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3905 |
# match. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3906 |
if pfmri.publisher and \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3907 |
ifmri.publisher and \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3908 |
pfmri.publisher \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3909 |
!= ifmri.publisher: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3910 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3911 |
# If there is no version specified |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3912 |
# for ifmri, ignore all packages |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3913 |
# indicated by ifmri stem. So we |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3914 |
# set found. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3915 |
if not ifmri.version: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3916 |
found = True |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3917 |
break |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3918 |
# If there is no version for pfmri but |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3919 |
# there is one for ifmri, we will not |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3920 |
# try to ignore it. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3921 |
if not pfmri.version: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3922 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3923 |
# If versions match, # we report found. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3924 |
elif pfmri.version.is_successor( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3925 |
ifmri.version, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3926 |
pkg.version.CONSTRAINT_AUTO): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3927 |
found = True |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3928 |
break |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3929 |
if found: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3930 |
break |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3931 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3932 |
# Dependency not matched; report an error. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3933 |
if not found: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3934 |
yield self.__build_error_tuple( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3935 |
afmri.get_fmri(), f, dep_type, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3936 |
_("Missing dependency.")) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3937 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3938 |
def __gen_verify_dependency_actions(self, pubs): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3939 |
"""Generator function which provides depend and set actions |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3940 |
stored in catalog.dependency.C for verification for a list of |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3941 |
given publishers.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3942 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3943 |
for pub in pubs: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3944 |
for r, e, acts in pub.catalog.entry_actions( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3945 |
(pub.catalog.DEPENDENCY,)): |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
3946 |
apkg = "pkg://{0}/{1}@{2}".format(*r) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3947 |
yield apkg, acts |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3948 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3949 |
def __get_dep_actions_checklist(self, force_dep_check, acts): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3950 |
"""Get a list of dependency actions which need to be |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3951 |
checked.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3952 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3953 |
check_deps = [] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3954 |
for act in acts: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3955 |
if act.name != "depend": |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3956 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3957 |
tmpfmris = act.attrlist("fmri") |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3958 |
dep_type = act.attrs.get("type") |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3959 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3960 |
ignore_check = None |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3961 |
if not force_dep_check: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3962 |
ic = act.attrs.get("ignore-check") |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3963 |
if ic: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3964 |
ignore_check = ic.lower() |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3965 |
if not ignore_check and tmpfmris and dep_type: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3966 |
if dep_type != "exclude" and dep_type != \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3967 |
"parent": |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3968 |
check_deps.append((tmpfmris, dep_type)) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3969 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3970 |
return check_deps |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3971 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3972 |
def __read_ignored_dep_file(self, filename): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3973 |
"""Read ignored dependency file.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3974 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3975 |
try: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3976 |
with open(filename) as igfd: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3977 |
lines = igfd.readlines() |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3978 |
return lines |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
3979 |
except EnvironmentError as e: |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3980 |
if e.errno == errno.ENOENT: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3981 |
raise RepositoryNoSuchFileError(e.filename) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3982 |
if e.errno == errno.EACCES: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3983 |
raise apx.PermissionsException(e.filename) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3984 |
if e.errno == errno.EROFS: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3985 |
raise apx.ReadOnlyFileSystemException( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3986 |
e.filename) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3987 |
raise |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3988 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3989 |
def __load_ignored_packages(self, ignored_dep_files=None): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3990 |
"""Load ignored dependency packages.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3991 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3992 |
allowed_attrs = set(["pkg", "min_ver", "max_ver", "depend"]) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3993 |
mandatory_attrs = set(["pkg", "depend"]) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3994 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3995 |
ignored_pkgs_dict = {} |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3996 |
if not ignored_dep_files: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3997 |
return ignored_pkgs_dict |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3998 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
3999 |
for igf in ignored_dep_files: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4000 |
lines = self.__read_ignored_dep_file(igf) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4001 |
for le in lines: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4002 |
entry = le.strip() |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4003 |
# If line is empty or comments, do not process. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4004 |
if not entry or entry.startswith("#"): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4005 |
continue |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4006 |
dumentry = "set name='bogus' value=0 " + entry |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4007 |
try: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4008 |
act = actions._actions.fromstr(dumentry) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
4009 |
except actions.ActionError as e: |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4010 |
raise RepositoryInvalidIgnoreDepEntryError(igf, entry) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4011 |
attrs = act.attrs |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4012 |
attrs.pop("name") |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4013 |
attrs.pop("value") |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4014 |
attrks = set(attrs.keys()) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4015 |
unknowns = None |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4016 |
if not attrks.issubset( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4017 |
allowed_attrs): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4018 |
unknowns = attrks - allowed_attrs |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4019 |
if unknowns: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4020 |
raise RepositoryIgnoreDepEntryAttrError( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4021 |
"unknown", entry=entry, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4022 |
attrs=unknowns) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4023 |
if not mandatory_attrs.issubset(attrks): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4024 |
missings = mandatory_attrs - attrks |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4025 |
raise RepositoryIgnoreDepEntryAttrError( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4026 |
"missing", entry=entry, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4027 |
attrs=missings) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4028 |
try: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4029 |
istem = fmri.PkgFmri( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4030 |
attrs["pkg"]).get_pkg_stem( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4031 |
anarchy=True, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4032 |
include_scheme=False) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4033 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4034 |
if attrs.get("min_ver", None): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4035 |
minfmri = fmri.PkgFmri( |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
4036 |
"{0}@{1}".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
4037 |
attrs["pkg"], |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4038 |
attrs["min_ver"])) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4039 |
attrs["min_ver"] = minfmri |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4040 |
if attrs.get("max_ver", None): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4041 |
maxfmri = fmri.PkgFmri( |
3158
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
4042 |
"{0}@{1}".format( |
58c9c2c21e67
20177033 change string formatting for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3140
diff
changeset
|
4043 |
attrs["pkg"], |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4044 |
attrs["max_ver"]) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4045 |
) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4046 |
attrs["max_ver"] = maxfmri |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4047 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4048 |
depdict = {} |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4049 |
deplist = [] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4050 |
if not isinstance( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4051 |
attrs["depend"], list): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4052 |
deplist.append(attrs["depend"]) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4053 |
else: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4054 |
deplist = attrs["depend"] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4055 |
for dep in deplist: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4056 |
dfmri = fmri.PkgFmri(dep) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4057 |
dstem = dfmri.get_pkg_stem( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4058 |
anarchy=True, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4059 |
include_scheme=False) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4060 |
if dstem not in depdict: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4061 |
depdict[dstem] \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4062 |
= [dfmri] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4063 |
else: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4064 |
depdict[dstem].append( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4065 |
dfmri) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4066 |
attrs["depend"] = depdict |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4067 |
# Use stem of the package |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4068 |
# for fast look-up. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4069 |
if istem not in ignored_pkgs_dict: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4070 |
ignored_pkgs_dict[istem] = \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4071 |
[attrs] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4072 |
else: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4073 |
ignored_pkgs_dict[istem].append( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4074 |
attrs) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
4075 |
except fmri.FmriError as e: |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4076 |
raise RepositoryInvalidIgnoreDepFMRIError(igf, e.fmri) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4077 |
return ignored_pkgs_dict |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4078 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4079 |
def __verify_depend(self, found, force_dep_check, tracker, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4080 |
ignored_dep_files=None): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4081 |
"""Generator function to determine if the whole repository |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4082 |
or packages by given publishers form a complete dependency |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4083 |
graph.""" |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4084 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4085 |
all_pkgs = {} |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4086 |
# Load ignored packages on dependency check. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4087 |
ignored_pkgs = {} |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4088 |
# Only load ignored deps when not in force mode. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4089 |
if not force_dep_check: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4090 |
ignored_pkgs = self.__load_ignored_packages( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4091 |
ignored_dep_files=ignored_dep_files) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4092 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4093 |
# Collecting pkgs and fmris for all pubs. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4094 |
allpubrs = [rs for rs in self.rstores if rs.catalog_root] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4095 |
for rs in allpubrs: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4096 |
pkgs, fmris, unmatched = \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4097 |
rs.catalog.get_matching_fmris("*") |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4098 |
for k, v in pkgs.items(): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4099 |
if k in all_pkgs: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4100 |
# Merge value list as a set. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4101 |
all_pkgs[k] |= set(v) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4102 |
else: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4103 |
all_pkgs[k] = set(v) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4104 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4105 |
foundpubs = [self.get_pub_rstore(pub) for pub in found] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4106 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4107 |
# Get total number of verification goals. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4108 |
goals = 0 |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4109 |
for apkg, acts in self.__gen_verify_dependency_actions( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4110 |
foundpubs): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4111 |
goals += 1 |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4112 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4113 |
tracker.repo_verify_start(goals) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4114 |
for apkg, acts in self.__gen_verify_dependency_actions( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4115 |
foundpubs): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4116 |
try: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4117 |
afmri = fmri.PkgFmri(apkg) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
4118 |
except fmri.FmriError as e: |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4119 |
raise RepositoryInvalidFMRIError(e) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4120 |
tracker.repo_verify_start_pkg(afmri) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4121 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4122 |
tmpacts = [act for act in acts] |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4123 |
selected_deps = \ |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4124 |
self.__get_dep_actions_checklist( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4125 |
force_dep_check, tmpacts) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4126 |
for tmpfmris, dep_type in selected_deps: |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4127 |
for verify_tuple in self.__find_verify_match( |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4128 |
afmri, tmpfmris, dep_type, all_pkgs, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4129 |
force_dep_check, ignored_pkgs): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4130 |
yield verify_tuple |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4131 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4132 |
tracker.repo_verify_add_progress(afmri) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4133 |
tracker.repo_verify_end_pkg(afmri) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4134 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4135 |
tracker.job_done(tracker.JOB_REPO_VERIFY_REPO) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4136 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4137 |
def fix(self, pubs=[], force_dep_check=False, |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4138 |
ignored_dep_files=[], progtrack=None, verify_callback=None): |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4139 |
"""A generator that corrects any problems in the repository. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4140 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4141 |
'progtrack' is an optional ProgressTracker object. |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4142 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4143 |
'pubs' is an optional publisher list to limit the |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4144 |
operation to. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4145 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4146 |
'disable_checks' is a list of verfications which should be |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4147 |
disabled. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4148 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4149 |
'force_dep_check' is a boolean variable to indicate whether we |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4150 |
should run complete dependency check. |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4151 |
|
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4152 |
'ignored_dep_files' is a list of files which contain |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4153 |
ignored dependencies. |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4154 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4155 |
During the operation, we emit progress, printing the details |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4156 |
using 'verify_callback', a method which requires the following |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4157 |
arguments, progtrack, error_code, message, reason, which |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4158 |
correspond exactly to the tuple generated by self.verify(..) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4159 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4160 |
This method yields tuples of the form: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4161 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4162 |
(status_code, message, details) where |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4163 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4164 |
'status_code' an integerstatus code, corresponding to REPO_FIX* |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4165 |
'message' a summary of the operation performed |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4166 |
'details' a dictionary of strings describing the operation |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4167 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4168 |
""" |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4169 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4170 |
if self.cfg.get_property("repository", "version") != 4: |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4171 |
raise RepositoryInvalidVersionError(self.root, |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4172 |
self.cfg.get_property("repository", "version"), 4) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4173 |
|
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4174 |
trust_anchor_dir = self.cfg.get_property("repository", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4175 |
"trust-anchor-directory") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4176 |
sig_required_names = set(self.cfg.get_property("repository", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4177 |
"signature-required-names")) |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4178 |
use_crls = self.cfg.get_property("repository", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4179 |
"check-certificate-revocation") |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4180 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4181 |
for pub in pubs: |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4182 |
rstore = self.get_pub_rstore(pub.prefix) |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4183 |
for verify_tuple in rstore.fix(progtrack=progtrack, |
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4184 |
pub=pub, |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4185 |
verify_callback=verify_callback, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4186 |
trust_anchor_dir=trust_anchor_dir, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4187 |
sig_required_names=sig_required_names, |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4188 |
use_crls=use_crls): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4189 |
yield verify_tuple |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4190 |
|
3140
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4191 |
for verify_tuple in self.__verify_depend( |
cab0015f2c50
20124746 pkgrepo verify subcommand should pass a list publisher objects into verify
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3138
diff
changeset
|
4192 |
[pub.prefix for pub in pubs], force_dep_check, |
3138
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4193 |
progtrack, ignored_dep_files=ignored_dep_files): |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4194 |
verify_callback(progtrack, verify_tuple) |
9861eab2ccda
19376213 pkgrepo verify should be able to verify repository dependencies
Xiaobo Shen <xiaobo.shen@oracle.com>
parents:
3101
diff
changeset
|
4195 |
yield verify_tuple |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4196 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4197 |
def valid_new_fmri(self, pfmri): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4198 |
"""Check that the FMRI supplied as an argument would be valid |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4199 |
to add to the repository catalog. This checks to make sure |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4200 |
that any past catalog operations (such as a rename or freeze) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4201 |
would not prohibit the caller from adding this FMRI.""" |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4202 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4203 |
rstore = self.get_pub_rstore(pfmri.publisher) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4204 |
return rstore.valid_new_fmri(pfmri) |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1970
diff
changeset
|
4205 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4206 |
def write_config(self): |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4207 |
"""Save the repository's current configuration data.""" |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
4208 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4209 |
self.__lock_repository() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4210 |
try: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4211 |
self.__write_config() |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4212 |
finally: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1291
diff
changeset
|
4213 |
self.__unlock_repository() |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
4214 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4215 |
catalog_requests = property(lambda self: self.__catalog_requests) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4216 |
cfg = property(lambda self: self.__cfg) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4217 |
file_requests = property(lambda self: self.__file_requests) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4218 |
file_root = property(lambda self: self.__file_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4219 |
manifest_requests = property(lambda self: self.__manifest_requests) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4220 |
mirror = property(lambda self: self.__mirror, __set_mirror) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4221 |
pub_root = property(lambda self: self.__pub_root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4222 |
read_only = property(lambda self: self.__read_only, __set_read_only) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4223 |
root = property(lambda self: self.__root) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4224 |
rstores = property(lambda self: self.__rstores.values()) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4225 |
writable_root = property(lambda self: self.__writable_root) |
1191
a48bee2a4b2e
305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents:
1118
diff
changeset
|
4226 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4227 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4228 |
class RepositoryConfig(object): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4229 |
"""Returns an object representing a configuration interface for a |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4230 |
a pkg(5) repository. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4231 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4232 |
The class of the object returned will depend upon the specified |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4233 |
configuration target (which is used as to retrieve and store |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4234 |
configuration data). |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4235 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4236 |
'target' is the optional location to retrieve existing configuration |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4237 |
data or store the configuration data when requested. The location |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4238 |
can be the pathname of a file or an SMF FMRI. If a pathname is |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4239 |
provided, and does not exist, it will be created. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4240 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4241 |
'overrides' is a dictionary of property values indexed by section name |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4242 |
and property name. If provided, it will override any values read from |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4243 |
an existing file or any defaults initially assigned. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4244 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4245 |
'version' is an integer value specifying the set of configuration data |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4246 |
to use for the operation. If not provided, the version will be based |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4247 |
on the target if supported. If a version cannot be determined, the |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4248 |
newest version will be assumed. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4249 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4250 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4251 |
# This dictionary defines the set of default properties and property |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4252 |
# groups for a repository configuration indexed by version. |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4253 |
__defs = { |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4254 |
2: [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4255 |
cfg.PropertySection("publisher", [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4256 |
cfg.PropPublisher("alias"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4257 |
cfg.PropPublisher("prefix"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4258 |
]), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4259 |
cfg.PropertySection("repository", [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4260 |
cfg.PropDefined("collection_type", ["core", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4261 |
"supplemental"], default="core"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4262 |
cfg.PropDefined("description"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4263 |
cfg.PropPubURI("detailed_url"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4264 |
cfg.PropSimplePubURIList("legal_uris"), |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4265 |
cfg.PropDefined("maintainer"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4266 |
cfg.PropPubURI("maintainer_url"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4267 |
cfg.PropSimplePubURIList("mirrors"), |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4268 |
cfg.PropDefined("name", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4269 |
default="package repository"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4270 |
cfg.PropSimplePubURIList("origins"), |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4271 |
cfg.PropInt("refresh_seconds", default=14400), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4272 |
cfg.PropPubURI("registration_uri"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4273 |
cfg.PropSimplePubURIList("related_uris"), |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4274 |
]), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4275 |
cfg.PropertySection("feed", [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4276 |
cfg.PropUUID("id"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4277 |
cfg.PropDefined("name", |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4278 |
default="package repository feed"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4279 |
cfg.PropDefined("description"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4280 |
cfg.PropDefined("icon", allowed=["", "<pathname>"], |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4281 |
default="web/_themes/pkg-block-icon.png"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4282 |
cfg.PropDefined("logo", allowed=["", "<pathname>"], |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4283 |
default="web/_themes/pkg-block-logo.png"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4284 |
cfg.PropInt("window", default=24), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4285 |
]), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4286 |
], |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4287 |
3: [ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4288 |
cfg.PropertySection("publisher", [ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4289 |
cfg.PropPublisher("alias"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4290 |
cfg.PropPublisher("prefix"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4291 |
]), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4292 |
cfg.PropertySection("repository", [ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4293 |
cfg.PropDefined("collection_type", ["core", |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4294 |
"supplemental"], default="core"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4295 |
cfg.PropDefined("description"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4296 |
cfg.PropPubURI("detailed_url"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4297 |
cfg.PropSimplePubURIList("legal_uris"), |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4298 |
cfg.PropDefined("maintainer"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4299 |
cfg.PropPubURI("maintainer_url"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4300 |
cfg.PropSimplePubURIList("mirrors"), |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4301 |
cfg.PropDefined("name", |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4302 |
default="package repository"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4303 |
cfg.PropSimplePubURIList("origins"), |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4304 |
cfg.PropInt("refresh_seconds", default=14400), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4305 |
cfg.PropPubURI("registration_uri"), |
2097
068cc63b4d6e
17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents:
2073
diff
changeset
|
4306 |
cfg.PropSimplePubURIList("related_uris"), |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4307 |
]), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4308 |
cfg.PropertySection("feed", [ |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4309 |
cfg.PropUUID("id"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4310 |
cfg.PropDefined("name", |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4311 |
default="package repository feed"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4312 |
cfg.PropDefined("description"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4313 |
cfg.PropDefined("icon", allowed=["", "<pathname>"], |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4314 |
default="web/_themes/pkg-block-icon.png"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4315 |
cfg.PropDefined("logo", allowed=["", "<pathname>"], |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4316 |
default="web/_themes/pkg-block-logo.png"), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4317 |
cfg.PropInt("window", default=24), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4318 |
]), |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4319 |
], |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4320 |
4: [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4321 |
cfg.PropertySection("publisher", [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4322 |
cfg.PropPublisher("prefix"), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4323 |
]), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4324 |
cfg.PropertySection("repository", [ |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4325 |
cfg.PropInt("version"), |
2843
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4326 |
cfg.Property("trust-anchor-directory", |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4327 |
default="/etc/certs/CA/"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4328 |
cfg.PropList("signature-required-names"), |
4e1d09017f2c
15722190 pkgrepo verify subcommand needed
Tim Foster <tim.s.foster@oracle.com>
parents:
2693
diff
changeset
|
4329 |
cfg.PropBool("check-certificate-revocation", default=False) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4330 |
]), |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4331 |
], |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4332 |
} |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4333 |
|
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4334 |
def __new__(cls, target=None, overrides=misc.EmptyDict, version=None): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4335 |
if not target: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4336 |
return cfg.Config(definitions=cls.__defs, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4337 |
overrides=overrides, version=version) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4338 |
elif target.startswith("svc:"): |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4339 |
return cfg.SMFConfig(target, definitions=cls.__defs, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4340 |
overrides=overrides, version=version) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4341 |
return cfg.FileConfig(target, definitions=cls.__defs, |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4342 |
overrides=overrides, version=version) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4343 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4344 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4345 |
def repository_create(repo_uri, properties=misc.EmptyDict, version=None): |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4346 |
"""Create a repository at given location and return the Repository |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4347 |
object for the new repository. If a repository (or directory at |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4348 |
the given location) already exists, a RepositoryExistsError will be |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4349 |
raised. Other errors can raise exceptions of class ApiException. |
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4350 |
""" |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4351 |
|
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
4352 |
if isinstance(repo_uri, six.string_types): |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4353 |
repo_uri = publisher.RepositoryURI(misc.parse_uri(repo_uri)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4354 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4355 |
path = repo_uri.get_pathname() |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4356 |
if not path: |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4357 |
# Bad URI? |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4358 |
raise RepositoryInvalidError(str(repo_uri)) |
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4359 |
|
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4360 |
if version is not None and (version < 3 or |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4361 |
version > CURRENT_REPO_VERSION): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4362 |
raise RepositoryUnsupportedOperationError() |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4363 |
|
1968
c0540b1e4f7e
8722 advanced repository metadata store needed
Shawn Walker <shawn.walker@oracle.com>
parents:
1902
diff
changeset
|
4364 |
try: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4365 |
os.makedirs(path, misc.PKG_DIR_MODE) |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
4366 |
except EnvironmentError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4367 |
if e.filename == path and (e.errno == errno.EEXIST or |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4368 |
os.path.exists(e.filename)): |
2064
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4369 |
entries = os.listdir(e.filename) |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4370 |
# If the directory isn't empty (excluding the |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4371 |
# special .zfs snapshot directory) don't allow |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4372 |
# a repository to be created here. |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4373 |
if entries and not entries == [".zfs"]: |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4374 |
raise RepositoryExistsError(e.filename) |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4375 |
elif e.errno == errno.EACCES: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4376 |
raise apx.PermissionsException(e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4377 |
elif e.errno == errno.EROFS: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4378 |
raise apx.ReadOnlyFileSystemException(e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4379 |
elif e.errno != errno.EEXIST or e.filename != path: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4380 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4381 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4382 |
if version == 3: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4383 |
# Version 3 repositories are expected to contain an additional |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4384 |
# set of specific directories... |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4385 |
for d in ("catalog", "file", "index", "pkg", "trans", "tmp"): |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4386 |
misc.makedirs(os.path.join(path, d)) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4387 |
|
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4388 |
# ...and this file (which can be empty). |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4389 |
try: |
3234
3a90dc0b66c9
21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3171
diff
changeset
|
4390 |
with open(os.path.join(path, "cfg_cache"), "wb") as cf: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4391 |
cf.write("\n") |
3171
525f5bdb3f62
20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents:
3164
diff
changeset
|
4392 |
except EnvironmentError as e: |
2028
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4393 |
if e.errno == errno.EACCES: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4394 |
raise apx.PermissionsException( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4395 |
e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4396 |
if e.errno == errno.EROFS: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4397 |
raise apx.ReadOnlyFileSystemException( |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4398 |
e.filename) |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4399 |
elif e.errno != errno.EEXIST: |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4400 |
raise |
b2c674e6ee28
16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents:
2026
diff
changeset
|
4401 |
|
2064
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4402 |
return Repository(create=True, read_only=False, properties=properties, |
2aef71869aaa
16976 transport caching mechanism for file repository needs update
Shawn Walker <shawn.walker@oracle.com>
parents:
2044
diff
changeset
|
4403 |
root=path) |