forked from mirrors/pacman
Compare commits
542 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6bcdf4dc7 | ||
|
|
9f5e1dc8cd | ||
|
|
cebe36c42c | ||
|
|
301fe17f57 | ||
|
|
997a611fa4 | ||
|
|
162e77ffdc | ||
|
|
a2cbccb8c7 | ||
|
|
c850786e43 | ||
|
|
3acc265f9d | ||
|
|
03a63e01a5 | ||
|
|
024012649f | ||
|
|
93d47ebbc0 | ||
|
|
c2dc05c065 | ||
|
|
fb18679a00 | ||
|
|
792ee97645 | ||
|
|
a73ad4f0e3 | ||
|
|
b3169a5687 | ||
|
|
c31fcfd833 | ||
|
|
cb03817ee8 | ||
|
|
bd2de5cdf6 | ||
|
|
2f59996c54 | ||
|
|
f4651c49af | ||
|
|
751d37e749 | ||
|
|
08980fb4bc | ||
|
|
cc7f3b705e | ||
|
|
89b0a76b3c | ||
|
|
78cf32e194 | ||
|
|
59776ef306 | ||
|
|
b373b1d16b | ||
|
|
a1f7c83dbf | ||
|
|
6d8a6aef09 | ||
|
|
b99bebc008 | ||
|
|
a50b067470 | ||
|
|
346139298b | ||
|
|
f7192b5958 | ||
|
|
2890114600 | ||
|
|
a63aeed562 | ||
|
|
2f5d792725 | ||
|
|
1e656c0a6a | ||
|
|
50e3dc02bf | ||
|
|
d1fec15d81 | ||
|
|
d24592cbcd | ||
|
|
30851a24ff | ||
|
|
f0e1846b51 | ||
|
|
d7e502a467 | ||
|
|
927ce2b7a5 | ||
|
|
ce3d70aa99 | ||
|
|
f9be2334f7 | ||
|
|
18452a6c51 | ||
|
|
242e9e90f4 | ||
|
|
95ea6fb3c1 | ||
|
|
afac773d19 | ||
|
|
8263bd0cc2 | ||
|
|
d6f62ba22d | ||
|
|
24d7c6a372 | ||
|
|
ece3d3606a | ||
|
|
81853893a5 | ||
|
|
eeb3c6868c | ||
|
|
cfc52dad98 | ||
|
|
49c58ce9db | ||
|
|
08b0fb856d | ||
|
|
6f38cedd8d | ||
|
|
68e59ecbaf | ||
|
|
91eeee08de | ||
|
|
05d23059fd | ||
|
|
f56d763547 | ||
|
|
8f99f75e6e | ||
|
|
4b4ad18348 | ||
|
|
b0b5dabf1b | ||
|
|
31c7e82a51 | ||
|
|
5b51dbb11e | ||
|
|
e760c4f478 | ||
|
|
081f64aea3 | ||
|
|
0969c2e700 | ||
|
|
56f0cf9d15 | ||
|
|
96e023c7bd | ||
|
|
e27a8c9ae3 | ||
|
|
9451b2e4f2 | ||
|
|
901e4aa5c2 | ||
|
|
282eeadc68 | ||
|
|
9609c0f135 | ||
|
|
6417ac129d | ||
|
|
729651a554 | ||
|
|
232b838a54 | ||
|
|
fb5c5086e1 | ||
|
|
a28b8e187f | ||
|
|
89c2c51964 | ||
|
|
a23fc08758 | ||
|
|
57bd8974c7 | ||
|
|
d8f8a12665 | ||
|
|
57393eb730 | ||
|
|
f201f107db | ||
|
|
72c5a298a3 | ||
|
|
4476598e4e | ||
|
|
9bc799ec7b | ||
|
|
692ea72822 | ||
|
|
fabf7ad6c4 | ||
|
|
8485b7b3a4 | ||
|
|
115dcf0911 | ||
|
|
5949936777 | ||
|
|
a7244e6ab2 | ||
|
|
5d6788b36e | ||
|
|
6ede1a5af0 | ||
|
|
0e0a846135 | ||
|
|
428b2fd8cc | ||
|
|
9a6fd1b021 | ||
|
|
e4b1a97ff2 | ||
|
|
85f5279ec0 | ||
|
|
20a0b8e201 | ||
|
|
3bf9448943 | ||
|
|
cf25884e99 | ||
|
|
9f57921467 | ||
|
|
7bc34ccde3 | ||
|
|
b8e306b73e | ||
|
|
8877c88def | ||
|
|
dfae7bdd52 | ||
|
|
e6fb229534 | ||
|
|
5078ca580e | ||
|
|
310b13a4b7 | ||
|
|
c317222d71 | ||
|
|
67f388c3fc | ||
|
|
5e4882dfe8 | ||
|
|
075b244be2 | ||
|
|
69f00385a9 | ||
|
|
06a4a5bd68 | ||
|
|
22722261cc | ||
|
|
24783e6b6b | ||
|
|
c9550e9655 | ||
|
|
a7ee8f90f9 | ||
|
|
12e804511a | ||
|
|
6d4f235af9 | ||
|
|
441c2dd550 | ||
|
|
27f56304d6 | ||
|
|
501ce943e6 | ||
|
|
b169925c1e | ||
|
|
c1a648137e | ||
|
|
4ebad47ae7 | ||
|
|
ad697d2fd5 | ||
|
|
991dfca90e | ||
|
|
ae9e33ed88 | ||
|
|
b4f2cb53ef | ||
|
|
2b73d45127 | ||
|
|
a8405847e6 | ||
|
|
99be5ab8d1 | ||
|
|
471ed04790 | ||
|
|
5929508198 | ||
|
|
03021713e5 | ||
|
|
ffa3056010 | ||
|
|
37b5972212 | ||
|
|
17e9c9d9ff | ||
|
|
0bf66b097f | ||
|
|
95995ae93f | ||
|
|
8741908276 | ||
|
|
fd8969f678 | ||
|
|
f724fb2702 | ||
|
|
1d9d47d62c | ||
|
|
b196cc43a5 | ||
|
|
d92b0e674d | ||
|
|
30702350fa | ||
|
|
72c0ab5c51 | ||
|
|
8856146d71 | ||
|
|
616b5967b8 | ||
|
|
f7199f36ba | ||
|
|
2122eb1428 | ||
|
|
5f701005ed | ||
|
|
11695bd0d7 | ||
|
|
d534488f2d | ||
|
|
b15fb504a1 | ||
|
|
74eb2f5c61 | ||
|
|
7edb2e5b0d | ||
|
|
d594b6e797 | ||
|
|
5c6809987e | ||
|
|
deec3c8d00 | ||
|
|
d88524ea0e | ||
|
|
29bf6814f7 | ||
|
|
7ff5a917fd | ||
|
|
b9445c12cf | ||
|
|
b8a66d6859 | ||
|
|
2158b8e298 | ||
|
|
fff746052c | ||
|
|
a1dfa8e61f | ||
|
|
89819b3f92 | ||
|
|
c11bdf19b1 | ||
|
|
7313c8546a | ||
|
|
331891ceb1 | ||
|
|
6d737254fc | ||
|
|
0077bfa3a0 | ||
|
|
7fc306cd41 | ||
|
|
1824bc6ee6 | ||
|
|
f827c9572e | ||
|
|
4979157cba | ||
|
|
0fc538fcdb | ||
|
|
512282ca54 | ||
|
|
fcac23763b | ||
|
|
b04d6e751a | ||
|
|
5ae02e6ae7 | ||
|
|
d030d12542 | ||
|
|
0966c33a72 | ||
|
|
fe781e4ce4 | ||
|
|
0669c9bfac | ||
|
|
62b4195c76 | ||
|
|
4a802838cb | ||
|
|
5f0692def8 | ||
|
|
636610432a | ||
|
|
54e1e3e642 | ||
|
|
2cd0a87b3f | ||
|
|
b48f703aa6 | ||
|
|
009f89c4d2 | ||
|
|
b32aa81b5e | ||
|
|
62ee1bfff0 | ||
|
|
1cca4ef764 | ||
|
|
b262ddb2ed | ||
|
|
f30dab4b5a | ||
|
|
c1a5616c26 | ||
|
|
da1c11cc30 | ||
|
|
ad54b28680 | ||
|
|
ae40d1c05b | ||
|
|
9577c07d86 | ||
|
|
c33cabd675 | ||
|
|
20ae871940 | ||
|
|
b9369a747d | ||
|
|
149839c539 | ||
|
|
1d71079c5b | ||
|
|
398d4aff2d | ||
|
|
bf2964dc58 | ||
|
|
fb09d35e6a | ||
|
|
33e3182dbd | ||
|
|
a8ee185413 | ||
|
|
8428367285 | ||
|
|
dd98aa8564 | ||
|
|
a422f6e39c | ||
|
|
f671147282 | ||
|
|
ae5ef3b90f | ||
|
|
584ffa6aef | ||
|
|
d5278ebb3b | ||
|
|
f43805d875 | ||
|
|
8248b4bfb1 | ||
|
|
e80232f24c | ||
|
|
663408532a | ||
|
|
13f24a5bda | ||
|
|
0460038447 | ||
|
|
3c3cb001a4 | ||
|
|
3175faace4 | ||
|
|
e3d35b3274 | ||
|
|
0bfc8adf37 | ||
|
|
1ba0d84da2 | ||
|
|
b49fc504ac | ||
|
|
2edd01a973 | ||
|
|
502645c0e3 | ||
|
|
df5024fd64 | ||
|
|
081ba4816e | ||
|
|
7fccfc7819 | ||
|
|
a13bf74979 | ||
|
|
5389cdf654 | ||
|
|
6b31183576 | ||
|
|
8f902865d9 | ||
|
|
010279e449 | ||
|
|
4e6361642e | ||
|
|
1201c8ce3a | ||
|
|
245efca759 | ||
|
|
27943a04d6 | ||
|
|
6d79ba2db0 | ||
|
|
481c3edc89 | ||
|
|
8fdf08ef78 | ||
|
|
670fadf041 | ||
|
|
701a03dcdb | ||
|
|
30bdf94c2b | ||
|
|
ff9744aa1f | ||
|
|
1b5a851851 | ||
|
|
423820b34c | ||
|
|
7a873a8f12 | ||
|
|
64e1dd64a4 | ||
|
|
c465d9e848 | ||
|
|
5e375aa9d3 | ||
|
|
bf84c23266 | ||
|
|
0d8affeac0 | ||
|
|
c7a81c0b54 | ||
|
|
d685d0220f | ||
|
|
ba70c52945 | ||
|
|
2d991a25ae | ||
|
|
db4258c1fd | ||
|
|
9f56137034 | ||
|
|
ee2bbb39b5 | ||
|
|
4bd0a85095 | ||
|
|
e9a0d35d08 | ||
|
|
4b7f7e2a59 | ||
|
|
57acfced0d | ||
|
|
83c4b2aebb | ||
|
|
bec2ba5b40 | ||
|
|
9441fba124 | ||
|
|
a708c6eadc | ||
|
|
9c7ebe6872 | ||
|
|
4c872594da | ||
|
|
e4a4cf7ce5 | ||
|
|
4004bf9caf | ||
|
|
404e0a0e10 | ||
|
|
b3f4bd9750 | ||
|
|
073bac794d | ||
|
|
0b8abf376f | ||
|
|
ab9187d07d | ||
|
|
0bd6fb3bc2 | ||
|
|
5f17ac8150 | ||
|
|
4b8ada818e | ||
|
|
0d1263af26 | ||
|
|
41c1295559 | ||
|
|
d9b9e60d7d | ||
|
|
3fe43ffa04 | ||
|
|
562442633a | ||
|
|
d140b440a8 | ||
|
|
f8c737d3b6 | ||
|
|
1dfd841e40 | ||
|
|
5f1ccdbc27 | ||
|
|
d1ea16dfd0 | ||
|
|
6104f2e1fb | ||
|
|
1086950c82 | ||
|
|
7995a25d0e | ||
|
|
bf86700369 | ||
|
|
90a48c771d | ||
|
|
f7f43dbb48 | ||
|
|
3d10d460df | ||
|
|
5af076f09f | ||
|
|
2f8fb80ee6 | ||
|
|
7d451b6e6b | ||
|
|
d07001f3ab | ||
|
|
e7a2232934 | ||
|
|
73ab153c44 | ||
|
|
b3e6cf652c | ||
|
|
dae3f9deef | ||
|
|
1f30845e41 | ||
|
|
35135c0a0c | ||
|
|
6e4b020654 | ||
|
|
6820be9ba1 | ||
|
|
804ab37ea6 | ||
|
|
d060e31be3 | ||
|
|
f56f7ff391 | ||
|
|
91b7f288fe | ||
|
|
fc48dc3118 | ||
|
|
51e0303e84 | ||
|
|
2f9f48eddd | ||
|
|
1dfcf1495b | ||
|
|
724ed34ac5 | ||
|
|
74c5bd70cf | ||
|
|
797c190f93 | ||
|
|
3ec45486ff | ||
|
|
266f06866b | ||
|
|
69eb0c8014 | ||
|
|
5a48771126 | ||
|
|
54af52f87d | ||
|
|
7c3f6feb41 | ||
|
|
6ad4ba272d | ||
|
|
4a0498bd29 | ||
|
|
190d17c0e8 | ||
|
|
8725dce294 | ||
|
|
1bbc00cd9d | ||
|
|
8a24ad3754 | ||
|
|
816b080579 | ||
|
|
4c465ef0ad | ||
|
|
49197b7492 | ||
|
|
11bdab171e | ||
|
|
17eca54b32 | ||
|
|
73ac9f7b27 | ||
|
|
aecc2fd190 | ||
|
|
7613f2e21a | ||
|
|
d734ebdde2 | ||
|
|
c2dbbd60bc | ||
|
|
4fe7eb66eb | ||
|
|
79945ef7ff | ||
|
|
d49f42ba75 | ||
|
|
d75f693155 | ||
|
|
8efe0ecb25 | ||
|
|
7a9d444de8 | ||
|
|
66591e8284 | ||
|
|
7eaad2f2a9 | ||
|
|
c23ecc6160 | ||
|
|
f159203f6f | ||
|
|
81a2a06818 | ||
|
|
3e8ae774bd | ||
|
|
143135e666 | ||
|
|
ca1a187131 | ||
|
|
8cfccf68c1 | ||
|
|
d5857ee15b | ||
|
|
271ecb8bfc | ||
|
|
3ad3077d8d | ||
|
|
96f7613d15 | ||
|
|
3a6f62d4c7 | ||
|
|
105e01c8ef | ||
|
|
4c14dcc580 | ||
|
|
a6470956bc | ||
|
|
29f55fb7c9 | ||
|
|
731a774319 | ||
|
|
8ded60326a | ||
|
|
a3e6a6b822 | ||
|
|
4bd52f3fe4 | ||
|
|
420c8846b9 | ||
|
|
7879e4bef7 | ||
|
|
6f3949e3da | ||
|
|
2b3a85dc4a | ||
|
|
fc9d12bef0 | ||
|
|
5676dbae4d | ||
|
|
81db1847c9 | ||
|
|
848edb2f38 | ||
|
|
b091ccc400 | ||
|
|
4ac9b2eb06 | ||
|
|
3559306546 | ||
|
|
2374c81e55 | ||
|
|
42f5579fd7 | ||
|
|
3078494767 | ||
|
|
273950473e | ||
|
|
92ab7c33fb | ||
|
|
6b07b5d345 | ||
|
|
a16608c610 | ||
|
|
be95e4d8a0 | ||
|
|
fe4e07bd2f | ||
|
|
59a6b519da | ||
|
|
2b0c89b06a | ||
|
|
0f74ae0885 | ||
|
|
b206aaee88 | ||
|
|
141e569840 | ||
|
|
706c690b64 | ||
|
|
ccc57de6b6 | ||
|
|
279fbc44b1 | ||
|
|
69188d75fb | ||
|
|
e8d665fbf7 | ||
|
|
f4ac63ab43 | ||
|
|
8068a14c52 | ||
|
|
9bf487b2ff | ||
|
|
fbf3beb8d2 | ||
|
|
7586072beb | ||
|
|
17180890a5 | ||
|
|
bfc024eab3 | ||
|
|
77c3cf9790 | ||
|
|
7dc37109b0 | ||
|
|
14ee1be1ef | ||
|
|
11fe18479e | ||
|
|
0c2206f542 | ||
|
|
05d5634958 | ||
|
|
e63366ae5e | ||
|
|
e81dec9b8c | ||
|
|
eca30ed66a | ||
|
|
b29838c825 | ||
|
|
7d7a337912 | ||
|
|
93a3050ed9 | ||
|
|
a7a9f37561 | ||
|
|
7069b96173 | ||
|
|
69bc5ea5e2 | ||
|
|
96ee1bca24 | ||
|
|
37bb99abfa | ||
|
|
5d03a6fd94 | ||
|
|
4fad7855fa | ||
|
|
7786bf6024 | ||
|
|
c492ca840c | ||
|
|
7cfb343b0f | ||
|
|
b1103a3eaf | ||
|
|
5647f7f512 | ||
|
|
c028014f96 | ||
|
|
1fc83f4af6 | ||
|
|
9fbb77c91b | ||
|
|
9bfbd73917 | ||
|
|
ea828b5693 | ||
|
|
f432ce41e0 | ||
|
|
0775c38e72 | ||
|
|
f950c26307 | ||
|
|
11692e0eef | ||
|
|
88cbee3c24 | ||
|
|
69c6d59bb6 | ||
|
|
8240da6cb3 | ||
|
|
bd43a7f155 | ||
|
|
22c900e7d5 | ||
|
|
6b8f404a33 | ||
|
|
8ca6501ee1 | ||
|
|
9247ddbe8a | ||
|
|
36264a3ab9 | ||
|
|
cbcf542ad2 | ||
|
|
2a7101c049 | ||
|
|
b2914bf0af | ||
|
|
927af790ee | ||
|
|
bba62655fe | ||
|
|
73ee64d49f | ||
|
|
ba7687f58e | ||
|
|
003adb7646 | ||
|
|
3b464dc897 | ||
|
|
cee314fc5e | ||
|
|
f6785dcb89 | ||
|
|
8ec9a67aee | ||
|
|
57ec111a4e | ||
|
|
f374ead66a | ||
|
|
84084aa44c | ||
|
|
8343121f87 | ||
|
|
6f181c22d2 | ||
|
|
de5e49f4be | ||
|
|
601f6a8a29 | ||
|
|
d9a9ffd77d | ||
|
|
06dd617b59 | ||
|
|
1379f4e9ac | ||
|
|
12417e91ad | ||
|
|
eb77f0dbd2 | ||
|
|
6b242b3725 | ||
|
|
eccda0dfad | ||
|
|
db557e0563 | ||
|
|
38e981fab3 | ||
|
|
a0ac72b422 | ||
|
|
9a18e0dbef | ||
|
|
0c5b68877b | ||
|
|
6eee9e987a | ||
|
|
1dca8b6309 | ||
|
|
223a0ce89d | ||
|
|
307f4d7301 | ||
|
|
fd86c62db8 | ||
|
|
ffff094126 | ||
|
|
6ee95afe7e | ||
|
|
e93b0a2f37 | ||
|
|
916e226b78 | ||
|
|
801a268056 | ||
|
|
549c2878f9 | ||
|
|
8186dc11a9 | ||
|
|
521de7ceed | ||
|
|
bbe02ec57f | ||
|
|
47e8dd0670 | ||
|
|
78e7342c16 | ||
|
|
ab506f77c0 | ||
|
|
3de2147376 | ||
|
|
4f26701793 | ||
|
|
435ec29bc7 | ||
|
|
633dbeac88 | ||
|
|
e654236db6 | ||
|
|
26f4993e1d | ||
|
|
2630556bde | ||
|
|
112caad838 | ||
|
|
3e133524a5 | ||
|
|
8ffa6fa7ad | ||
|
|
8372a9e8c7 | ||
|
|
318d5c4ba8 | ||
|
|
f9a7d8cba4 | ||
|
|
ccc1c73152 | ||
|
|
0a65de10b1 | ||
|
|
887ad59eb6 | ||
|
|
71ca587f2a | ||
|
|
aec7c13648 | ||
|
|
abd14fdac0 | ||
|
|
b1a231427b | ||
|
|
47761d5aec | ||
|
|
33f6fda8b6 |
16
ChangeLog.proto
Normal file
16
ChangeLog.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
2007-12-01 Your Name <youremail@domain.com>
|
||||
|
||||
* pkgver-pkgrel :
|
||||
new upstream release.
|
||||
Reason we changed stuff.
|
||||
Another reason we changed stuff.
|
||||
|
||||
* gcc-4.1.patch :
|
||||
Removed, no longer needed.
|
||||
|
||||
2007-11-01 Your Name <youremail@domain.com>
|
||||
|
||||
* 1.0-5 :
|
||||
added ChangeLog.
|
||||
the last line should end with just one newline.
|
||||
you can cat the file to check it displays fine.
|
||||
36
HACKING
36
HACKING
@@ -12,10 +12,10 @@ Coding style
|
||||
1. All code should be indented with tabs. (Ignore the use of only spaces in
|
||||
this file) By default, source files contain the following VIM modeline:
|
||||
+
|
||||
[C]
|
||||
code~~~~~~~~~~
|
||||
[code,C]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
code~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
2. When opening new blocks such as 'while', 'if', or 'for', leave the opening
|
||||
brace on the same line as the beginning of the codeblock. The closing brace
|
||||
@@ -24,8 +24,8 @@ code~~~~~~~~~~
|
||||
braces, even if it's just a one-line block. This reduces future error when
|
||||
blocks are expanded beyond one line.
|
||||
+
|
||||
[C]
|
||||
code~~~~~~~~~~
|
||||
[code,C]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
for(lp = list; lp; lp = lp->next) {
|
||||
newlist = _alpm_list_add(newlist, strdup(lp->data));
|
||||
}
|
||||
@@ -40,14 +40,14 @@ while(it) {
|
||||
free(it);
|
||||
it = ptr;
|
||||
}
|
||||
code~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
3. When declaring a new function, put the opening and closing braces on their
|
||||
own line. Also, when declaring a pointer, do not put a space between the
|
||||
asterisk and the variable name.
|
||||
+
|
||||
[C]
|
||||
code~~~~~~~~~~
|
||||
[code,C]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data)
|
||||
{
|
||||
alpm_list_t *ptr, *lp;
|
||||
@@ -58,7 +58,7 @@ alpm_list_t *alpm_list_add(alpm_list_t *list, void *data)
|
||||
}
|
||||
...
|
||||
}
|
||||
code~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
4. Comments should be ANSI-C89 compliant. That means no `// Comment` style;
|
||||
use only `/* Comment */` style.
|
||||
@@ -101,37 +101,37 @@ Currently our #include usage is in messy shape, but this is no reason to
|
||||
continue down this messy path. When adding an include to a file, follow this
|
||||
general pattern, including blank lines:
|
||||
|
||||
[C]
|
||||
code~~~~~~~~~~
|
||||
[code,C]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#include "config.h"
|
||||
|
||||
#include <standardheader.h>
|
||||
#include <another.h>
|
||||
#include <...>
|
||||
code~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Follow this with some more headers, depending on whether the file is in libalpm
|
||||
or pacman proper. For libalpm:
|
||||
|
||||
[C]
|
||||
code~~~~~~~~~~
|
||||
[code,C]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
/* libalpm */
|
||||
#include "yourfile.h"
|
||||
#include "alpm_list.h"
|
||||
#include "anythingelse.h"
|
||||
code~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For pacman:
|
||||
|
||||
[C]
|
||||
code~~~~~~~~~~
|
||||
[code,C]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#include <alpm.h>
|
||||
#include <alpm_list.h>
|
||||
|
||||
/* pacman */
|
||||
#include "yourfile.h"
|
||||
#include "anythingelse.h"
|
||||
code~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
/////
|
||||
vim: set ts=2 sw=2 syntax=asciidoc et:
|
||||
|
||||
11
Makefile.am
11
Makefile.am
@@ -3,20 +3,25 @@ if WANT_DOC
|
||||
SUBDIRS += doc
|
||||
endif
|
||||
|
||||
# Make sure we test and build manpages when doing distcheck
|
||||
DISTCHECK_CONFIGURE_FLAGS = --enable-doc --disable-git-version
|
||||
|
||||
# Some files automatically included, so they aren't specified below:
|
||||
# AUTHORS, COPYING, NEWS, README
|
||||
EXTRA_DIST = HACKING
|
||||
|
||||
# Sample makepkg prototype files
|
||||
pkgdatadir = ${datadir}/${PACKAGE}
|
||||
dist_pkgdata_DATA = PKGBUILD.proto proto.install
|
||||
dist_pkgdata_DATA = PKGBUILD.proto proto.install ChangeLog.proto
|
||||
|
||||
# run the pactest test suite
|
||||
check-local: src/pacman
|
||||
# run the pactest test suite and vercmp tests
|
||||
check-local: pactest src/pacman src/util
|
||||
$(PYTHON) $(top_srcdir)/pactest/pactest.py --debug=1 \
|
||||
--test $(top_srcdir)/pactest/tests/*.py \
|
||||
-p $(top_builddir)/src/pacman/pacman
|
||||
rm -rf $(top_builddir)/root
|
||||
$(SH) $(top_srcdir)/pactest/vercmptest.sh \
|
||||
$(top_builddir)/src/util/vercmp
|
||||
|
||||
# create the pacman DB and cache directories upon install
|
||||
install-data-local:
|
||||
|
||||
150
NEWS
150
NEWS
@@ -1,5 +1,151 @@
|
||||
VERSION DESCRIPTION
|
||||
-----------------------------------------------------------------------------
|
||||
3.2.2 - log pacsave warnings to pacman.log (FS#12531)
|
||||
- separate local DB creation and writing (FS#12263)
|
||||
- pacman-optimize: rewrite and refresh (FS#11767)
|
||||
- repo-add: use openssl instead of md5sum
|
||||
- simplify doc building process for ease of development
|
||||
- ensure correct handling of syscall interruptions
|
||||
- readd missing newline on -Qi/-Si output (FS#11331)
|
||||
- fix TotalDownload regression (FS#11339)
|
||||
- makepkg:
|
||||
- replace getopt with an internal function
|
||||
- detect incorrect usage of provides (FS#12540)
|
||||
- fix bash substitution to work in older versions
|
||||
- fix updating PKGBUILD and simplify logic for SCM packages
|
||||
- save/restore shell options before/after build() (FS#12344)
|
||||
- documentation updates and asciidoc build fix
|
||||
- existing translation updates
|
||||
3.2.1 - drop special handling of file:// URLs
|
||||
- display optdepends on install and upgrade
|
||||
- fix segfault on x86_64 when using UseSyslog (FS#11096)
|
||||
- fix detection of TotalDownload (FS#11180)
|
||||
- fix "No such file" error during --force installs (FS#11218)
|
||||
- better handling of progressbar when behind a proxy (FS#8725)
|
||||
- repo-add: fix whitespace handling (FS#9171, FS#10630)
|
||||
- repo-add: add optdepends to the sync DB (FS#10630)
|
||||
- makepkg:
|
||||
- allow specifying a download filename (related to FS#11292)
|
||||
- fix download functions with weird URLs (FS#11076)
|
||||
- fix creation of source package with local files (FS#11149)
|
||||
- fix error when sourcing profile scripts (FS#11179)
|
||||
- perform case-insensitive checksum comparison (FS#11283)
|
||||
- documentation and help updates (including fix for FS#11203)
|
||||
- new Ukrainian translation
|
||||
- existing translation updates
|
||||
3.2.0 - removed -A/--add option from pacman frontend
|
||||
- added --asexplicit option
|
||||
- new remove option --unneeded
|
||||
- add -Rss option to remove all dependencies
|
||||
- removed useless -e/--dependsonly option
|
||||
- config options are now case sensitive
|
||||
- added CleanMethod option for variety in cache cleaning
|
||||
- new Turkish translation, all others updated and revised
|
||||
- handle multiple groups in -Ss and -Qs operations
|
||||
- allow -q/--quiet option with -o/--own and -g/--groups options
|
||||
- removed hack for packages with unknown installed size
|
||||
- add SyncFirst option to pacman.conf
|
||||
- support installation of versioned deps : pacman -S "dep>=2.0"
|
||||
- add --enable-git-version configure flag to identify
|
||||
developmental build version
|
||||
- do not duplicate packages in required by list
|
||||
- pacman.static is no longer built
|
||||
- all error messages use pm_fprintf
|
||||
- disable geteuid in cygwin
|
||||
- use off_t type for large file support
|
||||
- add vercmp test script
|
||||
- moved gensync and updatesync to contrib/
|
||||
- rewrote pacsearch script in perl
|
||||
- paclist script to list installed packages from a repo
|
||||
- bacman script to make backup of package from filesystem
|
||||
- combined repo-add and repo-remove into one script
|
||||
- removed --force option from repo-add
|
||||
- add --quiet option to repo-add/repo-remove
|
||||
- update libtool version to 1.5.26
|
||||
- allow disabling of internal download with new configure
|
||||
flag --disable-internal-download
|
||||
- pactest can now check file permissions
|
||||
- add the possibility to mark the pactests known to fail,
|
||||
which allows more informative results of make check
|
||||
- libalpm-specific changes:
|
||||
- use dynamic string allocation in package structure
|
||||
- new functions for manipulating pmdepend_t objects
|
||||
- store replaces and force in local database
|
||||
- moved deptest functionality to backend
|
||||
- add alpm_checkdbconflicts function
|
||||
- fix PM_ERR_CONFLICTING_DEPS handling
|
||||
- cleanup of pmsyncpkg_t
|
||||
- add alpm_sync_newversion function
|
||||
- cleanup of alpm_list code
|
||||
- refactor of download code
|
||||
- download callback API changes
|
||||
- removed test_delta_md5sum and test_pkg_md5sum functions
|
||||
- add _alpm_archive_fgets function to read line-by-line from
|
||||
an archive
|
||||
- read .PKGINFO directly from package file with no temp file
|
||||
- native support for both libdownload and libfetch
|
||||
- rework delta algorithm (we still need script updates)
|
||||
- swap parameters of alpm_pkg_find for consistency with
|
||||
other find functions
|
||||
- swap parameters of PM_TRANS_CONV_INSTALL_IGNOREPKG to make
|
||||
more sense
|
||||
- fix -Rs when removing multiple items in dependency chain
|
||||
- makepkg-specific changes:
|
||||
- support for resuming source downloads
|
||||
- added zipman option
|
||||
- removed -b/--builddeps
|
||||
- various portability fixes for BSD and Mac OS X
|
||||
- check for valid options in PKGBUILD
|
||||
- add --allsource option
|
||||
- remove deprecated --usesudo option
|
||||
- handle spaces in build directory
|
||||
- made keeping docs the default option
|
||||
- use pacman version dep resolving
|
||||
- fix regression in library stripping
|
||||
- make strip paths configurable
|
||||
- MANY other bug fixes and small improvements
|
||||
3.1.4 - various small code cleanups and fixes
|
||||
- small documentation updates
|
||||
- improvements to PKGBUILD.vim
|
||||
- translation updates - ru, zh_CN
|
||||
3.1.3 - major updates to i18n output in frontend (all UTF-8 characters
|
||||
should now work with varying byte and char widths)
|
||||
- new Simplified Chinese translation
|
||||
- updates to testpkg utility
|
||||
- updates to PKGBUILD.vim
|
||||
- internal updates for translations - use c-format on all
|
||||
strings, get rid of needless line numbers
|
||||
3.1.2 - updates to proto.install, add ChangeLog.proto (FS#7231)
|
||||
- add 'force' option to packages, and have repo-add respect it
|
||||
- mark gensync and updatesync as deprecated
|
||||
- fix pacman -Qo behavior on symlinks (FS#9473)
|
||||
- fix segfault on a broken symlinks in backup code (FS#9235)
|
||||
- ensure filename is determined correctly for a pkg (FS#9547)
|
||||
- fix conflict progress bar with UTF-8 chars (FS#6437)
|
||||
- fix chk_fileconflicts brokenness, ensure it reads entire list
|
||||
- ensure -Sc operation locks DB, only checks DBs (FS#9609)
|
||||
- minor documentation and message updates
|
||||
- moved some translations to their more generic lang codes
|
||||
- allow scripts to be run without gettext installed
|
||||
- makepkg:
|
||||
- check to ensure we have non-URL sources (FS#9208)
|
||||
- ensure we strip binaries in /opt/ dirs (FS#9342)
|
||||
- check for VCS executable before using (FS#9230)
|
||||
- set sane umask before source extraction (FS#9242, FS#9362)
|
||||
3.1.1 - fix versioned provisions handling- use '=' instead of ' ' which
|
||||
differs from original spec but better in long run (FS#9171)
|
||||
- rename query --orphans to --unrequired (FS#9144)
|
||||
- fix segfault when cachedir is unusable (FS#9186)
|
||||
- missing SYMEXPORT on libalpm functions (FS#9155)
|
||||
- notify of package replacements when using --noconfirm (FS#5179)
|
||||
- fix usage of PKGEXT by gensync/updatesync (FS#9190)
|
||||
- ensure correct dir permissions in database (FS#9176)
|
||||
- ensure /tmp is created with correct permissions (FS#9183)
|
||||
- disallow NULL section in parseconfig (reported on forums)
|
||||
- remove Arch-specific pacman.conf and mirrorlist from source
|
||||
- makepkg: --holdver option for devel PKGBUILDs (FS#9194)
|
||||
- documentation updates (FS# 9142, 9146, 9175, 9192, 9204)
|
||||
- many translation updates
|
||||
3.1.0 - paths are now specified as absolute paths (or defaulting to
|
||||
under the specified root directory)
|
||||
- all paths can be specified in pacman.conf or on command line
|
||||
@@ -437,7 +583,7 @@ VERSION DESCRIPTION
|
||||
2.2 - More bugfixes
|
||||
- Added --downloadonly switch to --sync
|
||||
2.1 - Lots of bugfixes
|
||||
- Added support for multiple respositories
|
||||
- Added support for multiple repositories
|
||||
- Improved the config file layout
|
||||
- Improved dependency resolution and sorting
|
||||
2.0 - Added dependency functionality
|
||||
@@ -465,4 +611,4 @@ VERSION DESCRIPTION
|
||||
- Changed db_find_conflicts() to ignore directories
|
||||
1.0 - Initial Release
|
||||
|
||||
vim: set et:
|
||||
vim: set et spell spelllang=en_us:
|
||||
|
||||
@@ -14,6 +14,7 @@ license=('GPL')
|
||||
groups=()
|
||||
depends=()
|
||||
makedepends=()
|
||||
optdepends=()
|
||||
provides=()
|
||||
conflicts=()
|
||||
replaces=()
|
||||
@@ -29,7 +30,7 @@ build() {
|
||||
|
||||
./configure --prefix=/usr
|
||||
make || return 1
|
||||
make DESTDIR="$pkgdir" install
|
||||
make DESTDIR="$pkgdir/" install
|
||||
}
|
||||
|
||||
# vim:set ts=2 sw=2 et:
|
||||
|
||||
165
README
165
README
@@ -2,7 +2,7 @@ ALPM library overview & internals
|
||||
=================================
|
||||
|
||||
Here is a list of the main objects and files from the ALPM (i.e. Arch Linux
|
||||
Package Management) library. This document, whilst not exhaustive, also
|
||||
Package Management) library. This document, while not exhaustive, also
|
||||
indicates some limitations (on purpose, or sometimes due to its poor design) of
|
||||
the library at the present time.
|
||||
|
||||
@@ -13,9 +13,8 @@ the frontend. Lots of structures are of an opaque type and their fields are
|
||||
only accessible in read-only mode, through some clearly defined functions.
|
||||
|
||||
In addition to "alpm.h", the interfaces of "alpm_list.h" have also been made
|
||||
available to the frontend. It is not a requirement for the frontend to use
|
||||
these list functions; however, it prevents frontends from having to reimplement
|
||||
a list data structure.
|
||||
available to the frontend, for allowing it to manipulate the lists returned by
|
||||
the backend.
|
||||
|
||||
Several structures and functions have been renamed compared to pacman 2.9 code.
|
||||
This was done at first for the sake of naming scheme consistency, and then
|
||||
@@ -25,7 +24,7 @@ same name declared in both spaces. To avoid such conflicts, internal function
|
||||
names have been prepended with "_alpm_".
|
||||
|
||||
In a general manner, public library functions are named "alpm_<type>_<action>"
|
||||
(examples: alpm_trans_commit(), alpm_release(), alpm_pkg_getinfo(), ...).
|
||||
(examples: alpm_trans_commit(), alpm_release(), alpm_pkg_get_name(), ...).
|
||||
Internal (and thus private) functions should be named "_alpm_XXX" for instance
|
||||
(examples: _alpm_needbackup(), _alpm_runscriplet(), ...). Functions defined and
|
||||
used inside a single file should be defined as "static".
|
||||
@@ -33,59 +32,63 @@ used inside a single file should be defined as "static".
|
||||
|
||||
[Initialization]
|
||||
|
||||
alpm_init() is used to initialize library internals and to create
|
||||
alpm_initialize() is used to initialize library internals and to create
|
||||
a transparent handle object. Before its call, the library can't be used.
|
||||
|
||||
alpm_lib_release() just does the opposite (memory used by the library, and the
|
||||
handle is freed). After its call, the library is no longer available.
|
||||
alpm_release() just does the opposite (memory used by the library, and the
|
||||
handle is freed). After its call, the library is no longer available.
|
||||
|
||||
|
||||
[Options]
|
||||
|
||||
In the future, the library will not use any configuration file. It will be up
|
||||
to the front end to The handle holds a
|
||||
number of configuration options instead (IGNOREPKG, SYSLOG usage,
|
||||
log file name, registered databases, ...).
|
||||
The library does not use any configuration file. It is up to the front end to
|
||||
configure the library as needed; the handle holds a number of configuration
|
||||
options instead.
|
||||
|
||||
All of the following options have a alpm_option_get_* and alpm_option_set_*
|
||||
function for getting and setting the value. The cannot be set before the
|
||||
function for getting and setting the value. They cannot be set before the
|
||||
library is initialized.
|
||||
|
||||
* logcb: The callback function for "log" operations.
|
||||
* dlcb: The callback function for download progress.
|
||||
* logmask: The logging mask for which level of output is sent to the logcb.
|
||||
* root: The root directory on which pacman operates (Default: /)
|
||||
* dbpath: The base path to pacman's databases (Default: var/lib/pacman)
|
||||
* cachedir: The base path to pacman's download cache (Default: var/cache/pacman)
|
||||
* logfile: The base path to pacman's log file (Default: var/log/pacman.log)
|
||||
* dlcb: The callback function for download progress of each package.
|
||||
* totaldlcb: The callback function for overall download progress.
|
||||
* root: The root directory for pacman to install to (Default: /)
|
||||
* dbpath: The toplevel database directory (Default: /var/lib/pacman)
|
||||
* logfile: The base path to pacman's log file (Default: /var/log/pacman.log)
|
||||
* usesyslog: Log to syslog instead of `logfile` for file-base logging.
|
||||
* xfercommand: The command to use for downloading instead of pacman's internal
|
||||
downloading functionality.
|
||||
downloading functionality.
|
||||
* nopassiveftp: Do not use passive FTP commands for ftp connections.
|
||||
* chomp: No way, easter eggs are secret!
|
||||
* usecolor: Unimplemented, but for the future. You can assume what it means.
|
||||
|
||||
The following options also have a `alpm_option_add_*` function, as the values
|
||||
are list structures (NOTE: The add functions are NOT plural, as they're in
|
||||
english: alpm_option_get_noupgrades -> alpm_option_add_noupgrade).
|
||||
The following options also have `alpm_option_{add,remove}_*` functions, as the
|
||||
values are list structures.
|
||||
NOTE: The add and remove functions are NOT plural, as they are in English:
|
||||
alpm_option_{get,set}_noupgrades -> alpm_option_{add,remove}_noupgrade.
|
||||
|
||||
* cachedirs: Paths to pacman's download caches (Default: /var/cache/pacman/pkg)
|
||||
* noupgrades: Files which will never be touched by pacman (extracted as .pacnew)
|
||||
* noextracts: Files which will never be extracted at all (no .pacnew file)
|
||||
* ignorepkgs: Packages to ignore when upgrading.
|
||||
* holdpkgs: Packages which must be upgraded before continuing.
|
||||
* ignoregrps: Groups to ignore when upgrading.
|
||||
* holdpkgs: Important packages which need a confirmation before being removed.
|
||||
|
||||
The following options are read-only, having ONLY alpm_option_get_* functions:
|
||||
|
||||
* lockfile: The file used for locking the database
|
||||
(Default: <dbpath>/db.lck)
|
||||
* localdb: A pmdb_t structure for the local (installed) database
|
||||
* syncdbs: A list of pmdb_t structures to which pacman can sync from.
|
||||
|
||||
The following options are write-only, having ONLY alpm_option_set_* functions:
|
||||
|
||||
* usedelta: Download delta files instead of complete packages if possible.
|
||||
|
||||
[Transactions]
|
||||
|
||||
The transaction sturcture permits easy manipulations of several packages
|
||||
The transaction structure permits easy manipulations of several packages
|
||||
at a time (i.e. adding, upgrade and removal operations).
|
||||
|
||||
A transaction can be initiated with a type (ADD, UPGRADE or REMOVE),
|
||||
A transaction can be initiated with a type (SYNC, UPGRADE or REMOVE),
|
||||
and some flags (NODEPS, FORCE, CASCADE, ...).
|
||||
|
||||
Note: there can only be one type at a time: a transaction is either
|
||||
@@ -105,7 +108,7 @@ These targets represent the list of packages to be handled.
|
||||
|
||||
Then, a transaction needs to be prepared (alpm_trans_prepare()). It
|
||||
means that the various targets added, will be inspected and challenged
|
||||
against the set of already installed packages (dependency checkings,
|
||||
against the set of already installed packages (dependency checking, etc...)
|
||||
|
||||
Last, a callback is associated with each transaction. During the
|
||||
transaction resolution, each time a new step is started or done (i.e
|
||||
@@ -116,27 +119,27 @@ the resolution. Can be useful to implement a progress bar.
|
||||
|
||||
[Package Cache]
|
||||
|
||||
libalpm maintains two caches for each DB. One is a general package cache, the
|
||||
other is a group cache (for package groups). These caches are loaded on demand,
|
||||
and freed when the libary is.
|
||||
It is important to note tha, as a general rule, package structures should NOT be
|
||||
freed manually, as they SHOULD be part of the cache.
|
||||
The cache of a database is always updated by the library after
|
||||
an operation changing the database content (adding and/or removal of
|
||||
packages). Beware frontends ;)
|
||||
libalpm maintains two caches for each DB. One is a general package cache, the
|
||||
other is a group cache (for package groups). These caches are loaded on demand,
|
||||
and freed when the library is.
|
||||
|
||||
It is important to note that, as a general rule, package structures should NOT
|
||||
be freed manually, as they SHOULD be part of the cache. The cache of a
|
||||
database is always updated by the library after an operation changing the
|
||||
database content (adding and/or removal of packages). Beware frontends ;)
|
||||
|
||||
|
||||
[Package]
|
||||
|
||||
The package structure maintains all information for a package. In general,
|
||||
packages should never be freed from front-ends, as they should always be part of
|
||||
the package cache.
|
||||
The package structure maintains all information for a package. In general,
|
||||
packages should never be freed from front-ends, as they should always be part
|
||||
of the package cache.
|
||||
|
||||
The 'origin' data member indicates whether the package is from a file
|
||||
(i.e. -U operations) or from the package cache. In the case of a file, all data
|
||||
members available are present in the structure. Packages indicated as being
|
||||
from the cache have data members filled on demand. For this reason, the
|
||||
alpm_pkg_get_* functions will load the data from the DB as needed.
|
||||
The 'origin' data member indicates whether the package is from a file (i.e. -U
|
||||
operations) or from the package cache. In the case of a file, all data members
|
||||
available are present in the structure. Packages indicated as being from the
|
||||
cache have data members filled on demand. For this reason, the alpm_pkg_get_*
|
||||
functions will load the data from the DB as needed.
|
||||
|
||||
|
||||
[Errors]
|
||||
@@ -149,13 +152,15 @@ indicating success, -1 indicating a failure.
|
||||
If -1 is returned, the variable pm_errno is set to a meaningful value
|
||||
Wise frontends should always care for these returned values.
|
||||
|
||||
Note: the helper function alpm_strerror() can also be used to translate
|
||||
the error code into a more friendly sentence.
|
||||
Note: the helper function alpm_strerror() can also be used to translate one
|
||||
specified error code into a more friendly sentence, and alpm_strerrorlast()
|
||||
does the same for the last error encountered (represented by pm_errno).
|
||||
|
||||
|
||||
[List - alpm_list_t]
|
||||
|
||||
The alpm_list_t structure is a doubly-linked list for use with the libalpm
|
||||
routines. This type is provided publicly so that frontends are free to use it
|
||||
routines. This type is provided publicly so that frontends are free to use it
|
||||
if they have no native list type (C++, glib, python, etc all have list types).
|
||||
See the proper man pages for alpm_list_t references.
|
||||
|
||||
@@ -179,41 +184,65 @@ perform a special action.
|
||||
|
||||
[MAIN] (see pacman.c)
|
||||
|
||||
Calls for alpm_lib_init(), and alpm_lib_release().
|
||||
Calls for alpm_initialize(), and alpm_release().
|
||||
Read the configuration file, and parse command line arguments.
|
||||
Based on the action requested, it initiates the appropriate transactions
|
||||
(see pacman_add(), pacman_remove(), pacman_sync() in files add.c,
|
||||
(see pacman_upgrade(), pacman_remove(), pacman_sync() in files upgrade.c,
|
||||
remove.c and sync.c).
|
||||
|
||||
|
||||
[CONFIGURATION] (see conf.c)
|
||||
[CONFIGURATION] (see conf.h)
|
||||
|
||||
The frontend is using a configuration file, usually "/etc/pacman.conf".
|
||||
Part of these options are only useful for the frontend only (mainly,
|
||||
the download stuffs, and some options like HOLDPKG).
|
||||
The rest is used to configure the library.
|
||||
The frontend is using a configuration file, usually "/etc/pacman.conf". Some
|
||||
of these options are only useful for the frontend only (mainly the ones used to
|
||||
control the output like showsize or totaldownload, or the behavior with
|
||||
cleanmethod and syncfirst). The rest is used to configure the library.
|
||||
|
||||
|
||||
[ADD/UPGRADE/REMOVE/SYNC]
|
||||
|
||||
Nothing new here, excepted some reorganization.
|
||||
[UPGRADE/REMOVE/SYNC]
|
||||
|
||||
The file pacman.c has been divided into several smaller files, namely
|
||||
add.c, remove.c, sync.c and query.c, to hold the big parts: pacman_add,
|
||||
upgrade.c, remove.c, sync.c and query.c, to hold the big parts: pacman_upgrade,
|
||||
pacman_remove, pacman_sync.
|
||||
|
||||
These 3 functions have been split to ease the code reading.
|
||||
|
||||
|
||||
LIMITATIONS/BEHAVIOR CHANGES COMPARED TO PACMAN 2.9
|
||||
===================================================
|
||||
|
||||
Excepted missing features still needing to be implemented, one can
|
||||
notice the following limitations:
|
||||
API CHANGES BETWEEN 3.1 AND 3.2
|
||||
===============================
|
||||
|
||||
- If pacman is out of date, the frontend displays a warning and recommends
|
||||
to give up the on-going transanction. The frontend does not allow to
|
||||
upgrade pacman itself on-the-fly, and thus it should be restarted with
|
||||
only "pacman" as a target.
|
||||
[REMOVED]
|
||||
- alpm_db_whatprovides()
|
||||
- alpm_splitdep (no longer public)
|
||||
- trans->targets was removed, so alpm_trans_get_targets() as well
|
||||
- error codes:
|
||||
PM_ERR_OPT_*, PM_ERR_PKG_INSTALLED, PM_ERR_DLT_CORRUPTED,
|
||||
PM_ERR_LIBARCHIVE_ERROR
|
||||
- event: PM_TRANS_EVT_EXTRACT_DONE
|
||||
- PM_TRANS_TYPE_ADD pmtranstype_t (add transaction)
|
||||
- PM_TRANS_FLAG_DEPENDSONLY pmtransflag_t
|
||||
|
||||
- ...
|
||||
[CHANGED]
|
||||
- alpm_grp_get_pkgs returns with pmpkg_t list, not package-name list
|
||||
- Swap parameters on PM_TRANS_CONV_INSTALL_IGNOREPKG callback function
|
||||
- download callback API changed: alpm_cb_download, alpm_cb_totaldl split
|
||||
(+ new alpm_option_get_totaldlcb(), alpm_option_set_totaldlcb() functions)
|
||||
- unsigned long->off_t changes where size is used
|
||||
- pmsyncpkg_t struct changes:
|
||||
- pmsynctype_t and alpm_sync_get_type() were removed
|
||||
- alpm_sync_get_data() was removed
|
||||
- alpm_sync_get_removes() was added
|
||||
|
||||
[ADDED]
|
||||
- alpm_delta_get_from_md5sum(), alpm_delta_get_to_md5sum()
|
||||
- alpm_miss_get_causingpkg() (new causingpkg field in pmdepmissing_t)
|
||||
- alpm_checkdbconflicts()
|
||||
- alpm_sync_newversion()
|
||||
- alpm_deptest()
|
||||
- error codes :
|
||||
PM_ERR_DLT_INVALID, PM_ERR_LIBARCHIVE, PM_ERR_LIBDOWNLOAD and
|
||||
PM_ERR_EXTERNAL_DOWNLOAD
|
||||
- flags:
|
||||
PM_TRANS_FLAG_ALLEXPLICIT, PM_TRANS_FLAG_UNNEEDED and
|
||||
PM_TRANS_FLAG_RECURSEALL
|
||||
|
||||
37
TRANSLATORS
37
TRANSLATORS
@@ -10,27 +10,40 @@ If your language is not listed here and you wish it was, let the pacman mailing
|
||||
list know you are interested in making a translation. We will be happy to add
|
||||
your language to the mix.
|
||||
|
||||
Czech (cs):
|
||||
Vojtěch Gondžala <vojtech.gondzala@gmail.com>
|
||||
German (de):
|
||||
Pierre Schmitz <pierre@archlinux.de>
|
||||
Matthias Gorissen <matthias@archlinux.de>
|
||||
Benjamin Andresen <benny@in-ulm.de>
|
||||
British English (en_GB):
|
||||
Jeff Bailes <thepizzaking@gmail.com>
|
||||
Spanish (es):
|
||||
Juan Pablo González Tognarelli <jotapesan@gmail.com>
|
||||
Fernando Lagos <fernando@zerial.org>
|
||||
French (fr):
|
||||
solsTiCe d'Hiver <solstice.dhiver@laposte.net>
|
||||
Chantry Xavier <shiningxc@gmail.com>
|
||||
Hungarian (hu):
|
||||
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
|
||||
Nagy Gabor <ngaba@bibl.u-szeged.hu>
|
||||
Italian (it):
|
||||
Giovanni 'voidnull' Scafora <linuxmania@gmail.com>
|
||||
Alessio 'mOLOk' Bolognino <themolok@gmail.com>
|
||||
Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>
|
||||
Polish (pl_PL):
|
||||
Polish (pl):
|
||||
Mateusz Herych <heniekk@gmail.com>
|
||||
Jaroslaw Swierczynski <swiergot@gmail.com>
|
||||
Mateusz Jędrasik <m.jedrasik@gmail.com>
|
||||
Brazilian Portuguese (pt_BR):
|
||||
Douglas Soares de Andrade <douglas@archlinux-br.org>
|
||||
Hugo Doria <hugodoria@archlinux-br.org>
|
||||
Lincoln de Sousa <lincoln@archlinux-br.org>
|
||||
Leandro Inácio <leandro@archlinux-br.org>
|
||||
Russian (ru_RU):
|
||||
Hugo Doria <hugo@archlinux.org>
|
||||
Armando M. Baratti <ambaratti@archlinux-br.org>
|
||||
Leandro Inacio <leandro@archlinux-br.org>
|
||||
Russian (ru):
|
||||
Sergey Tereschenko <serg.partizan@gmail.com>
|
||||
Vitaly Dolgov <ferhiord@gmail.com>
|
||||
Oleg Finkelshteyn <olegfink@gmail.com>
|
||||
Vladimir Bayrakovskiy <4rayven@gmail.com>
|
||||
|
||||
Turkish (tr):
|
||||
Samed Beyribey <ras0ir@eventualis.org>
|
||||
Alper KANAT <alperkanat@gmail.com>
|
||||
Ukrainian (uk):
|
||||
Roman Kyrylych (Роман Кирилич) <roman.kyrylych@gmail.com>
|
||||
Ivan Kovnatsky (Іван Ковнацький) <sevenfourk@gmail.com>
|
||||
Simplified Chinese (zh_CN):
|
||||
甘露(Lu.Gan) <rhythm.gan@gmail.com>
|
||||
|
||||
@@ -3770,7 +3770,7 @@ AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
|
||||
#
|
||||
if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
|
||||
AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
|
||||
_LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
|
||||
_LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
|
||||
[$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC])], [],
|
||||
[case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
|
||||
"" | " "*) ;;
|
||||
@@ -3794,7 +3794,7 @@ esac
|
||||
#
|
||||
wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
|
||||
AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
|
||||
_LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
|
||||
_LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
|
||||
$lt_tmp_static_flag,
|
||||
[],
|
||||
[_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
|
||||
|
||||
@@ -23,10 +23,10 @@ rm -rf doc/{Makefile.in,Makefile}
|
||||
rm -rf doc/html/*.html
|
||||
rm -rf doc/man3/*.3
|
||||
|
||||
rm -rf src/pacman/po/{Makefile.in,Makefile}
|
||||
rm -rf src/pacman/po/POTFILES
|
||||
rm -rf src/pacman/po/stamp-po
|
||||
rm -rf src/pacman/po/*.gmo
|
||||
rm -rf po/{Makefile.in,Makefile}
|
||||
rm -rf po/POTFILES
|
||||
rm -rf po/stamp-po
|
||||
rm -rf po/*.gmo
|
||||
|
||||
rm -rf lib/libalpm/po/{Makefile.in,Makefile}
|
||||
rm -rf lib/libalpm/po/POTFILES
|
||||
|
||||
34
config.guess
vendored
34
config.guess
vendored
@@ -1,10 +1,10 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
|
||||
# Inc.
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2007-05-17'
|
||||
timestamp='2008-01-23'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@@ -56,8 +56,8 @@ version="\
|
||||
GNU config.guess ($timestamp)
|
||||
|
||||
Originally written by Per Bothner.
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
||||
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
@@ -330,7 +330,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit ;;
|
||||
i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*)
|
||||
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
|
||||
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit ;;
|
||||
sun4*:SunOS:6*:*)
|
||||
@@ -532,7 +532,7 @@ EOF
|
||||
echo rs6000-ibm-aix3.2
|
||||
fi
|
||||
exit ;;
|
||||
*:AIX:*:[45])
|
||||
*:AIX:*:[456])
|
||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
||||
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
||||
IBM_ARCH=rs6000
|
||||
@@ -799,6 +799,9 @@ EOF
|
||||
EM64T | authenticamd)
|
||||
echo x86_64-unknown-interix${UNAME_RELEASE}
|
||||
exit ;;
|
||||
IA64)
|
||||
echo ia64-unknown-interix${UNAME_RELEASE}
|
||||
exit ;;
|
||||
esac ;;
|
||||
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||
echo i${UNAME_MACHINE}-pc-mks
|
||||
@@ -833,7 +836,14 @@ EOF
|
||||
echo ${UNAME_MACHINE}-pc-minix
|
||||
exit ;;
|
||||
arm*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
eval $set_cc_for_build
|
||||
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep -q __ARM_EABI__
|
||||
then
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
|
||||
fi
|
||||
exit ;;
|
||||
avr32*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
@@ -954,8 +964,8 @@ EOF
|
||||
x86_64:Linux:*:*)
|
||||
echo x86_64-unknown-linux-gnu
|
||||
exit ;;
|
||||
xtensa:Linux:*:*)
|
||||
echo xtensa-unknown-linux-gnu
|
||||
xtensa*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit ;;
|
||||
i*86:Linux:*:*)
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
@@ -1474,9 +1484,9 @@ This script, last modified $timestamp, has failed to recognize
|
||||
the operating system you are using. It is advised that you
|
||||
download the most up to date version of the config scripts from
|
||||
|
||||
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
|
||||
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
||||
and
|
||||
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
|
||||
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
|
||||
|
||||
If the version you run ($0) is already up to date, please
|
||||
send the following data and any information you think might be
|
||||
|
||||
48
config.sub
vendored
48
config.sub
vendored
@@ -1,10 +1,10 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
|
||||
# Inc.
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2007-04-29'
|
||||
timestamp='2008-01-16'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
@@ -72,8 +72,8 @@ Report bugs and patches to <config-patches@gnu.org>."
|
||||
version="\
|
||||
GNU config.sub ($timestamp)
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
||||
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
@@ -369,10 +369,14 @@ case $basic_machine in
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||
| xstormy16-* | xtensa-* \
|
||||
| xstormy16-* | xtensa*-* \
|
||||
| ymp-* \
|
||||
| z8k-*)
|
||||
;;
|
||||
# Recognize the basic CPU types without company name, with glob match.
|
||||
xtensa*)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
386bsd)
|
||||
@@ -443,6 +447,14 @@ case $basic_machine in
|
||||
basic_machine=ns32k-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
blackfin)
|
||||
basic_machine=bfin-unknown
|
||||
os=-linux
|
||||
;;
|
||||
blackfin-*)
|
||||
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
c90)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
@@ -475,8 +487,8 @@ case $basic_machine in
|
||||
basic_machine=craynv-cray
|
||||
os=-unicosmp
|
||||
;;
|
||||
cr16c)
|
||||
basic_machine=cr16c-unknown
|
||||
cr16)
|
||||
basic_machine=cr16-unknown
|
||||
os=-elf
|
||||
;;
|
||||
crds | unos)
|
||||
@@ -668,6 +680,14 @@ case $basic_machine in
|
||||
basic_machine=m68k-isi
|
||||
os=-sysv
|
||||
;;
|
||||
m68knommu)
|
||||
basic_machine=m68k-unknown
|
||||
os=-linux
|
||||
;;
|
||||
m68knommu-*)
|
||||
basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
m88k-omron*)
|
||||
basic_machine=m88k-omron
|
||||
;;
|
||||
@@ -813,6 +833,14 @@ case $basic_machine in
|
||||
basic_machine=i860-intel
|
||||
os=-osf
|
||||
;;
|
||||
parisc)
|
||||
basic_machine=hppa-unknown
|
||||
os=-linux
|
||||
;;
|
||||
parisc-*)
|
||||
basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
pbd)
|
||||
basic_machine=sparc-tti
|
||||
;;
|
||||
@@ -1021,6 +1049,10 @@ case $basic_machine in
|
||||
basic_machine=tic6x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tile*)
|
||||
basic_machine=tile-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
|
||||
156
configure.ac
156
configure.ac
@@ -40,36 +40,26 @@ AC_PREREQ(2.60)
|
||||
#
|
||||
# Bugfix releases:
|
||||
# pacman_version_micro += 1
|
||||
#
|
||||
# pacman_version_suffix should be similar to one of the following:
|
||||
# For beta releases: [beta2]
|
||||
# For code under development: [devel]
|
||||
# For production releases: []
|
||||
|
||||
m4_define([lib_current], [2])
|
||||
m4_define([lib_revision], [0])
|
||||
m4_define([lib_age], [0])
|
||||
m4_define([lib_current], [4])
|
||||
m4_define([lib_revision], [1])
|
||||
m4_define([lib_age], [1])
|
||||
|
||||
m4_define([pacman_version_major], [3])
|
||||
m4_define([pacman_version_minor], [1])
|
||||
m4_define([pacman_version_micro], [0])
|
||||
m4_define([pacman_version_suffix], [])
|
||||
m4_define([pacman_version_minor], [2])
|
||||
m4_define([pacman_version_micro], [2])
|
||||
m4_define([pacman_version],
|
||||
[pacman_version_major.pacman_version_minor.pacman_version_micro])
|
||||
m4_define([pacman_display_version],
|
||||
pacman_version[]m4_ifdef([pacman_version_suffix],[pacman_version_suffix]))
|
||||
|
||||
# Autoconf initialization
|
||||
# AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
|
||||
AC_INIT([Pacman Package Manager], [pacman_display_version],
|
||||
[pacman-dev@archlinux.org], [pacman])
|
||||
AC_INIT([pacman], [pacman_version], [pacman-dev@archlinux.org])
|
||||
AC_CONFIG_SRCDIR([config.h.in])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
AM_INIT_AUTOMAKE
|
||||
|
||||
LIB_VERSION=`expr lib_current.lib_age`.lib_revision
|
||||
LIB_VERSION=`expr lib_current - lib_age`.lib_age.lib_revision
|
||||
LIB_VERSION_INFO="lib_current:lib_revision:lib_age"
|
||||
|
||||
# Set subsitution values for version stuff in Makefiles and anywhere else,
|
||||
@@ -80,48 +70,49 @@ AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
|
||||
|
||||
# Help line for root directory
|
||||
AC_ARG_WITH(root-dir,
|
||||
AC_HELP_STRING([--with-root-dir=path], [set the location of pacman's root operating directory]),
|
||||
AS_HELP_STRING([--with-root-dir=path], [set the location of pacman's root operating directory]),
|
||||
[ROOTDIR=$withval], [ROOTDIR=/])
|
||||
|
||||
# Help line for package extension
|
||||
AC_ARG_WITH(pkg-ext,
|
||||
AC_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
|
||||
AS_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
|
||||
[PKGEXT=$withval], [PKGEXT=.pkg.tar.gz])
|
||||
|
||||
# Help line for source package directory
|
||||
AC_ARG_WITH(src-ext,
|
||||
AC_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
|
||||
AS_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
|
||||
[SRCEXT=$withval], [SRCEXT=.src.tar.gz])
|
||||
|
||||
# Help line for database extension
|
||||
AC_ARG_WITH(db-ext,
|
||||
AC_HELP_STRING([--with-db-ext=ext], [set the file extension used by the database]),
|
||||
AS_HELP_STRING([--with-db-ext=ext], [set the file extension used by the database]),
|
||||
[DBEXT=$withval], [DBEXT=.db.tar.gz])
|
||||
|
||||
# Help line for libdownload/libfetch
|
||||
AC_ARG_ENABLE(internal-download,
|
||||
AS_HELP_STRING([--disable-internal-download], [do not build with libdownload/libfetch support]),
|
||||
[internaldownload=$enableval], [internaldownload=yes])
|
||||
|
||||
# Help line for documentation
|
||||
AC_ARG_ENABLE(doc,
|
||||
AC_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
|
||||
AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
|
||||
[wantdoc=$enableval], [wantdoc=yes])
|
||||
|
||||
# Help line for doxygen
|
||||
AC_ARG_ENABLE(doxygen,
|
||||
AC_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
|
||||
AS_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
|
||||
[wantdoxygen=$enableval], [wantdoxygen=no])
|
||||
|
||||
# Help line for asciidoc
|
||||
AC_ARG_ENABLE(asciidoc,
|
||||
AC_HELP_STRING([--enable-asciidoc], [build your own manpages with Asciidoc]),
|
||||
[wantasciidoc=$enableval], [wantasciidoc=no])
|
||||
|
||||
# Help line for debug
|
||||
AC_ARG_ENABLE(debug,
|
||||
AC_HELP_STRING([--enable-debug], [enable debugging support]),
|
||||
AS_HELP_STRING([--enable-debug], [enable debugging support]),
|
||||
[debug=$enableval], [debug=no])
|
||||
|
||||
# Help line for pacman.static
|
||||
AC_ARG_ENABLE(pacman-static,
|
||||
AC_HELP_STRING([--disable-pacman-static], [do not build static version of pacman]),
|
||||
[pacmanstatic=$enableval], [pacmanstatic=yes])
|
||||
# Help line for using git version in pacman version string
|
||||
AC_ARG_ENABLE(git-version,
|
||||
AS_HELP_STRING([--enable-git-version],
|
||||
[enable use of git version in version string if available]),
|
||||
[wantgitver=$enableval], [wantgitver=no])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_AWK
|
||||
@@ -129,7 +120,6 @@ AC_PROG_CC_C99
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_RANLIB
|
||||
AC_PROG_LIBTOOL
|
||||
AC_CHECK_PROGS([PYTHON], [python2.5 python2.4 python], [false])
|
||||
|
||||
@@ -138,13 +128,27 @@ AM_GNU_GETTEXT([external])
|
||||
AM_GNU_GETTEXT_VERSION(0.13.1)
|
||||
|
||||
# Check for libarchive
|
||||
AC_CHECK_LIB([archive], [archive_read_data], , AC_MSG_ERROR([libarchive is needed to compile pacman!]))
|
||||
AC_CHECK_LIB([archive], [archive_read_data], ,
|
||||
AC_MSG_ERROR([libarchive is needed to compile pacman!]))
|
||||
|
||||
# Check for libdownload
|
||||
AC_CHECK_LIB([download], [downloadParseURL], , AC_MSG_ERROR([libdownload is needed to compile pacman!]))
|
||||
# Enable or disable usage of libdownload/libfetch
|
||||
# - this is a nested check- first see if we need a library, if we do then
|
||||
# check for libdownload first, then fallback to libfetch, then die
|
||||
AC_MSG_CHECKING(whether to link with download library)
|
||||
if test "x$internaldownload" = "xyes" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([INTERNAL_DOWNLOAD], , [Use internal download library])
|
||||
# Check for a download library if it was actually requested
|
||||
AC_CHECK_LIB([download], [downloadParseURL], ,
|
||||
AC_CHECK_LIB([fetch], [fetchParseURL], ,
|
||||
AC_MSG_ERROR([libdownload or libfetch are needed to compile with internal download support])) )
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AM_CONDITIONAL(INTERNAL_DOWNLOAD, test "x$internaldownload" = "xyes")
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/statvfs.h sys/time.h syslog.h wchar.h])
|
||||
AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/param.h sys/statvfs.h sys/syslimits.h sys/time.h syslog.h wchar.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_INLINE
|
||||
@@ -156,13 +160,13 @@ AC_STRUCT_TM
|
||||
AC_TYPE_UID_T
|
||||
|
||||
# Checks for library functions.
|
||||
AC_FUNC_CLOSEDIR_VOID
|
||||
AC_FUNC_FORK
|
||||
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
|
||||
AC_FUNC_MKTIME
|
||||
AC_TYPE_SIGNAL
|
||||
AC_CHECK_FUNCS([realpath regcomp strcasecmp strdup strerror strnlen \
|
||||
strndup strrchr strsep strstr strverscmp uname geteuid])
|
||||
AC_CHECK_FUNCS([geteuid realpath regcomp strcasecmp \
|
||||
strndup strrchr strsep swprintf \
|
||||
wcwidth uname])
|
||||
|
||||
# Enable large file support if available
|
||||
AC_SYS_LARGEFILE
|
||||
@@ -172,13 +176,26 @@ GCC_VISIBILITY_CC
|
||||
# Check if we have -fgnu89-inline flag
|
||||
GCC_GNU89_INLINE_CC
|
||||
|
||||
# Host-dependant flags
|
||||
case "${host}" in
|
||||
*-*-cygwin*)
|
||||
# Host-dependant definitions
|
||||
SIZECMD="stat -c %s"
|
||||
case "${host_os}" in
|
||||
*bsd*)
|
||||
SIZECMD="stat -f %z"
|
||||
;;
|
||||
cygwin*)
|
||||
host_os_cygwin=yes
|
||||
CFLAGS="$CFLAGS -DCYGWIN"
|
||||
;;
|
||||
darwin*)
|
||||
host_os_darwin=yes
|
||||
SIZECMD="stat -f %z"
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL([CYGWIN], test "x$host_os_cygwin" = "xyes")
|
||||
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
|
||||
AC_SUBST(SIZECMD)
|
||||
|
||||
# Check for architecture, used in default makepkg.conf
|
||||
# (Note single space left after CARCHFLAGS)
|
||||
case "${host}" in
|
||||
@@ -235,9 +252,9 @@ fi
|
||||
AM_CONDITIONAL(WANT_DOC, test "x$wantdoc" = "xyes")
|
||||
|
||||
# Check for doxygen support and status
|
||||
AC_CHECK_PROGS([DOXYGEN], [doxygen])
|
||||
AC_MSG_CHECKING([for doxygen])
|
||||
if test "x$wantdoxygen" = "xyes" ; then
|
||||
AC_CHECK_PROGS([DOXYGEN], [doxygen])
|
||||
if test $DOXYGEN ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
usedoxygen=yes
|
||||
@@ -251,23 +268,6 @@ else
|
||||
fi
|
||||
AM_CONDITIONAL(USE_DOXYGEN, test "x$usedoxygen" = "xyes")
|
||||
|
||||
# Check for asciidoc support and status
|
||||
AC_MSG_CHECKING([for asciidoc])
|
||||
if test "x$wantasciidoc" = "xyes" ; then
|
||||
AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
|
||||
if test $ASCIIDOC ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
useasciidoc=yes
|
||||
else
|
||||
AC_MSG_RESULT([no, asciidoc missing])
|
||||
useasciidoc=no
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([no, disabled by configure])
|
||||
useasciidoc=no
|
||||
fi
|
||||
AM_CONDITIONAL(USE_ASCIIDOC, test "x$useasciidoc" = "xyes")
|
||||
|
||||
# Enable or disable debug code
|
||||
AC_MSG_CHECKING(for debug mode request)
|
||||
if test "x$debug" = "xyes" ; then
|
||||
@@ -284,15 +284,24 @@ else
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
fi
|
||||
|
||||
# Enable or disable inclusion of pacman.static
|
||||
AC_MSG_CHECKING(whether to build pacman.static)
|
||||
if test "x$pacmanstatic" = "xyes" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([INCLUDE_PACMAN_STATIC], , [Build pacman.static])
|
||||
# Enable or disable use of git version in pacman version string
|
||||
AC_CHECK_PROGS([GIT], [git])
|
||||
AC_CHECK_FILE([.git/], hasgitdir=yes)
|
||||
AC_MSG_CHECKING(whether to use git version if available)
|
||||
if test "x$wantgitver" = "xyes" ; then
|
||||
if test $GIT -a "x$hasgitdir" = "xyes"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
usegitver=yes
|
||||
AC_DEFINE([USE_GIT_VERSION], , [Use GIT version in version string])
|
||||
else
|
||||
AC_MSG_RESULT([no, git or .git dir missing])
|
||||
usegitver=no
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_RESULT([no, disabled by configure])
|
||||
usegitver=no
|
||||
fi
|
||||
AM_CONDITIONAL(INCLUDE_PACMAN_STATIC, test "x$pacmanstatic" = "xyes")
|
||||
AM_CONDITIONAL(USE_GIT_VERSION, test "x$usegitver" = "xyes")
|
||||
|
||||
# Set root directory
|
||||
AC_SUBST(ROOTDIR)
|
||||
@@ -315,7 +324,6 @@ src/util/Makefile
|
||||
scripts/Makefile
|
||||
doc/Makefile
|
||||
etc/Makefile
|
||||
etc/pacman.d/Makefile
|
||||
po/Makefile.in
|
||||
pactest/Makefile
|
||||
contrib/Makefile
|
||||
@@ -324,7 +332,7 @@ Makefile
|
||||
AC_OUTPUT
|
||||
|
||||
echo "
|
||||
pacman_display_version:
|
||||
${PACKAGE_NAME}:
|
||||
|
||||
Build information:
|
||||
source code location : ${srcdir}
|
||||
@@ -341,9 +349,12 @@ pacman_display_version:
|
||||
Architecture : ${CARCH}
|
||||
Architecture flags : ${CARCHFLAGS}
|
||||
Host Type : ${CHOST}
|
||||
Filesize command : ${SIZECMD}
|
||||
|
||||
libalpm version : ${LIB_VERSION}
|
||||
libalpm version info : ${LIB_VERSION_INFO}
|
||||
pacman version : ${PACKAGE_VERSION}
|
||||
using git version : ${usegitver}
|
||||
|
||||
Directory and file information:
|
||||
root working directory : ${ROOTDIR}
|
||||
@@ -353,10 +364,9 @@ pacman_display_version:
|
||||
|
||||
Compilation options:
|
||||
Run make in doc/ dir : ${wantdoc}
|
||||
Use download library : ${internaldownload}
|
||||
Doxygen support : ${usedoxygen}
|
||||
Asciidoc support : ${useasciidoc}
|
||||
debug support : ${debug}
|
||||
build pacman.static : ${pacmanstatic}
|
||||
"
|
||||
|
||||
# vim:set ts=2 sw=2 noet:
|
||||
|
||||
0
contrib/.gitignore
vendored
0
contrib/.gitignore
vendored
@@ -1,10 +1,14 @@
|
||||
EXTRA_DIST = \
|
||||
PKGBUILD.vim \
|
||||
bacman \
|
||||
bash_completion \
|
||||
gensync \
|
||||
pacdiff \
|
||||
paclist \
|
||||
pacsearch \
|
||||
re-pacman \
|
||||
vimproject \
|
||||
pactree \
|
||||
updatesync \
|
||||
vimprojects \
|
||||
wget-xdelta.sh \
|
||||
zsh_completion \
|
||||
README
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
finish
|
||||
endif
|
||||
|
||||
let b:main_syntax = "sh"
|
||||
@@ -57,32 +57,38 @@ syn keyword pb_k_license license contained
|
||||
syn keyword pbLicense APACHE CDDL EPL FDL GPL LGPL MPL PHP RUBY ZLIB ISC MIT BSD contained
|
||||
syn match pbLicenseCustom /custom\(:[[:alnum:]]*\)*/ contained
|
||||
syn match pbIllegalLicense /[^='"() ]/ contained contains=pbLicenseCustom,pbLicense
|
||||
syn match pbLicenseGroup /^license=.*/ contains=pb_k_license,pbLicenseCustom,pbLicense,pbIllegalLicense,shDoubleQuote,shSingleQuote
|
||||
syn region pbLicenseGroup start=/^license=(/ end=/)/ contains=pb_k_license,pbLicenseCustom,pbLicense,pbIllegalLicense
|
||||
|
||||
" backup
|
||||
syn keyword pb_k_backup backup contained
|
||||
syn match pbValidBackup /\.\?[[:alpha:]]*\/[[:alnum:]\{\}+._$-]*]*/ contained
|
||||
syn match pbBackupGroup /^backup=.*/ contains=pb_k_backup,pbValidBackup,shDoubleQuote,shSingleQuote
|
||||
syn region pbBackupGroup start=/^backup=(/ end=/)/ contains=pb_k_backup,pbValidBackup,shDoubleQuote,shSingleQuote
|
||||
|
||||
" arch
|
||||
syn keyword pb_k_arch arch contained
|
||||
syn keyword pbArch i686 x86_64 ppc contained
|
||||
syn match pbIllegalArch /[^='() ]/ contained contains=pbArch
|
||||
syn match pbArchGroup /^arch=.*/ contains=pb_k_arch,pbArch,pbIllegalArch,shDoubleQuote,shSingleQuote
|
||||
syn match pbIllegalArch /[^='"() ]/ contained contains=pbArch
|
||||
syn region pbArchGroup start=/^arch=(/ end=/)/ contains=pb_k_arch,pbArch,pbIllegalArch
|
||||
|
||||
" makedepends
|
||||
syn keyword pb_k_makedepends makedepends contained
|
||||
syn match pbValidMakedepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
|
||||
syn region pbMakedependsGroup start=/^makedepends=(/ end=/)/ contains=pb_k_makedepends,pbValidMakedepends,shDoubleQuote,shSingleQuote
|
||||
" groups
|
||||
syn keyword pb_k_groups groups contained
|
||||
syn match pbValidGroups /\([[:alnum:]]\|+\|-\|_\)*/ contained
|
||||
syn region pbGroupsGroup start=/^groups=(/ end=/)/ contains=pb_k_groups,pbValidGroups,shDoubleQuote,shSingleQuote
|
||||
|
||||
" depends
|
||||
syn keyword pb_k_depends depends contained
|
||||
syn match pbValidDepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
|
||||
syn region pbDependsGroup start=/^depends=(/ end=/)/ contains=pb_k_depends,pbValidDepends,shDoubleQuote,shSingleQuote
|
||||
|
||||
" XXX little hack to color conflicts/provides/replaces keyword even without =()
|
||||
syn match pbkw /^\(conflicts\|provides\|replaces\)/ contains=pb_k_conflicts,pb_k_provides,pb_k_replaces
|
||||
hi def link pbkw keyword
|
||||
" makedepends
|
||||
syn keyword pb_k_makedepends makedepends contained
|
||||
syn match pbValidMakedepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
|
||||
syn region pbMakedependsGroup start=/^makedepends=(/ end=/)/ contains=pb_k_makedepends,pbValidMakedepends,shDoubleQuote,shSingleQuote
|
||||
|
||||
" optdepends
|
||||
syn keyword pb_k_optdepends optdepends contained
|
||||
syn match pbValidOptdepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
|
||||
syn region pbOptdependsGroup start=/^optdepends=(/ end=/)/ contains=pb_k_optdepends,pbValidOptdepends,shDoubleQuote,shSingleQuote
|
||||
|
||||
" conflicts
|
||||
syn keyword pb_k_conflicts conflicts contained
|
||||
@@ -100,7 +106,7 @@ syn match pbValidReplaces /\([[:alnum:]]\|+\|-\|_\)*/ contained
|
||||
syn region pbReplacesGroup start=/^replaces=(/ end=/)/ contains=pb_k_replaces,pbValidReplaces,shDoubleQuote,shSingleQuote
|
||||
|
||||
" install
|
||||
" XXX remove install from bashStatement, fix strage bug
|
||||
" XXX remove install from bashStatement, fix strange bug
|
||||
syn clear bashStatement
|
||||
syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
|
||||
|
||||
@@ -110,7 +116,7 @@ syn match pbIllegalInstall /[^=]/ contained contains=pbValidInstall
|
||||
syn match pbInstallGroup /^install=.*/ contains=pb_k_install,pbValidInstall,pbIllegalInstall,shDeref,shDoubleQuote,shSingleQuote
|
||||
|
||||
" source:
|
||||
" XXX remove source from shStatement, fixstrange bug
|
||||
" XXX remove source from shStatement, fix strange bug
|
||||
syn clear shStatement
|
||||
syn keyword shStatement xxx wait getopts return autoload whence printf true popd nohup enable r trap readonly fc fg kill ulimit umask disown stop pushd read history logout times local exit test pwd time eval integer suspend dirs shopt hash false newgrp bg print jobs continue functions exec help cd break unalias chdir type shift builtin let bind
|
||||
|
||||
@@ -125,7 +131,7 @@ hi def link pbDerefEmulation PreProc
|
||||
syn keyword pb_k_md5sums md5sums contained
|
||||
syn match pbIllegalMd5sums /[^='"()\/ ]/ contained contains=pbValidMd5sums
|
||||
syn match pbValidMd5sums /[[:alnum:]]\{32\}/ contained
|
||||
syn region pbMd5sumsGroup start=/^md5sums/ end=/)/ contains=pb_k_md5sums,pbMd5Quotes,pbMd5Hash,pbIllegalMd5sums
|
||||
syn region pbMd5sumsGroup start=/^md5sums/ end=/)/ contains=pb_k_md5sums,pbMd5Quotes,pbMd5Hash,pbIllegalMd5sums keepend
|
||||
syn match pbMd5Quotes /'.*'\|".*"/ contained contains=pbMd5Hash,pbIllegalMd5sums
|
||||
syn match pbMd5Hash /[[:alnum:]]\+/ contained contains=pbValidMd5sums
|
||||
hi def link pbMd5Quotes Keyword
|
||||
@@ -136,7 +142,7 @@ hi def link pbValidMd5sums Number
|
||||
syn keyword pb_k_sha1sums sha1sums contained
|
||||
syn match pbIllegalSha1sums /[^='"()\/ ]/ contained contains=pbValidSha1sums
|
||||
syn match pbValidSha1sums /[[:alnum:]]\{40\}/ contained
|
||||
syn region pbSha1sumsGroup start=/^sha1sums/ end=/)/ contains=pb_k_sha1sums,pbSha1Quotes,pbSha1Hash,pbIllegalSha1sums
|
||||
syn region pbSha1sumsGroup start=/^sha1sums/ end=/)/ contains=pb_k_sha1sums,pbSha1Quotes,pbSha1Hash,pbIllegalSha1sums keepend
|
||||
syn match pbSha1Quotes /'.*'\|".*"/ contained contains=pbSha1Hash,pbIllegalSha1sums
|
||||
syn match pbSha1Hash /[[:alnum:]]\+/ contained contains=pbValidSha1sums
|
||||
hi def link pbSha1Quotes Keyword
|
||||
@@ -145,7 +151,7 @@ hi def link pbValidSha1sums Number
|
||||
|
||||
" options
|
||||
syn keyword pb_k_options options contained
|
||||
syn match pbOptions /\(no\)\?\(strip\|docs\|libtool\|emptydirs\|ccache\|distcc\|makeflags\|force\)/ contained
|
||||
syn match pbOptions /\(no\)\?\(strip\|docs\|libtool\|emptydirs\|zipman\|ccache\|distcc\|makeflags\|force\)/ contained
|
||||
syn match pbOptionsNeg /\!/ contained
|
||||
syn match pbOptionsDeprec /no/ contained
|
||||
syn region pbOptionsGroup start=/^options=(/ end=/)/ contains=pb_k_options,pbOptions,pbOptionsNeg,pbOptionsDeprec,pbIllegalOption,shDoubleQuote,shSingleQuote
|
||||
@@ -195,7 +201,9 @@ hi def link pb_k_backup pbKeywords
|
||||
hi def link pb_k_arch pbKeywords
|
||||
hi def link pbIllegalArch Error
|
||||
|
||||
hi def link pb_k_groups pbKeywords
|
||||
hi def link pb_k_makedepends pbKeywords
|
||||
hi def link pb_k_optdepends pbKeywords
|
||||
hi def link pb_k_depends pbKeywords
|
||||
hi def link pb_k_replaces pbKeywords
|
||||
hi def link pb_k_conflicts pbKeywords
|
||||
|
||||
@@ -12,16 +12,26 @@ zsh_completion - a zsh completion script, install (with a rename) to
|
||||
|
||||
pacdiff - a simple pacnew/pacorig/pacsave updater for /etc/.
|
||||
|
||||
paclist - list all packages installed from a given repository. Useful for
|
||||
seeing which packages you may have installed from the testing repository,
|
||||
for instance.
|
||||
|
||||
pacsearch - a colorized search combining both -Ss and -Qs output. Installed
|
||||
packages are easily identified with a *** and local-only packages are also
|
||||
listed.
|
||||
|
||||
re-pacman - regenerate a pacman package based on installed files and the pacman
|
||||
pactree - generate a dependency tree of an installed package in textual or
|
||||
graphical form (using graphviz).
|
||||
|
||||
bacman - regenerate a pacman package based on installed files and the pacman
|
||||
database entries. Useful for reuse, or possible config file extension.
|
||||
|
||||
vimproject - a project file for the vim project plugin (some files listed
|
||||
may need to be updated).
|
||||
vimprojects - a project file for the vim project plugin.
|
||||
|
||||
wget-xdelta.sh - A download script for pacman which allows binary deltas
|
||||
generated with makepkg to be used instead of downloading full binary packages.
|
||||
This should cut download sizes for some package upgrades significantly.
|
||||
|
||||
gensync, updatesync - The former repository management scripts that have since
|
||||
been superseded by repo-add and repo-remove. They are here for posterity's
|
||||
sake, and to show how repo-add and repo-remove can be wrapped in other scripts.
|
||||
|
||||
284
contrib/bacman
Executable file
284
contrib/bacman
Executable file
@@ -0,0 +1,284 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# bacman: recreate a package from a running system
|
||||
# This script rebuilds an already installed package using metadata
|
||||
# stored into the pacman database and system files
|
||||
#
|
||||
# (c) 2008 - locci <carlocci_at_gmail_dot_com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
readonly progname="bacman"
|
||||
readonly progver="0.2.0"
|
||||
|
||||
#
|
||||
# User Friendliness
|
||||
#
|
||||
function usage(){
|
||||
echo "This program recreates a package using pacman's db and system files"
|
||||
echo "Usage: $progname <installed package name>"
|
||||
echo "Example: $progname kernel26"
|
||||
}
|
||||
|
||||
if [ $# -ne 1 ] ; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = "--help" -o "$1" = "-h" ] ; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$1" = "--version" -o "$1" = "-v" ]; then
|
||||
echo "$progname version $progver"
|
||||
echo "Copyright (C) 2008 locci"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#
|
||||
# Fakeroot support
|
||||
#
|
||||
if [ $EUID -gt 0 ]; then
|
||||
if [ -f /usr/bin/fakeroot ]; then
|
||||
echo "Entering fakeroot environment"
|
||||
export INFAKEROOT="1"
|
||||
/usr/bin/fakeroot -u -- $0 $1
|
||||
exit $?
|
||||
else
|
||||
echo "WARNING: installing fakeroot or running ${progname} as root is required to"
|
||||
echo " preserve the ownership permissions of files in some packages"
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
#
|
||||
# Setting environmental variables
|
||||
#
|
||||
if [ ! -r /etc/pacman.conf ]; then
|
||||
echo "ERROR: unable to read /etc/pacman.conf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
eval $(awk '/DBPath/ {print $1$2$3}' /etc/pacman.conf)
|
||||
pac_db="${DBPath:-/var/lib/pacman/}/local"
|
||||
|
||||
if [ ! -r /etc/makepkg.conf ]; then
|
||||
echo "ERROR: unable to read /etc/makepkg.conf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source "/etc/makepkg.conf"
|
||||
if [ -r ~/.makepkg.conf ]; then
|
||||
source ~/.makepkg.conf
|
||||
fi
|
||||
|
||||
pkg_arch=${CARCH:-'unknown'}
|
||||
pkg_dest="${PKGDEST:-$PWD}"
|
||||
pkg_ext=${PKGEXT:-'.pkg.tar.gz'}
|
||||
pkg_pkger=${PACKAGER:-'Unknown Packager'}
|
||||
|
||||
pkg_name="$1"
|
||||
pkg_dir="$(echo $pac_db/$pkg_name-[0-9]*)"
|
||||
pkg_namver="${pkg_dir##*/}"
|
||||
|
||||
#
|
||||
# Checks everything is in place
|
||||
#
|
||||
if [ ! -d "$pac_db" ] ; then
|
||||
echo "ERROR: pacman database directory ${pac_db} not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$pkg_dir" ] ; then
|
||||
echo "ERROR: package ${pkg_name} not found in pacman database"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#
|
||||
# Begin
|
||||
#
|
||||
echo Package: ${pkg_namver}
|
||||
work_dir=$(mktemp -d -p /tmp)
|
||||
cd "$work_dir" || exit 1
|
||||
|
||||
#
|
||||
# File copying
|
||||
#
|
||||
echo "Copying package files..."
|
||||
|
||||
cat "$pkg_dir"/files |
|
||||
while read i; do
|
||||
if [ -z "$i" ] ; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "$i" =~ %[A-Z]*% ]] ; then
|
||||
current=$i
|
||||
continue
|
||||
fi
|
||||
|
||||
case $current in
|
||||
%FILES%)
|
||||
ret=0
|
||||
if [ -e "/$i" ]; then
|
||||
bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf -
|
||||
|
||||
# Workaround to bsdtar not reporting a missing file as an error
|
||||
if [ ! -e "$work_dir/$i" ] && [ -L "$work_dir/$i"]; then
|
||||
echo ""
|
||||
echo "ERROR: unable to add /$i to the package"
|
||||
echo " If your user does not have permssion to read this file then"
|
||||
echo " you will need to run $progname as root"
|
||||
rm -rf "$work_dir"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "WARNING: package file /$i is missing"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
rm -rf "$work_dir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pkg_size=$(du -sk | awk '{print $1 * 1024}')
|
||||
|
||||
if [ -f "$pkg_dir/install" ] ; then
|
||||
cp "$pkg_dir/install" "$work_dir/.INSTALL"
|
||||
fi
|
||||
if [ -f $pkg_dir/changelog ] ; then
|
||||
cp "$pkg_dir/changelog" "$work_dir/.CHANGELOG"
|
||||
fi
|
||||
|
||||
#
|
||||
# .PKGINFO stuff
|
||||
#
|
||||
echo Generating .PKGINFO metadata...
|
||||
echo "# Generated by $progname $progver" > .PKGINFO
|
||||
if [ "$INFAKEROOT" = "1" ]; then
|
||||
echo "# Using $(fakeroot -v)" >> .PKGINFO
|
||||
fi
|
||||
echo "# $(LC_ALL=C date)" >> .PKGINFO
|
||||
echo "#" >> .PKGINFO
|
||||
|
||||
cat "$pkg_dir"/{desc,files,depends} |
|
||||
while read i; do
|
||||
if [[ -z "$i" ]]; then
|
||||
continue;
|
||||
fi
|
||||
|
||||
if [[ "$i" =~ %[A-Z]*% ]] ; then
|
||||
current=$i
|
||||
continue
|
||||
fi
|
||||
|
||||
case "$current" in
|
||||
# desc
|
||||
%NAME%)
|
||||
echo "pkgname = $i" >> .PKGINFO
|
||||
;;
|
||||
%VERSION%)
|
||||
echo "pkgver = $i" >> .PKGINFO
|
||||
;;
|
||||
%DESC%)
|
||||
echo "pkgdesc = $i" >> .PKGINFO
|
||||
;;
|
||||
%URL%)
|
||||
echo "url = $i" >> .PKGINFO
|
||||
;;
|
||||
%LICENSE%)
|
||||
echo "license = $i" >> .PKGINFO
|
||||
;;
|
||||
%ARCH%)
|
||||
echo "arch = $i" >> .PKGINFO
|
||||
;;
|
||||
%BUILDDATE%)
|
||||
echo "builddate = $(date -u "+%s")" >> .PKGINFO
|
||||
;;
|
||||
%PACKAGER%)
|
||||
echo "packager = $pkg_pkger" >> .PKGINFO
|
||||
;;
|
||||
%SIZE%)
|
||||
echo "size = $pkg_size" >> .PKGINFO
|
||||
;;
|
||||
%GROUPS%)
|
||||
echo "group = $i" >> .PKGINFO
|
||||
;;
|
||||
%REPLACES%)
|
||||
echo "replaces = $i" >> .PKGINFO
|
||||
;;
|
||||
%FORCE%)
|
||||
echo "force = true" >> .PKGINFO
|
||||
;;
|
||||
|
||||
# files
|
||||
%BACKUP%)
|
||||
# strip the md5sum after the tab
|
||||
echo "backup = ${i%%$'\t'*}" >> .PKGINFO
|
||||
;;
|
||||
|
||||
# depends
|
||||
%DEPENDS%)
|
||||
echo "depend = $i" >> .PKGINFO
|
||||
;;
|
||||
%OPTDEPENDS%)
|
||||
echo "optdepend = $i" >> .PKGINFO
|
||||
;;
|
||||
%CONFLICTS%)
|
||||
echo "conflict = $i" >> .PKGINFO
|
||||
;;
|
||||
%PROVIDES%)
|
||||
echo "provides = $i" >> .PKGINFO
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
#
|
||||
# Fixes owner:group and permissions for .PKGINFO, .CHANGELOG, .INSTALL
|
||||
#
|
||||
chown root:root "$work_dir"/{.PKGINFO,.CHANGELOG,.INSTALL} 2> /dev/null
|
||||
chmod 644 "$work_dir"/{.PKGINFO,.CHANGELOG,.INSTALL} 2> /dev/null
|
||||
|
||||
#
|
||||
# Generate the package
|
||||
#
|
||||
echo "Generating the package..."
|
||||
|
||||
ret=0
|
||||
bsdtar -czf "$pkg_dest/$pkg_namver-$pkg_arch$pkg_ext" $(ls -A) || ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "ERROR: unable to write package to $pkg_dest"
|
||||
echo " Maybe the disk is full or you do not have write access"
|
||||
rm -rf "$work_dir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "$work_dir"
|
||||
|
||||
echo Done
|
||||
|
||||
exit 0
|
||||
|
||||
# vim: set ts=2 sw=2 noet:
|
||||
|
||||
@@ -146,14 +146,13 @@ _pacman ()
|
||||
toparse="${a:2}"
|
||||
|
||||
case "${arg}" in
|
||||
-@(A|U|R|S|Q|h|V))
|
||||
-@(U|R|S|Q|h|V))
|
||||
op="${arg/-}"
|
||||
mod="${mod}${a:2}"
|
||||
;;
|
||||
--)
|
||||
arg="${a:2}"
|
||||
case "${arg}" in
|
||||
add) op="A" ;;
|
||||
remove) op="R" ;;
|
||||
upgrade) op="U" ;;
|
||||
query) op="Q" ;;
|
||||
@@ -177,7 +176,7 @@ _pacman ()
|
||||
changelog) mod="${mod}c" ;;
|
||||
deps) mod="${mod}d" ;;
|
||||
explicit) mod="${mod}e" ;;
|
||||
orphans) mod="${mod}t" ;;
|
||||
unrequired) mod="${mod}t" ;;
|
||||
foreign) mod="${mod}m" ;;
|
||||
owns) mod="${mod}o" ;;
|
||||
file) mod="${mod}p" ;;
|
||||
@@ -187,6 +186,7 @@ _pacman ()
|
||||
dbonly) mod="${mod}k" ;;
|
||||
nosave) mod="${mod}n" ;;
|
||||
recursive) mod="${mod}s" ;;
|
||||
unneeded) mod="${mod}u" ;;
|
||||
esac ;;
|
||||
*) toparse="${a}" ;;
|
||||
esac
|
||||
@@ -202,7 +202,6 @@ _pacman ()
|
||||
|
||||
if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=( $( compgen -W '\
|
||||
-A --add \
|
||||
-h --help \
|
||||
-Q --query \
|
||||
-R --remove \
|
||||
@@ -216,9 +215,10 @@ _pacman ()
|
||||
|
||||
if [[ "$cur" == -* ]]; then
|
||||
case "${op}" in
|
||||
A|U)
|
||||
U)
|
||||
COMPREPLY=( $( compgen -W '\
|
||||
--asdeps \
|
||||
--asexplicit \
|
||||
-d --nodeps \
|
||||
-f --force \
|
||||
-h --help \
|
||||
@@ -242,6 +242,7 @@ _pacman ()
|
||||
-k --dbonly \
|
||||
-n --nosave \
|
||||
-s --recursive \
|
||||
-u --unneeded \
|
||||
--config \
|
||||
--logfile \
|
||||
--noconfirm \
|
||||
@@ -257,9 +258,9 @@ _pacman ()
|
||||
S)
|
||||
COMPREPLY=( $( compgen -W '\
|
||||
--asdeps \
|
||||
--asexplicit \
|
||||
-c --clean \
|
||||
-d --nodeps \
|
||||
-e --dependsonly \
|
||||
-f --force \
|
||||
-g --groups \
|
||||
-h --help \
|
||||
@@ -298,7 +299,7 @@ _pacman ()
|
||||
-o --owns \
|
||||
-p --file \
|
||||
-s --search \
|
||||
-t --orphans \
|
||||
-t --unrequired \
|
||||
-u --upgrades \
|
||||
--config \
|
||||
--logfile \
|
||||
@@ -316,7 +317,7 @@ _pacman ()
|
||||
rem_selected
|
||||
else
|
||||
case "${op}" in
|
||||
A|U)
|
||||
U)
|
||||
COMPREPLY=( $( compgen -d -- "$cur" ) \
|
||||
$( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
|
||||
return 0
|
||||
|
||||
67
scripts/gensync.sh.in → contrib/gensync
Normal file → Executable file
67
scripts/gensync.sh.in → contrib/gensync
Normal file → Executable file
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# gensync
|
||||
# @configure_input@
|
||||
#
|
||||
# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
#
|
||||
@@ -19,39 +18,35 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# gettext initialization
|
||||
export TEXTDOMAIN='pacman'
|
||||
export TEXTDOMAINDIR='@localedir@'
|
||||
|
||||
myver='@PACKAGE_VERSION@'
|
||||
myver='3.1.1'
|
||||
|
||||
# functions
|
||||
|
||||
usage() {
|
||||
printf "gensync (pacman) %s\n\n" "$myver"
|
||||
printf "$(gettext "Usage: %s <root> <destfile> [package_directory]")\n\n" "$0"
|
||||
printf "$(gettext "\
|
||||
printf "Usage: %s <root> <destfile> [package_directory]\n\n" "$0"
|
||||
printf "\
|
||||
gensync will generate a sync database by reading all PKGBUILD files\n\
|
||||
from <root>. gensync builds the database in a temporary directory\n\
|
||||
and then compresses it to <destfile>.\n\n")"
|
||||
printf "$(gettext "\
|
||||
and then compresses it to <destfile>.\n\n"
|
||||
printf "\
|
||||
gensync will calculate md5sums of packages in the same directory as\n\
|
||||
<destfile>, unless an alternate [package_directory] is specified.\n\n")"
|
||||
printf "$(gettext "\
|
||||
<destfile>, unless an alternate [package_directory] is specified.\n\n"
|
||||
printf "\
|
||||
note: The <destfile> name is important. It must be of the form\n\
|
||||
{treename}.db.tar.gz where {treename} is the name of the custom\n\
|
||||
package repository you configured in /etc/pacman.conf. The\n\
|
||||
generated database must reside in the same directory as your\n\
|
||||
custom packages (also configured in /etc/pacman.conf)\n\n")"
|
||||
echo "$(gettext "Example: gensync /var/abs/local /home/mypkgs/custom.db.tar.gz")"
|
||||
custom packages (also configured in /etc/pacman.conf)\n\n"
|
||||
echo "Example: gensync /var/abs/local /home/mypkgs/custom.db.tar.gz"
|
||||
}
|
||||
|
||||
version() {
|
||||
printf "gensync (pacman) %s\n" "$myver"
|
||||
printf "$(gettext "\
|
||||
printf "\
|
||||
Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
|
||||
This is free software; see the source for copying conditions.\n\
|
||||
There is NO WARRANTY, to the extent permitted by law.\n")"
|
||||
There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
}
|
||||
|
||||
error () {
|
||||
@@ -64,17 +59,6 @@ die () {
|
||||
exit 1
|
||||
}
|
||||
|
||||
check_force () {
|
||||
local i
|
||||
for i in ${options[@]}; do
|
||||
local lc=$(echo $i | tr [:upper:] [:lower:])
|
||||
if [ "$lc" = "force" ]; then
|
||||
true
|
||||
fi
|
||||
done
|
||||
false
|
||||
}
|
||||
|
||||
# PROGRAM START
|
||||
|
||||
if [ "$1" = "-h" -o "$1" = "--help" ]; then
|
||||
@@ -93,10 +77,10 @@ if [ $# -lt 2 ]; then
|
||||
fi
|
||||
|
||||
# source system and user makepkg.conf
|
||||
if [ -r @sysconfdir@/makepkg.conf ]; then
|
||||
source @sysconfdir@/makepkg.conf
|
||||
if [ -r /etc/makepkg.conf ]; then
|
||||
source /etc/makepkg.conf
|
||||
else
|
||||
die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf"
|
||||
die "/etc/makepkg.conf not found. Cannot continue."
|
||||
fi
|
||||
|
||||
if [ -r ~/.makepkg.conf ]; then
|
||||
@@ -114,42 +98,37 @@ if [ "$3" != "" ]; then
|
||||
pkgdir="$3"
|
||||
fi
|
||||
|
||||
[ ! -d "$rootdir" ] && die "$(gettext "invalid root dir: %s")" $rootdir
|
||||
[ ! -d "$rootdir" ] && die "invalid root dir: $rootdir"
|
||||
|
||||
echo "$(gettext "gensync: building database entries, generating md5sums...")" >&2
|
||||
echo "gensync: building database entries, generating md5sums..." >&2
|
||||
cd "$destdir"
|
||||
|
||||
pkgs=""
|
||||
forcepkgs=""
|
||||
|
||||
for file in $(find "$rootdir"/* -name "$BUILDSCRIPT"); do
|
||||
unset pkgname pkgver pkgrel options
|
||||
|
||||
source $file || die "$(gettext "failed to parse %s")" $file
|
||||
source $file || die "failed to parse $file"
|
||||
if [ "$arch" = 'any' ]; then
|
||||
CARCH='any'
|
||||
fi
|
||||
if [ "$pkgdir" != "" ]; then
|
||||
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT"
|
||||
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
|
||||
else
|
||||
pkgfile="$destdir/$pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT"
|
||||
pkgfile="$destdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
|
||||
fi
|
||||
|
||||
if [ ! -f "$pkgfile" ]; then
|
||||
error "$(gettext "could not find %s-%s-%s-%s.%s - skipping")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
|
||||
error "could not find %s-%s-%s-%s%s - skipping" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
|
||||
else
|
||||
if check_force; then
|
||||
forcepkgs="$forcepkgs $pkgfile"
|
||||
else
|
||||
pkgs="$pkgs $pkgfile"
|
||||
fi
|
||||
pkgs="$pkgs $pkgfile"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$(gettext "creating repo DB...")"
|
||||
echo "creating repo DB..."
|
||||
|
||||
# we'll trim the output just a tad, as gensync may be used on large repos
|
||||
repo-add $destfile $pkgs --force $force_pkgs \
|
||||
repo-add $destfile $pkgs \
|
||||
| grep -e "package" -e "database"
|
||||
|
||||
# vim: set ts=2 sw=2 noet:
|
||||
@@ -20,7 +20,7 @@
|
||||
# Original http://phraktured.net/config/bin/pacdiff
|
||||
|
||||
diffprog=${DIFFPROG:-vimdiff}
|
||||
for x in $(find /etc/ -name *.pacnew -o -name *.pacorig -o -name *.pacsave)
|
||||
for x in $(find /etc/ -name "*.pacnew" -o -name "*.pacorig" -o -name "*.pacsave")
|
||||
do
|
||||
echo "File: ${x%.pac*}"
|
||||
chk="$(cmp $x ${x%.pac*})"
|
||||
|
||||
88
contrib/paclist
Executable file
88
contrib/paclist
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/perl
|
||||
# paclist - List all packages installed from a given repo
|
||||
#
|
||||
# Copyright (C) 2008 Dan McGee <dpmcgee@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $progname = "paclist";
|
||||
my $version = "1.0";
|
||||
|
||||
if ($#ARGV != 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {
|
||||
print "$progname - List all packages installed from a given repo\n";
|
||||
print "Usage: $progname <repo>\n";
|
||||
print "Example: $progname testing\n";
|
||||
if ($#ARGV != 0) {
|
||||
exit 1;
|
||||
}
|
||||
exit 0;
|
||||
}
|
||||
|
||||
if ( $ARGV[0] eq "--version" || $ARGV[0] eq "-v") {
|
||||
print "$progname version $version\n";
|
||||
print "Copyright (C) 2008 Dan McGee\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
# This hash table will be used to store pairs of ('name version', count) from
|
||||
# the return of both pacman -Sl <repo> and pacman -Q output. We then check to
|
||||
# see if a value was added twice (count = 2)- if so, we will print that package
|
||||
# as it is both in the repo we queried and installed on our local system.
|
||||
my %packages = ();
|
||||
my $output;
|
||||
|
||||
$output = `pacman -Sl $ARGV[0]`;
|
||||
if ($? != 0) {
|
||||
exit 1;
|
||||
}
|
||||
my @sync = split(/\n/, $output);
|
||||
# sample output from pacman -Sl:
|
||||
# testing foobar 1.0-1
|
||||
foreach $_ (@sync) {
|
||||
my @info = split(/ /);
|
||||
# we only want to store 'foobar 1.0-1' in our hash table
|
||||
my $pkg = $info[1] . " " . $info[2];
|
||||
$packages{$pkg}++;
|
||||
}
|
||||
|
||||
$output = `pacman -Q`;
|
||||
if ($? != 0) {
|
||||
exit 1;
|
||||
}
|
||||
# sample output from pacman -Q:
|
||||
# foobar 1.0-1
|
||||
my @local = split(/\n/, $output);
|
||||
foreach $_ (@local) {
|
||||
# store 'foobar 1.0-1' in our hash table
|
||||
$packages{$_}++;
|
||||
}
|
||||
|
||||
# run comparison check- if value was added twice, it was in the intersection
|
||||
my @intersection;
|
||||
foreach $_ (keys %packages) {
|
||||
if ($packages{$_} == 2) {
|
||||
push @{ \@intersection }, $_;
|
||||
}
|
||||
}
|
||||
|
||||
# print our intersection, and bask in the glory and speed of perl
|
||||
@intersection = sort @intersection;
|
||||
foreach $_ (@intersection) {
|
||||
print $_ . "\n";
|
||||
}
|
||||
|
||||
#vim: set noet:
|
||||
@@ -1,6 +1,9 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/perl
|
||||
# pacsearch - Adds color and install information to a 'pacman -Ss' search
|
||||
#
|
||||
# Copyright (C) 2008 Dan McGee <dpmcgee@gmail.com>
|
||||
#
|
||||
# Based off original shell script version:
|
||||
# Copyright (C) 2006-2007 Dan McGee <dpmcgee@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
@@ -18,72 +21,112 @@
|
||||
|
||||
#TODO: colors flag on commandline
|
||||
|
||||
readonly progname="pacsearch"
|
||||
readonly version="1.0"
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
readonly CLR1='\\\e[0;34m'
|
||||
readonly CLR2='\\\e[0;32m'
|
||||
readonly CLR3='\\\e[0;35m'
|
||||
readonly CLR4='\\\e[0;36m'
|
||||
readonly CLR5='\\\e[0;31m'
|
||||
readonly CLR6='\\\e[0;33m'
|
||||
readonly CLR7='\\\e[1;36m'
|
||||
readonly INST='\\\e[1;31m'
|
||||
readonly BASE='\\\e[0m'
|
||||
my $progname = "pacsearch";
|
||||
my $version = "2.0";
|
||||
|
||||
if [ "$1" = "--help" -o "$1" = "-h" ]; then
|
||||
echo "Usage: $progname <pattern>"
|
||||
echo "Ex: $progname ^gnome"
|
||||
exit 0
|
||||
fi
|
||||
if ($#ARGV lt 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {
|
||||
print "$progname - Add color and install information to a pacman -Ss search\n";
|
||||
print "Usage: $progname <pattern>\n";
|
||||
print "Example: $progname ^gnome\n";
|
||||
if ($#ARGV lt 0) {
|
||||
exit 1;
|
||||
}
|
||||
exit 0;
|
||||
}
|
||||
|
||||
if [ "$1" = "--version" -o "$1" = "-v" ]; then
|
||||
echo "$progname version $version"
|
||||
echo "Copyright (C) 2006-2007 Dan McGee"
|
||||
exit 0
|
||||
fi
|
||||
if ($ARGV[0] eq "--version" || $ARGV[0] eq "-v") {
|
||||
print "$progname version $version\n";
|
||||
print "Copyright (C) 2006-2008 Dan McGee\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
if [ -z "$1" -o "${1:0:1}" = "-" ]; then
|
||||
echo "Usage: $progname <pattern>"
|
||||
echo "Ex: $progname ^gnome"
|
||||
exit 1
|
||||
fi
|
||||
# define our colors to use when printing
|
||||
my $CLR1 = "\e[0;34m";
|
||||
my $CLR2 = "\e[0;32m";
|
||||
my $CLR3 = "\e[0;35m";
|
||||
my $CLR4 = "\e[0;36m";
|
||||
my $CLR5 = "\e[0;31m";
|
||||
my $CLR6 = "\e[0;33m";
|
||||
my $CLR7 = "\e[1;36m";
|
||||
my $INST = "\e[1;31m";
|
||||
my $BASE = "\e[0m";
|
||||
my $INSTMARK = $INST."***";
|
||||
|
||||
# Make two temp files and send output of commands to these files
|
||||
querydump=$(mktemp)
|
||||
pacman -Qs $1 > $querydump
|
||||
syncdump=$(mktemp)
|
||||
pacman -Ss $1 > $syncdump
|
||||
# color a "repo/pkgname pkgver" line based on the respository name
|
||||
sub to_color {
|
||||
my $line = shift;
|
||||
$line =~ s/(^core\/.*)/$CLR1$1$BASE/;
|
||||
$line =~ s/(^extra\/.*)/$CLR2$1$BASE/;
|
||||
$line =~ s/(^community\/.*)/$CLR3$1$BASE/;
|
||||
$line =~ s/(^testing\/.*)/$CLR4$1$BASE/;
|
||||
$line =~ s/(^unstable\/.*)/$CLR5$1$BASE/;
|
||||
$line =~ s/(^custom\/.*)/$CLR6$1$BASE/;
|
||||
$line =~ s/(^local\/.*)/$CLR7$1$BASE/;
|
||||
# any other unknown repository
|
||||
$line =~ s/(^[\w-]*\/.*)/$CLR6$1$BASE/;
|
||||
return $line;
|
||||
}
|
||||
|
||||
# Strip descriptions and 'local/' from -Qs query
|
||||
instpkg=$(mktemp)
|
||||
egrep '^[^ ]' $querydump | sed -e 's@^local/@@' > $instpkg
|
||||
my %allpkgs = ();
|
||||
|
||||
# Add pkgs not in sync db, mark pkgs that are installed
|
||||
cat $instpkg | while read -r pkg; do
|
||||
if [ -z "$(grep "$pkg" $syncdump)" ]; then
|
||||
# grep package name; pipe to another grep that prints at most one
|
||||
# line starting with 'local/', allows for comments >1 line
|
||||
grep -A10 "$pkg" $querydump | grep -A10 -m1 "local/" >> $syncdump
|
||||
fi
|
||||
sed -i "s@^\(.\+/$pkg\)@\***\1@" $syncdump
|
||||
done
|
||||
my $syncout = `pacman -Ss '@ARGV'`;
|
||||
# split each sync search entry into its own array entry
|
||||
my @syncpkgs = split(/\n^(?=\w)/m, $syncout);
|
||||
# remove the extra \n from the last desc entry
|
||||
if ($#syncpkgs >= 0) {
|
||||
chomp($syncpkgs[$#syncpkgs]);
|
||||
}
|
||||
|
||||
# Print colorized package list and descriptions to screen
|
||||
echo -e "$(sed -r \
|
||||
-e "s@core/.*@$CLR1&$BASE@" \
|
||||
-e "s@extra/.*@$CLR2&$BASE@" \
|
||||
-e "s@community/.*@$CLR3&$BASE@" \
|
||||
-e "s@testing/.*@$CLR4&$BASE@" \
|
||||
-e "s@unstable/.*@$CLR5&$BASE@" \
|
||||
-e "s@custom/.*@$CLR6&$BASE@" \
|
||||
-e "s@local/.*@$CLR7&$BASE@" \
|
||||
-e "s@(^|\*\*\*)([[:alnum:]]*/.* .*)@\1$CLR6\2$BASE@" \
|
||||
-e "s@\*\*\*@$INST&@" \
|
||||
< $syncdump )"
|
||||
echo -en "\e[0m"
|
||||
# counter var for packages, used here and in the query loop too
|
||||
my $cnt = 0;
|
||||
foreach $_ (@syncpkgs) {
|
||||
# we grab 3 fields here: repo, name/ver, and desc
|
||||
my @pkgfields = /^(.*?)\/(.*?)\n(.*)$/s;
|
||||
# add a fourth field that will indicate install status
|
||||
push (@pkgfields, "");
|
||||
# add a fifth field that indicates original order
|
||||
push (@pkgfields, $cnt++);
|
||||
# add each sync pkg by name/ver to a hash table for quick lookup
|
||||
$allpkgs{$pkgfields[1]} = [ @pkgfields ];
|
||||
}
|
||||
|
||||
rm $querydump
|
||||
rm $syncdump
|
||||
rm $instpkg
|
||||
my $queryout = `pacman -Qs '@ARGV'`;
|
||||
# split each querysearch entry into its own array entry
|
||||
my @querypkgs = split(/\n^(?=\w)/m, $queryout);
|
||||
# remove the extra \n from the last desc entry
|
||||
if ($#querypkgs >= 0) {
|
||||
chomp ($querypkgs[$#querypkgs]);
|
||||
}
|
||||
|
||||
foreach $_ (@querypkgs) {
|
||||
# we grab 3 fields here: repo, name/ver, and desc
|
||||
my @pkgfields = /^(.*?)\/(.*?)\n(.*)$/s;
|
||||
# check if the package was listed in the sync out
|
||||
# if it is we want to mark it with a *** marker
|
||||
if (exists $allpkgs{$pkgfields[1]}) {
|
||||
# mark it in our fourth field as installed
|
||||
@{ $allpkgs{$pkgfields[1]} }[3] = $INSTMARK;
|
||||
} else {
|
||||
# add a fourth field that will indicate install status
|
||||
push (@pkgfields, $INSTMARK);
|
||||
# add a fifth field that indicates original order (after sync)
|
||||
push (@pkgfields, $cnt++);
|
||||
# add our local-only package to the hash
|
||||
$allpkgs{$pkgfields[1]} = [ @pkgfields ];
|
||||
}
|
||||
}
|
||||
|
||||
# sort by original order (the fifth field) and print
|
||||
foreach $_ ( sort{ @{$allpkgs{$a}}[4] <=> @{$allpkgs{$b}}[4] } keys %allpkgs) {
|
||||
my @v = @{$allpkgs{$_}};
|
||||
my $line = "$v[0]/$v[1]";
|
||||
$line = to_color($line);
|
||||
# print install marker + colorized "repo/pkgname pkgver" string
|
||||
print "$v[3]$line\n";
|
||||
print "$v[2]\n";
|
||||
}
|
||||
|
||||
#vim: set noet:
|
||||
|
||||
300
contrib/pactree
Executable file
300
contrib/pactree
Executable file
@@ -0,0 +1,300 @@
|
||||
#!/bin/bash
|
||||
# pactree : a simple dependency tree viewer
|
||||
#
|
||||
# Copyright (C) 2008 Carlo "carlocci" Bersani <carlocci@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Original http://carlocci.ngi.it/arch/pactree
|
||||
# Credit to scj for the graphviz idea
|
||||
|
||||
# set the colors
|
||||
branch1_color="\033[0;33m" #Brown
|
||||
branch2_color="\033[0;37m" #Gray
|
||||
leaf_color="\033[1;32m" #Light green
|
||||
leaf2_color="\033[0;32m" #Green
|
||||
|
||||
# set the separators
|
||||
separator=" "
|
||||
branch_tip1="|--"
|
||||
branch_tip2="+--"
|
||||
provides="provides "
|
||||
|
||||
# set the graphviz options
|
||||
# http://www.graphviz.org/doc/info/output.html for available output formats
|
||||
# http://www.graphviz.org/doc/info/colors.html for available colors
|
||||
gformat="png" #output format
|
||||
start_color="red" #START color
|
||||
nodes_color="green" #color of the nodes
|
||||
arrow1_color="chocolate4" #color of the normal arrow
|
||||
arrow2_color="grey" #color of the "provided by" headless arrow
|
||||
|
||||
readonly prog_name="pactree"
|
||||
readonly prog_ver="0.2"
|
||||
|
||||
_usage(){
|
||||
echo "This program generates the dependency tree of an installed package"
|
||||
echo "Usage: $prog_name [OPTIONS] <installed packages>"
|
||||
echo
|
||||
echo " OPTIONS:"
|
||||
echo " -c, --color Enable color output"
|
||||
echo " -d, --depth INT Limit the shown dependencies depth"
|
||||
echo " -g, --graph Use graphviz to make an image of the tree"
|
||||
echo " -l, --linear Enable linear output"
|
||||
echo " -s, --silent Shh, let me hear those errors!"
|
||||
echo " -u, --unique Print the dependency list with no duplicates"
|
||||
echo
|
||||
echo " -h, --help Print this help message"
|
||||
echo " -v, --version Print the program name and version"
|
||||
echo
|
||||
echo "Example: $prog_name -c -d 2 readline"
|
||||
}
|
||||
|
||||
_version(){
|
||||
echo "$prog_name version $prog_ver"
|
||||
echo "Copyright (C) 2008 Carlo \"carlocci\" Bersani <carlocci@gmail.com>"
|
||||
}
|
||||
# end of the friendliness
|
||||
|
||||
|
||||
# grab a field from the database: $1=path/to/file, $2=field to grab
|
||||
_grabfield(){
|
||||
for line in $(cat "$1" 2>/dev/null ); do
|
||||
if [ -z "$line" ]; then
|
||||
continue;
|
||||
fi;
|
||||
if [[ "$line" =~ %[A-Z]*% ]]; then
|
||||
current="$line"
|
||||
continue;
|
||||
fi;
|
||||
if [ "$current" = "$2" ]; then
|
||||
echo "$line"
|
||||
fi;
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# find a dep in the db: $1=dep, $2=field, $3=dbfile, ret=file list
|
||||
_finddep(){
|
||||
for line in $(awk 'BEGIN{RS=""}
|
||||
{
|
||||
if ($1=="'"$2"'"){
|
||||
for (i=2 ; i<=NF ; ++i){
|
||||
if ($i ~ /^'"$1"'([<>=]+.*|)$/ ){
|
||||
print FILENAME}
|
||||
}
|
||||
}
|
||||
}' $(find $pac_db -name $3)); do
|
||||
echo "${line%/*}"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# Recursive function: does all of the work, pays all of the taxes #
|
||||
_tree(){
|
||||
pkg_name="$1"
|
||||
pkg_dirs="$(echo $pac_db/$pkg_name-[0-9]*)"
|
||||
|
||||
# Is $pkg_name real or provided?
|
||||
[ ! -d "$pkg_dirs" ] && pkg_dirs="$(_finddep $pkg_name %PROVIDES% depends)"
|
||||
|
||||
for pkg_dir in $pkg_dirs ; do
|
||||
spaces="$2"
|
||||
unset provided
|
||||
branch_tip="$branch_tip1"
|
||||
branch_color="$branch1_color"
|
||||
pkg_name="$(_grabfield "$pkg_dir/desc" %NAME%)"
|
||||
if [ ! "$pkg_name" = "$1" ]; then
|
||||
provided="$leaf2_color $provides$leaf_color$1"
|
||||
branch_tip="$branch_tip2"
|
||||
branch_color="$branch2_color"
|
||||
if [ $graphviz -eq 1 ] && [[ ! "${dep_list[@]}" =~ _$1_ ]] && [ $spaces -ne $((max_depth+1)) ]; then
|
||||
echo "\"$1\" -> \"$pkg_name\" [arrowhead=none, color=$arrow2_color];"
|
||||
dep_list=( "${dep_list[@]}" "_$1_" )
|
||||
_tree "$pkg_name" $((spaces+1))
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
# Generate the spacer
|
||||
spacer=""
|
||||
for each in $(seq 1 $spaces); do
|
||||
spacer="$spacer$separator"
|
||||
done
|
||||
spacer="$spacer$branch_tip"
|
||||
|
||||
[ $silent -ne 1 ] && echo -e "$branch_color$spacer$leaf_color$pkg_name$provided"
|
||||
|
||||
[ ! -d "$pkg_dir" ] && echo "No $pkg_name in the database (inconsistent database?)" >&2
|
||||
|
||||
if [[ ! " ${dep_list[@]} " =~ " $pkg_name " ]] && [ $spaces -ne $max_depth ]; then
|
||||
dep_list=( "${dep_list[@]}" "$pkg_name" )
|
||||
for dep_pkg in $(_grabfield "$pkg_dir/depends" %DEPENDS%); do
|
||||
spaces=$2 #Bash scoping ;_;
|
||||
if [ $graphviz -eq 1 ]; then
|
||||
echo "\"$1\" -> \"${dep_pkg%%[<>=]*}\" [color=$arrow1_color];"
|
||||
fi
|
||||
_tree "${dep_pkg%%[<>=]*}" $((spaces+1))
|
||||
done
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# Main program: gets all of the money, pays none of the taxes
|
||||
|
||||
# Command line parameters parser
|
||||
if [ $# -eq 0 ]; then
|
||||
_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
options=( "$@" )
|
||||
len_options=${#options[@]}
|
||||
for (( n=0 ; n < $len_options ; n++ )); do
|
||||
if [ "${options[$n]}" = "--" ]; then
|
||||
unset options[$n]
|
||||
break
|
||||
fi
|
||||
if [ "${options[$n]}" = "-h" -o "${options[$n]}" = "--help" ]; then
|
||||
_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "${options[$n]}" = "-v" -o "${options[$n]}" = "--version" ]; then
|
||||
_version
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "${options[$n]}" = "-l" -o "${options[$n]}" = "--linear" ]; then
|
||||
unset options[$n]
|
||||
linear=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${options[$n]}" = "-s" -o "${options[$n]}" = "--silent" ]; then
|
||||
unset options[$n]
|
||||
silent=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${options[$n]}" = "-u" -o "${options[$n]}" = "--unique" ]; then
|
||||
unset options[$n]
|
||||
silent=1
|
||||
nodup=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${options[$n]}" = "-g" -o "${options[$n]}" = "--graph" ]; then
|
||||
unset options[$n]
|
||||
graphviz=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${options[$n]}" = "-c" -o "${options[$n]}" = "--color" ]; then
|
||||
unset options[$n]
|
||||
colored=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "${options[$n]}" =~ -d[[:digit:]]+ || "${options[$n]}" == "--depth" ]]; then
|
||||
if [[ "${options[$n]#-d}" =~ [[:digit:]]+ ]]; then
|
||||
max_depth="${options[$n]#-d}"
|
||||
elif [[ ${options[$((n+1))]} =~ [[:digit:]]+ ]]; then
|
||||
max_depth="${options[$((n+1))]}"
|
||||
unset options[$((n+1))]
|
||||
((++n))
|
||||
fi
|
||||
unset options[$n]
|
||||
continue
|
||||
fi
|
||||
done
|
||||
# End of the dumb command line parser
|
||||
|
||||
# Env
|
||||
colored=${colored:-0}
|
||||
max_depth=${max_depth:--10}
|
||||
linear=${linear:-0}
|
||||
silent=${silent:-0}
|
||||
nodup=${nodup:-0}
|
||||
graphviz=${graphviz:-0}
|
||||
|
||||
if [ $colored -ne 1 ]; then
|
||||
unset branch1_color
|
||||
unset leaf_color
|
||||
unset leaf2_color
|
||||
unset branch2_color
|
||||
fi
|
||||
|
||||
if [ $linear -eq 1 ]; then
|
||||
unset separator
|
||||
unset branch_tip1
|
||||
unset branch_tip2
|
||||
unset provides
|
||||
fi
|
||||
|
||||
if [ $graphviz -eq 1 ]; then
|
||||
silent=1
|
||||
nodup=0
|
||||
if [ ! -f /usr/bin/dot ]; then
|
||||
echo "ERROR: package graphviz is not installed"
|
||||
echo " Run pacman -S graphviz to install it"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -r /etc/pacman.conf ]; then
|
||||
echo "ERROR: unable to read /etc/pacman.conf"
|
||||
exit 1
|
||||
else
|
||||
eval $(awk '/DBPath/ {print $1$2$3}' /etc/pacman.conf)
|
||||
fi
|
||||
|
||||
pac_db="${DBPath:-/var/lib/pacman}/local"
|
||||
|
||||
if [ ! -d "$pac_db" ] ; then
|
||||
echo "ERROR: pacman database directory ${pac_db} not found"
|
||||
exit 1
|
||||
fi
|
||||
# Env End
|
||||
|
||||
|
||||
# Program starts
|
||||
_main(){
|
||||
for pkg_name in ${options[@]} ; do
|
||||
[ $graphviz -eq 1 ] && echo -e "\"START\" -> \"$pkg_name\" ;"
|
||||
_tree "$pkg_name" 0
|
||||
if [ $nodup -eq 1 ]; then
|
||||
for pkg_tree in ${dep_list[@]} ; do
|
||||
echo "$pkg_tree"
|
||||
done
|
||||
fi
|
||||
done
|
||||
if [ $silent -eq 0 ]; then
|
||||
echo -ne '\033[0m' # return colors to normal?
|
||||
echo -ne '\033[?25h' #return cursor to normal?
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if [ $graphviz -eq 1 ]; then
|
||||
root_pkgs="${options[@]}"
|
||||
# Uncomment for the "generated by pactree" node in graphviz
|
||||
#advert="xyz [height=0.07, fontsize=8.0, label=\"GENERATED WITH PACTREE\",shape=box,color="black",style=filled,fontcolor="white"];\n"
|
||||
|
||||
echo -e "digraph G { START [color=$start_color, style=filled];\n node [style=filled, color=$nodes_color];\n$(_main)\n$advert}" | dot -T$gformat -o "${root_pkgs// /_}.deps.$gformat"
|
||||
else _main
|
||||
fi
|
||||
|
||||
# vim: set ts=2 sw=2 noet:
|
||||
@@ -1,77 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# re-pacman: regenerate a pacman package based on installed files and the
|
||||
# pacman database entries. Useful for reuse, or possible config file
|
||||
# extension
|
||||
#
|
||||
# Copyright (c) 2006 Aaron Griffin <aaron@archlinux.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
#TODO
|
||||
# * Check for md5 changes in backup lines and change pkgrel
|
||||
|
||||
pacinfo () {
|
||||
[ $# -ne 2 ] && return 1
|
||||
#use echo to strip spaces
|
||||
echo $(pacman -Qi ${1} | grep "${2}" | cut -d: -f2-)
|
||||
}
|
||||
|
||||
make_pkginfo () {
|
||||
echo "# Generated by re-pacman 1.0.0"
|
||||
echo "# On $(date)"
|
||||
echo "pkgname =$(pacinfo ${1} Name)"
|
||||
echo "pkgver =$(pacinfo ${1} Version)"
|
||||
echo "pkgdesc =$(pacinfo ${1} Description)"
|
||||
echo "url =$(pacinfo ${1} URL)"
|
||||
echo "builddate =$(pacinfo ${1} 'Build Date')"
|
||||
echo "packager =$(pacinfo ${1} Packager)"
|
||||
echo "size =$(pacinfo ${1} Size)"
|
||||
echo "arch =$(pacinfo ${1} Architecture)"
|
||||
deps=$(pacinfo ${1} 'Depends On')
|
||||
for d in ${deps}; do
|
||||
echo "depend = ${d}"
|
||||
done
|
||||
}
|
||||
|
||||
LANG="POSIX"
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "usage: re-pacman <installed package name>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ver=$(pacinfo ${1} Version)
|
||||
if [ "x${ver}" = "x" ]; then
|
||||
echo "Package '${1}' not found, aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ":: Cleaning up old files"
|
||||
rm -f .PKGINFO "${1}-${ver}.pkg.tar.gz"
|
||||
|
||||
echo ":: Building PKGINFO"
|
||||
make_pkginfo ${1} > .PKGINFO
|
||||
|
||||
flist=".PKGINFO"
|
||||
flist="${flist} $(pacman -Ql ${1} | sed 's|\w* \(.*\)|/\1|g' | grep -v '/$')"
|
||||
|
||||
echo ":: Building final package tarball"
|
||||
echo ${flist} | tr ' ' '\n' | tar czf "${1}-${ver}.pkg.tar.gz" -T - 2>/dev/null
|
||||
|
||||
rm -f .PKGINFO
|
||||
echo ":: Package '${1}-${ver}.pkg.tar.gz' is now ready for installation"
|
||||
|
||||
# vim: set ts=2 sw=2 noet:
|
||||
73
scripts/updatesync.sh.in → contrib/updatesync
Normal file → Executable file
73
scripts/updatesync.sh.in → contrib/updatesync
Normal file → Executable file
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# updatesync
|
||||
# @configure_input@
|
||||
#
|
||||
# Copyright (c) 2004 by Jason Chu <jason@archlinux.org>
|
||||
# Derived from gensync (c) 2002-2006 Judd Vinet <jvinet@zeroflux.org>
|
||||
@@ -20,37 +19,33 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# gettext initialization
|
||||
export TEXTDOMAIN='pacman'
|
||||
export TEXTDOMAINDIR='@localedir@'
|
||||
|
||||
myver='@PACKAGE_VERSION@'
|
||||
myver='3.1.1'
|
||||
|
||||
# functions
|
||||
|
||||
usage() {
|
||||
printf "updatesync (pacman) %s\n\n" "$myver"
|
||||
printf "$(gettext "Usage: %s <action> <destfile> <option> [package_directory]")\n\n" "$0"
|
||||
printf "$(gettext "\
|
||||
printf "Usage: %s <action> <destfile> <option> [package_directory]\n\n" "$0"
|
||||
printf "\
|
||||
updatesync will update a sync database by reading a PKGBUILD and\n\
|
||||
modifying the destfile. updatesync updates the database in a temporary\n\
|
||||
directory and then compresses it to <destfile>.\n\n")"
|
||||
printf "$(gettext "There are two types of actions:\n\n")"
|
||||
printf "$(gettext "upd - Will update a package's entry or create it if it doesn't exist.\n It takes the package's PKGBUILD as an option.\n")"
|
||||
printf "$(gettext "del - Will remove a package's entry from the db. It takes the package's\n name as an option.\n")"
|
||||
directory and then compresses it to <destfile>.\n\n"
|
||||
printf "There are two types of actions:\n\n"
|
||||
printf "upd - Will update a package's entry or create it if it doesn't exist.\n It takes the package's PKGBUILD as an option.\n"
|
||||
printf "del - Will remove a package's entry from the db. It takes the package's\n name as an option.\n"
|
||||
echo
|
||||
printf "$(gettext "\
|
||||
printf "\
|
||||
updatesync will calculate md5sums of packages in the same directory as\n\
|
||||
<destfile>, unless an alternate [package_directory] is specified.\n\n")"
|
||||
echo "$(gettext "Example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD")"
|
||||
<destfile>, unless an alternate [package_directory] is specified.\n\n"
|
||||
echo "Example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD"
|
||||
}
|
||||
|
||||
version() {
|
||||
printf "updatesync (pacman) %s\n" "$myver"
|
||||
printf "$(gettext "\
|
||||
printf "\
|
||||
Copyright (C) 2004 Jason Chu <jason@archlinux.org>.\n\n\
|
||||
This is free software; see the source for copying conditions.\n\
|
||||
There is NO WARRANTY, to the extent permitted by law.\n")"
|
||||
There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
}
|
||||
|
||||
error () {
|
||||
@@ -63,17 +58,6 @@ die () {
|
||||
exit 1
|
||||
}
|
||||
|
||||
check_force () {
|
||||
local i
|
||||
for i in ${options[@]}; do
|
||||
local lc=$(echo $i | tr [:upper:] [:lower:])
|
||||
if [ "$lc" = "force" ]; then
|
||||
true
|
||||
fi
|
||||
done
|
||||
false
|
||||
}
|
||||
|
||||
# PROGRAM START
|
||||
|
||||
if [ "$1" = "-h" -o "$1" = "--help" ]; then
|
||||
@@ -92,10 +76,10 @@ if [ $# -lt 3 ]; then
|
||||
fi
|
||||
|
||||
# source system and user makepkg.conf
|
||||
if [ -r @sysconfdir@/makepkg.conf ]; then
|
||||
source @sysconfdir@/makepkg.conf
|
||||
if [ -r /etc/makepkg.conf ]; then
|
||||
source /etc/makepkg.conf
|
||||
else
|
||||
die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf"
|
||||
die "/etc/makepkg.conf not found. Cannot continue."
|
||||
fi
|
||||
|
||||
if [ -r ~/.makepkg.conf ]; then
|
||||
@@ -114,37 +98,36 @@ pkgdir="$(pwd)"
|
||||
if [ "$4" != "" ]; then
|
||||
pkgdir="$4"
|
||||
fi
|
||||
opt_force=""
|
||||
|
||||
if [ ! -f "$option" ]; then
|
||||
die "$(gettext "%s not found")" $option
|
||||
fi
|
||||
|
||||
if [ "$action" = "upd" ]; then # INSERT / UPDATE
|
||||
if [ ! -f "$option" ]; then
|
||||
die "$option not found"
|
||||
fi
|
||||
|
||||
unset pkgname pkgver pkgrel options
|
||||
|
||||
source $option || die "$(gettext "failed to parse %s")" $option
|
||||
source $option || die "failed to parse $option"
|
||||
if [ "$arch" = 'any' ]; then
|
||||
CARCH='any'
|
||||
fi
|
||||
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT"
|
||||
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
|
||||
|
||||
if [ ! -f "$pkgfile" ]; then
|
||||
die "$(gettext "could not find %s-%s-%s-%s.%s - aborting")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
|
||||
die "could not find %s-%s-%s-%s%s - aborting" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
|
||||
fi
|
||||
|
||||
if check_force; then
|
||||
opt_force="--force"
|
||||
fi
|
||||
|
||||
repo-add "$pkgdb" $opt_force "$pkgfile"
|
||||
repo-add "$pkgdb" "$pkgfile"
|
||||
else # DELETE
|
||||
fname="$(basename $option)"
|
||||
if [ "$fname" = "PKGBUILD" ]; then
|
||||
if [ ! -f "$option" ]; then
|
||||
die "%s not found" $option
|
||||
fi
|
||||
|
||||
unset pkgname pkgver pkgrel options
|
||||
source $option
|
||||
else
|
||||
pkgname=$1
|
||||
pkgname=$option
|
||||
fi
|
||||
|
||||
repo-remove "$pkgdb" "$pkgname"
|
||||
@@ -1,96 +0,0 @@
|
||||
This is a project file for the vim-project
|
||||
plugin. I like it, so decided to contribute
|
||||
this to the main repo.
|
||||
$ pacman -S vim-project
|
||||
change the pacman= path below
|
||||
$ vim
|
||||
:Project vimproject
|
||||
|
||||
pacman=~/devel/pacman-lib CD=. flags=S {
|
||||
Makefile.am
|
||||
configure.ac
|
||||
libalpm=lib/libalpm/ filter="*.c *.h *.am"{
|
||||
add.c
|
||||
alpm.c
|
||||
alpm_list.c
|
||||
backup.c
|
||||
be_files.c
|
||||
cache.c
|
||||
conflict.c
|
||||
db.c
|
||||
deps.c
|
||||
error.c
|
||||
group.c
|
||||
handle.c
|
||||
log.c
|
||||
md5.c
|
||||
package.c
|
||||
provide.c
|
||||
remove.c
|
||||
server.c
|
||||
sync.c
|
||||
trans.c
|
||||
util.c
|
||||
add.h
|
||||
alpm.h
|
||||
alpm_list.h
|
||||
backup.h
|
||||
cache.h
|
||||
conflict.h
|
||||
db.h
|
||||
deps.h
|
||||
error.h
|
||||
group.h
|
||||
handle.h
|
||||
log.h
|
||||
md5.h
|
||||
package.h
|
||||
provide.h
|
||||
remove.h
|
||||
server.h
|
||||
sync.h
|
||||
trans.h
|
||||
util.h
|
||||
Makefile.am
|
||||
Makefile.in
|
||||
}
|
||||
pacman=src/pacman/ filter="*.c *.h *.am" {
|
||||
add.c
|
||||
conf.c
|
||||
deptest.c
|
||||
downloadprog.c
|
||||
log.c
|
||||
package.c
|
||||
pacman.c
|
||||
query.c
|
||||
remove.c
|
||||
sync.c
|
||||
trans.c
|
||||
upgrade.c
|
||||
util.c
|
||||
add.h
|
||||
conf.h
|
||||
deptest.h
|
||||
downloadprog.h
|
||||
log.h
|
||||
package.h
|
||||
query.h
|
||||
remove.h
|
||||
sync.h
|
||||
trans.h
|
||||
upgrade.h
|
||||
util.h
|
||||
Makefile.am
|
||||
}
|
||||
utils=src/util filter="*.c *.h *.am" {
|
||||
testpkg.c
|
||||
vercmp.c
|
||||
Makefile.am
|
||||
}
|
||||
contrib=contrib CD=. {
|
||||
bash_completion
|
||||
pacsearch
|
||||
vimproject
|
||||
zsh_completion
|
||||
}
|
||||
}
|
||||
25
contrib/vimprojects
Normal file
25
contrib/vimprojects
Normal file
@@ -0,0 +1,25 @@
|
||||
This is a project file
|
||||
for the vim-project plugin.
|
||||
Save it as ~/.vimprojects
|
||||
|
||||
$ pacman -S vim-project
|
||||
change the pacman path below
|
||||
$ vim
|
||||
:Project
|
||||
|
||||
Press \r in the project view
|
||||
on a project name to generate
|
||||
the list of files
|
||||
|
||||
pacman=~/devel/pacman/ CD=. filter="*.ac *.am" flags=S {
|
||||
libalpm=lib/libalpm/ filter="*.c *.h *.am" {
|
||||
}
|
||||
pacman=src/pacman/ filter="*.c *.h *.am" {
|
||||
}
|
||||
scripts=scripts/ filter="*.sh.in *.py.in *.am" {
|
||||
}
|
||||
utils=src/util filter="*.c *.h *.am" {
|
||||
}
|
||||
contrib=contrib CD=. {
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@ typeset -A opt_args
|
||||
|
||||
# options for passing to _arguments: main pacman commands
|
||||
_pacman_opts_commands=(
|
||||
'-A[Add a package to the system]'
|
||||
'-Q[Query the package database]'
|
||||
'-R[Remove a package from the system]'
|
||||
'-S[Synchronize packages]'
|
||||
@@ -29,7 +28,7 @@ _pacman_opts_common=(
|
||||
'--noscriptlet[Do not execute the install scriptlet if one exists]'
|
||||
)
|
||||
|
||||
# options for passing to _arguments: options for --add and --update commands
|
||||
# options for passing to _arguments: options for --upgrade commands
|
||||
_pacman_opts_pkgfile=(
|
||||
'-d[Skip dependency checks]'
|
||||
'-f[Overwrite conflicting files]'
|
||||
@@ -38,7 +37,6 @@ _pacman_opts_pkgfile=(
|
||||
|
||||
# options for passing to _arguments: subactions for --query command
|
||||
_pacman_opts_query_actions=(
|
||||
'-e[List orphaned packages]:*:orphans:->query_orphans'
|
||||
'-g[View all members of a package group]:*:package groups:->query_group'
|
||||
'-o[Query the package that owns a file]:file:_files'
|
||||
'-p[Package file to query]:*:package file:->query_file'
|
||||
@@ -50,7 +48,6 @@ _pacman_opts_query_modifiers=(
|
||||
'-c[List package changelog]'
|
||||
'-d[List packages installed as dependencies]'
|
||||
'-e[List packages explicitly installed]'
|
||||
'-g[List all members of a package group]'
|
||||
'-i[View package information]'
|
||||
'-ii[View package information including backup files]'
|
||||
'-l[List package contents]'
|
||||
@@ -80,7 +77,6 @@ _pacman_opts_sync_actions=(
|
||||
# options for passing to _arguments: options for --sync command
|
||||
_pacman_opts_sync_modifiers=(
|
||||
'-d[Skip dependency checks]'
|
||||
'-e[Install dependencies only]'
|
||||
'-f[Overwrite conflicting files]'
|
||||
'-i[View package information]'
|
||||
'-l[List all packages in a repository]'
|
||||
@@ -88,18 +84,14 @@ _pacman_opts_sync_modifiers=(
|
||||
'-u[Upgrade all out-of-date packages]'
|
||||
'-w[Download packages only]'
|
||||
'-y[Download fresh package databases]'
|
||||
'*--ignore[Ignore a package upgrade]:package:_pacman_completions_installed_packages'
|
||||
'*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups'
|
||||
'*--ignore[Ignore a package upgrade]:package:
|
||||
_pacman_completions_all_packages'
|
||||
'*--ignoregroup[Ignore a group upgrade]:package group:
|
||||
_pacman_completions_all_groups'
|
||||
'--asdeps[Install packages as non-explicitly installed]'
|
||||
'--asexplicit[Install packages as explicitly installed]'
|
||||
)
|
||||
|
||||
# handles --action subcommand
|
||||
_pacman_action_add() {
|
||||
_arguments -s : \
|
||||
"$_pacman_opts_common[@]" \
|
||||
"$_pacman_opts_pkgfile[@]"
|
||||
}
|
||||
|
||||
# handles --help subcommand
|
||||
_pacman_action_help() {
|
||||
_arguments -s : \
|
||||
@@ -135,11 +127,6 @@ _pacman_action_query() {
|
||||
"$_pacman_opts_query_modifiers[@]" \
|
||||
'*:groups:_pacman_completions_installed_groups'
|
||||
;;
|
||||
query_orphans)
|
||||
_arguments -s : \
|
||||
"$_pacman_opts_common[@]" \
|
||||
"$_pacman_opts_query_modifiers[@]"
|
||||
;;
|
||||
query_owner)
|
||||
_arguments -s : \
|
||||
"$_pacman_opts_common[@]" \
|
||||
@@ -294,26 +281,14 @@ _pacman_get_command() {
|
||||
|
||||
# main dispatcher
|
||||
_pacman() {
|
||||
# First check if --ignoregroup was the last command given. If so, complete
|
||||
# all groups.
|
||||
if [ "$words[-2]" = "--ignoregroup" ]; then
|
||||
_arguments -s : \
|
||||
"$_pacman_opts_common[@]" \
|
||||
"$_pacman_opts_sync_modifiers[@]" \
|
||||
'*:package group:_pacman_completions_all_groups'
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Otherwise, complete on the given command.
|
||||
case $words[2] in
|
||||
-A*) _pacman_action_add ;;
|
||||
-Q*g*) # ipkg groups
|
||||
_arguments -s : \
|
||||
"$_pacman_opts_common[@]" \
|
||||
"$_pacman_opts_query_modifiers[@]" \
|
||||
'*:groups:_pacman_completions_installed_groups'
|
||||
;;
|
||||
-Q*o*) # file *.pkg.tar.gz
|
||||
-Q*o*) # file
|
||||
_arguments -s : \
|
||||
"$_pacman_opts_common[@]" \
|
||||
"$_pacman_opts_query_modifiers[@]" \
|
||||
|
||||
20
doc/Doxyfile
20
doc/Doxyfile
@@ -1,4 +1,4 @@
|
||||
# Doxyfile 1.5.2
|
||||
# Doxyfile 1.5.5
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
@@ -28,7 +28,8 @@ FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
QT_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
@@ -37,10 +38,14 @@ TAB_SIZE = 4
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
CPP_CLI_SUPPORT = NO
|
||||
SIP_SUPPORT = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SUBGROUPING = YES
|
||||
TYPEDEF_HIDES_STRUCT = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -49,6 +54,7 @@ EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
@@ -60,6 +66,7 @@ SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_GROUP_NAMES = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
@@ -126,6 +133,10 @@ HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
GENERATE_DOCSET = NO
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
DOCSET_BUNDLE_ID = org.doxygen.Project
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
@@ -194,7 +205,9 @@ EXPAND_ONLY_PREDEF = YES
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH = ../..
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED = HAVE_CONFIG_H= SYMHIDDEN= SYMEXPORT=
|
||||
PREDEFINED = HAVE_CONFIG_H= \
|
||||
SYMHIDDEN= \
|
||||
SYMEXPORT=
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -227,6 +240,7 @@ DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 3
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
|
||||
@@ -15,6 +15,7 @@ ASCIIDOC_MANS = \
|
||||
DOXYGEN_MANS = $(wildcard man3/*.3)
|
||||
|
||||
EXTRA_DIST = \
|
||||
asciidoc.conf \
|
||||
pacman.8.txt \
|
||||
makepkg.8.txt \
|
||||
repo-add.8.txt \
|
||||
@@ -29,8 +30,19 @@ EXTRA_DIST = \
|
||||
$(DOXYGEN_MANS)
|
||||
|
||||
# Files that should be removed, but which Automake does not know.
|
||||
MOSTLYCLEANFILES = *.xml
|
||||
MAINTAINERCLEANFILES = $(ASCIIDOC_MANS)
|
||||
MOSTLYCLEANFILES = *.xml $(ASCIIDOC_MANS)
|
||||
|
||||
# Ensure manpages are fresh when building a dist tarball
|
||||
dist-hook:
|
||||
$(MAKE) $(AM_MAKEFLAGS) clean
|
||||
$(MAKE) $(AM_MAKEFLAGS) all
|
||||
|
||||
if USE_GIT_VERSION
|
||||
GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 | sed s/^v//')-dirty
|
||||
REAL_PACKAGE_VERSION = $(GIT_VERSION)
|
||||
else
|
||||
REAL_PACKAGE_VERSION = $(PACKAGE_VERSION)
|
||||
endif
|
||||
|
||||
man_MANS =
|
||||
dist_man_MANS = $(ASCIIDOC_MANS) repo-remove.8
|
||||
@@ -38,29 +50,28 @@ dist_man_MANS = $(ASCIIDOC_MANS) repo-remove.8
|
||||
if USE_DOXYGEN
|
||||
man_MANS += $(DOXYGEN_MANS)
|
||||
|
||||
all: doxygen.in
|
||||
all-local: doxygen.in
|
||||
|
||||
doxygen.in:
|
||||
$(DOXYGEN) $(srcdir)/Doxyfile
|
||||
endif
|
||||
|
||||
if USE_ASCIIDOC
|
||||
ASCIIDOC_OPTS = \
|
||||
-f asciidoc.conf \
|
||||
-a pacman_version="$(PACKAGE_VERSION)" \
|
||||
-a pacman_version="$(REAL_PACKAGE_VERSION)" \
|
||||
-a pacman_date="`date +%Y-%m-%d`" \
|
||||
-a sysconfdir=$(sysconfdir)
|
||||
A2X_OPTS = \
|
||||
--no-xmllint \
|
||||
-d manpage \
|
||||
-f manpage \
|
||||
--xsltproc-opts='-param man.endnotes.list.enabled 0' \
|
||||
--xsltproc-opts='-param man.endnotes.are.numbered 0'
|
||||
|
||||
$(ASCIIDOC_MANS):
|
||||
a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
|
||||
|
||||
# These rules are due to the includes and files of the asciidoc text
|
||||
$(ASCIIDOC_MANS): asciidoc.conf footer.txt
|
||||
a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
|
||||
|
||||
pacman.8: pacman.8.txt
|
||||
makepkg.8: makepkg.8.txt
|
||||
repo-add.8: repo-add.8.txt
|
||||
@@ -70,7 +81,7 @@ pacman.conf.5: pacman.conf.5.txt
|
||||
libalpm.3: libalpm.3.txt
|
||||
# this one is just a symlink
|
||||
repo-remove.8: repo-add.8
|
||||
ln -s repo-add.8 repo-remove.8
|
||||
endif
|
||||
rm -f repo-remove.8
|
||||
$(LN_S) repo-add.8 repo-remove.8
|
||||
|
||||
# vim:set ts=2 sw=2 noet:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Maintainer: judd <jvinet@zeroflux.org>
|
||||
# Maintainer: Joe User <joe.user@example.com>
|
||||
|
||||
pkgname=patch
|
||||
pkgver=2.5.4
|
||||
@@ -13,8 +13,8 @@ source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
|
||||
md5sums=('ee5ae84d115f051d87fcaaef3b4ae782')
|
||||
|
||||
build() {
|
||||
cd $startdir/src/$pkgname-$pkgver
|
||||
cd $srcdir/$pkgname-$pkgver
|
||||
./configure --prefix=/usr
|
||||
make || return 1
|
||||
make prefix=$startdir/pkg/usr install
|
||||
make prefix=$pkgdir/usr install
|
||||
}
|
||||
|
||||
@@ -30,12 +30,22 @@ distribution of this package.
|
||||
|
||||
Options and Directives
|
||||
----------------------
|
||||
The following is a list of standard options and directives available for use
|
||||
in a PKGBUILD. These are all understood and interpreted by makepkg, and most
|
||||
will be directly transferred to the built package.
|
||||
|
||||
If you need to create any custom variables for use in your build process, it is
|
||||
recommended to name your custom variables with an '_' (underscore) prefix.
|
||||
This will prevent any possible name clashes with internal makepkg variables.
|
||||
For example, to store the base kernel version in a variable, use something
|
||||
similar to `$_basekernver`.
|
||||
|
||||
*pkgname*::
|
||||
The name of the package. This has be a unix-friendly name as it will be
|
||||
used in the package filename.
|
||||
|
||||
*pkgver*::
|
||||
The version of the software as released from the author (e.g. \'2.7.1').
|
||||
The version of the software as released from the author (e.g. '2.7.1').
|
||||
|
||||
*pkgrel*::
|
||||
This is the release number specific to the Arch Linux release. This
|
||||
@@ -77,6 +87,10 @@ Options and Directives
|
||||
variables if possible when specifying the download location. Any files
|
||||
that are compressed will automatically be extracted, unless found in
|
||||
the noextract array listed below.
|
||||
+
|
||||
It is also possible to specify an optional filename, which is helpful
|
||||
with weird URLs and for handling multiple source files with the same
|
||||
name. The syntax is: `$$source=('filename::url')$$`
|
||||
|
||||
*noextract (array)*::
|
||||
An array of filenames corresponding to those from the source array. Files
|
||||
@@ -89,14 +103,13 @@ Options and Directives
|
||||
source array (in the same order). makepkg will use this to verify source
|
||||
file integrity during subsequent builds. To easily generate md5sums, run
|
||||
``makepkg -g >> PKGBUILD''. If desired, move the md5sums line to an
|
||||
appropriate location. *NOTE:* makepkg supports multiple integrity
|
||||
algorithms and their corresponding arrays (i.e. sha1sums for the SHA1
|
||||
algorithm); however, official packages use only md5sums for the time
|
||||
being.
|
||||
appropriate location.
|
||||
|
||||
*sha1sums, etc.*::
|
||||
Alternative integrity checks that makepkg supports, as noted in md5sums
|
||||
above.
|
||||
*sha1sums, sha256sums, sha384sums, sha512sums (arrays)*::
|
||||
Alternative integrity checks that makepkg supports; these all behave
|
||||
similar to the md5sums option described above. To enable use and generation
|
||||
of these checksums, be sure to set up the `INTEGRITY_CHECK` option in
|
||||
linkman:makepkg.conf[5].
|
||||
|
||||
*groups (array)*::
|
||||
An array of symbolic names that represent groups of packages, allowing
|
||||
@@ -126,6 +139,15 @@ Options and Directives
|
||||
needed at runtime. Packages in this list follow the same format as
|
||||
depends.
|
||||
|
||||
*optdepends (array)*::
|
||||
An array of optional packages (and accompanying reasons) that are not
|
||||
essential to the package, but would offer increased functionality or other
|
||||
features when installed. optdepends are currently for informational
|
||||
purposes only and are not utilized by pacman during dependency resolution.
|
||||
The format should be similar to the following:
|
||||
|
||||
optdepends=('fakeroot: for makepkg usage as normal user')
|
||||
|
||||
*conflicts (array)*::
|
||||
An array of packages that will conflict with this package (i.e. they
|
||||
cannot both be installed at the same time). This directive follows the
|
||||
@@ -136,8 +158,11 @@ Options and Directives
|
||||
a package to provide dependencies other than its own package name. For
|
||||
example, the dcron package can provide 'cron', which allows packages to
|
||||
depend on 'cron' rather than 'dcron OR fcron'.
|
||||
Versioned provisions are also possible. For example, dcron can provide
|
||||
'cron 2.0' to satisfy the 'cron>=2.0' dependency of other packages.
|
||||
Versioned provisions are also possible, in the 'name=version' format.
|
||||
For example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0'
|
||||
dependency of other packages. Provisions involving the '>' and '<'
|
||||
operators are invalid as only specifc versions of a package may be
|
||||
provided.
|
||||
|
||||
*replaces (array)*::
|
||||
An array of packages that this package should replace, and can be used
|
||||
@@ -172,6 +197,9 @@ Options and Directives
|
||||
*emptydirs*;;
|
||||
Leave empty directories in packages.
|
||||
|
||||
*zipman*;;
|
||||
Compress man pages with gzip.
|
||||
|
||||
*ccache*;;
|
||||
Allow the use of ccache during build. More useful in its negative
|
||||
form `!ccache` with select packages that have problems building
|
||||
@@ -192,9 +220,42 @@ Options and Directives
|
||||
Force the package to be upgraded by a pacman system upgrade
|
||||
operation, even if the version number would normally not trigger
|
||||
such an upgrade. This is useful when the version numbering scheme
|
||||
of a package changes (or is alphanumeric).
|
||||
of a package changes (or is alphanumeric). See linkman:pacman[8] for
|
||||
more infomation on version comparisons.
|
||||
|
||||
|
||||
build() Function
|
||||
----------------
|
||||
In addition to the above directives, the build() bash function comprises the
|
||||
remainder of the PKGBUILD. This is directly sourced and executed by makepkg, so
|
||||
anything that bash or the system has available is available for use here. Be
|
||||
sure any exotic commands used are covered by `makedepends`.
|
||||
|
||||
All of the above variables such as `pkgname` and `pkgver` are available for use
|
||||
in the build function. In addition, makepkg defines three variables for your
|
||||
use during the build and install process. These three variables are as follows:
|
||||
|
||||
*startdir*::
|
||||
This contains the absolute path to the directory where the PKGBUILD was
|
||||
located, which is usually the output of `$(pwd)` when makepkg is started.
|
||||
$$startdir$$ was most often used in combination with `/src` or `/pkg`
|
||||
postfixes, but use of the `srcdir` and `pkgdir` variables is preferred.
|
||||
|
||||
*srcdir*::
|
||||
This points to the directory where makepkg extracts or copies all source
|
||||
files. Although it currently is an alias for `$startdir/src`, this
|
||||
assumption should not be assumed true for all future revisions of makepkg.
|
||||
|
||||
*pkgdir*::
|
||||
This points to the directory where makepkg bundles the installed package
|
||||
(this directory will become the root directory of your built package).
|
||||
Although it currently is an alias for `$startdir/pkg`, this assumption
|
||||
should not be assumed true for all future revisions of makepkg.
|
||||
|
||||
If you create any variables of your own in the build function, it is
|
||||
recommended to use the bash `local` keyword to scope the variable to inside
|
||||
the build function.
|
||||
|
||||
Install/Upgrade/Remove Scripting
|
||||
--------------------------------
|
||||
Pacman has the ability to store and execute a package-specific script when it
|
||||
@@ -261,7 +322,7 @@ from.
|
||||
*_svntrunk*;;
|
||||
The trunk of the SVN repository.
|
||||
|
||||
*_cvsmod*;;
|
||||
*_svnmod*;;
|
||||
The SVN module to fetch.
|
||||
|
||||
*Git*::
|
||||
@@ -308,11 +369,10 @@ The following is an example PKGBUILD for the 'patch' package. For more
|
||||
examples, look through the build files of your distribution's packages. For
|
||||
those using Arch Linux, consult the ABS tree.
|
||||
|
||||
[sh]
|
||||
source~~~~~
|
||||
[source,sh]
|
||||
-------------------------------
|
||||
include::PKGBUILD-example.txt[]
|
||||
source~~~~~
|
||||
|
||||
-------------------------------
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
@@ -15,9 +15,16 @@ mailto:pacman-dev@archlinux.org[].
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
Current maintainers:
|
||||
|
||||
* Dan McGee <dan@archlinux.org>
|
||||
* Xavier Chantry <shiningxc@gmail.com>
|
||||
* Aaron Griffin <aaron@archlinux.org>
|
||||
|
||||
Past contributors:
|
||||
|
||||
* Judd Vinet <jvinet@zeroflux.org>
|
||||
* Aurelien Foret <aurelien@archlinux.org>
|
||||
* Aaron Griffin <aaron@archlinux.org>
|
||||
* Dan McGee <dan@archlinux.org>
|
||||
|
||||
See the 'AUTHORS' file for additional contributors.
|
||||
|
||||
@@ -28,20 +28,23 @@ build the package, install the package into a temporary root, make
|
||||
customizations, generate meta-info, and package the whole thing up for pacman
|
||||
to use.
|
||||
|
||||
NOTE: makepkg uses your current locale by default and does not unset it when
|
||||
building packages. If you wish to share your build output with others when
|
||||
seeking help or for other purposes, you may wish to run "`LC_ALL=C makepkg`" so
|
||||
your logs and output are not localized.
|
||||
|
||||
Options
|
||||
-------
|
||||
*\--asroot*::
|
||||
Allow makepkg to run as root. This is for security purposes as it is
|
||||
normally dangerous to do so. This will also disable use of fakeroot and
|
||||
sudo.
|
||||
|
||||
*-A, \--ignorearch*::
|
||||
Ignore a missing or incomplete arch field in the build script. This is
|
||||
for rebuilding packages from source when the PKGBUILD may be slightly
|
||||
outdated and not updated with an `$$arch=('yourarch')$$` field.
|
||||
|
||||
*-b, \--builddeps*::
|
||||
Build missing dependencies from source. When makepkg finds missing
|
||||
build-time or run-time dependencies, it will look for the dependencies'
|
||||
PKGBUILD files under `SRCROOT` (set in linkman:makepkg.conf[5]). If it
|
||||
finds them it will call makepkg to build and install the missing
|
||||
dependencies. The child calls will be made with the `-b` and `-i` options.
|
||||
|
||||
*-c, \--clean*::
|
||||
Clean up leftover work files and directories after a successful build.
|
||||
|
||||
@@ -68,20 +71,37 @@ Options
|
||||
default to the current directory. This allows the built package to be
|
||||
overwritten.
|
||||
|
||||
*--forcever*::
|
||||
This is a hidden option that should *not* be used unless you really know
|
||||
what you are doing. makepkg uses this internally when calling itself to
|
||||
set the new development pkgver of the package.
|
||||
|
||||
*-g, \--geninteg*::
|
||||
For each source file in the source array of PKGBUILD, download the file
|
||||
if required and generate integrity checks. The integrity checks
|
||||
generated are determined by the value of the INTEGRITY_CHECK array in
|
||||
linkman:makepkg.conf[5]. This output can be redirected into your
|
||||
PKGBUILD for source validation (`makepkg -g >> PKGBUILD`).
|
||||
PKGBUILD for source validation using "`makepkg -g >> PKGBUILD`".
|
||||
|
||||
*-h, \--help*::
|
||||
Output syntax and command line options.
|
||||
|
||||
*\--holdver*::
|
||||
Useful when building development versions of packages. Prevents makepkg
|
||||
from automatically bumping the pkgver to the latest revision number in
|
||||
the package's development tree.
|
||||
|
||||
*-i, \--install*::
|
||||
Install or upgrade the package after a successful build using
|
||||
linkman:pacman[8].
|
||||
|
||||
*-L, \--log*::
|
||||
Enable makepkg build logging. This will use the *tee* program to send
|
||||
output of the `build()` function to both the console and to a text file in
|
||||
the build directory named `pkgname-pkgver-pkgrel-arch.log`. As mentioned
|
||||
above, the build log will be localized so you may want to set your locale
|
||||
accordingly if sharing the log output with others.
|
||||
|
||||
*-m, \--nocolor*::
|
||||
Disable color in output messages.
|
||||
|
||||
@@ -96,7 +116,7 @@ Options
|
||||
|
||||
*-r, \--rmdeps*::
|
||||
Upon successful build, remove any dependencies installed by makepkg
|
||||
during dependency auto-resolution (using `-b` or `-s`).
|
||||
during dependency auto-resolution and installation when using `-s`.
|
||||
|
||||
*-R, \--repackage*::
|
||||
Repackage contents of pkg/ without rebuilding the package. This is
|
||||
@@ -108,15 +128,18 @@ Options
|
||||
dependencies are not found, pacman will try to resolve them. If
|
||||
successful, the missing packages will be downloaded and installed.
|
||||
|
||||
*\--asroot*::
|
||||
Allow makepkg to run as root. This is for security purposes as it is
|
||||
normally dangerous to do so. This will also disable use of fakeroot and
|
||||
sudo.
|
||||
*\--allsource*::
|
||||
Do not actually build the package, but build a source-only tarball that
|
||||
includes all sources, including those that are normally download via
|
||||
makepkg. This is useful for passing a single tarball to another program
|
||||
such as a chroot or remote builder. It will also satisfy requirements of
|
||||
the GPL when distributing binary packages.
|
||||
|
||||
*\--source*::
|
||||
Do not actually build the package, but build a source-only tarball. This
|
||||
is useful for passing a single tarball to another program such as a
|
||||
chroot, remote builder, or an AUR upload.
|
||||
Do not actually build the package, but build a source-only tarball that
|
||||
does not include sources that can be fetched via a download URL. This is
|
||||
useful for passing a single tarball to another program such as a chroot,
|
||||
remote builder, or a tarball upload.
|
||||
|
||||
*\--noconfirm*::
|
||||
(Passed to pacman) Prevent pacman from waiting for user input before
|
||||
|
||||
@@ -34,9 +34,13 @@ Options
|
||||
**DLAGENTS=(**\'protocol::/path/to/command [options]' ...**)**::
|
||||
Sets the download agents used to fetch source files specified with a URL in
|
||||
the linkman:PKGBUILD[5] file. Options can be specified for each command as
|
||||
well; the download URL is placed on the end of the command. This is more
|
||||
flexible than the former `FTPAGENT` variable, as any protocol can have a
|
||||
download agent. Several examples are provided in the default makepkg.conf.
|
||||
well, and any protocol can have a download agent. Several examples are provided
|
||||
in the default makepkg.conf.
|
||||
+
|
||||
If present, `%u` will be replaced with the download URL. Otherwise, the
|
||||
download URL will be placed on the end of the command. If present, `%o` will
|
||||
be replaced with the local filename, plus a ``.part'' extension, which allows
|
||||
makepkg to handle resuming file downloads.
|
||||
|
||||
**CARCH=**"carch"::
|
||||
Specifies your computer architecture; possible values include such things
|
||||
@@ -94,8 +98,8 @@ Options
|
||||
running in the DistCC cluster. In addition, you will want to modify your
|
||||
`MAKEFLAGS`.
|
||||
|
||||
**OPTIONS=(**strip !docs libtool emptydirs**)**::
|
||||
This array contains options that affect the default packaging. All four are
|
||||
**OPTIONS=(**strip docs libtool emptydirs zipman**)**::
|
||||
This array contains options that affect the default packaging. They are
|
||||
equivalent to options that can be placed in the PKGBUILD; the defaults are
|
||||
shown here. All options should always be left in the array; to enable or
|
||||
disable an option simply remove or place an ``!'' at the front of the
|
||||
@@ -117,6 +121,9 @@ Options
|
||||
*emptydirs*;;
|
||||
Leave empty directories in packages.
|
||||
|
||||
*zipman*;;
|
||||
Compress man pages with gzip.
|
||||
|
||||
**INTEGRITY_CHECK=(**check1 ...**)**::
|
||||
File integrity checks to use. Multiple checks may be specified; this
|
||||
affects both generation and checking. The current valid options are:
|
||||
@@ -128,6 +135,13 @@ Options
|
||||
that are located in opt/, you may need to add the directory to this
|
||||
array. *NOTE:* Do not add the leading slash to the directory name.
|
||||
|
||||
**STRIP_DIRS=(**bin lib sbin usr/{bin,lib} ...**)**::
|
||||
If "strip" is specified in the OPTIONS array, this variable will
|
||||
instruct makepkg where to look to for files to strip. If you build
|
||||
packages that are located in opt/, you may need to add the directory
|
||||
to this array. *NOTE:* Do not add the leading slash to the directory
|
||||
name.
|
||||
|
||||
**PKGDEST=**"/path/to/folder"::
|
||||
If this value is not set, packages will by default be placed in the
|
||||
current directory (location of the linkman:PKGBUILD[5]). Many people
|
||||
|
||||
@@ -28,13 +28,6 @@ ends to be written (for instance, a GUI front end).
|
||||
|
||||
Operations
|
||||
----------
|
||||
*-A, \--add* (deprecated)::
|
||||
Add a package to the system. Either a URL or file path can be specified.
|
||||
The package will be uncompressed into the installation root and the
|
||||
database will be updated. The package will not be installed if another
|
||||
version is already installed. *NOTE*: please use '\--upgrade' in place of
|
||||
this option.
|
||||
|
||||
*-Q, \--query*::
|
||||
Query the package database. This operation allows you to view installed
|
||||
packages and their files, as well as meta-information about individual
|
||||
@@ -56,7 +49,9 @@ Operations
|
||||
example, `pacman -S qt` will download and install qt and all the
|
||||
packages it depends on. If a package name exists in more than one repo, the
|
||||
repo can be explicitly specified to clarify the package to install:
|
||||
`pacman -S testing/qt`.
|
||||
`pacman -S testing/qt`. You can also specify version requirements:
|
||||
`pacman -S "bash>=3.2"`. (Quotes are needed, otherwise your shell
|
||||
interprets ">" as redirection to file.)
|
||||
+
|
||||
In addition to packages, groups can be specified as well. For example, if
|
||||
gnome is a defined package group, then `pacman -S gnome` will install every
|
||||
@@ -68,7 +63,13 @@ provide the same functionality as foo will be searched for. If any package is
|
||||
found, it will be installed.
|
||||
+
|
||||
You can also use `pacman -Su` to upgrade all packages that are out of date. See
|
||||
<<SO,Sync Options>> below.
|
||||
<<SO,Sync Options>> below. When upgrading, pacman performs version comparison
|
||||
to determine which packages need upgrading. This behavior operates as follows:
|
||||
|
||||
Alphanumeric:
|
||||
1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0
|
||||
Numeric:
|
||||
1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0
|
||||
|
||||
*-U, \--upgrade*::
|
||||
Upgrade or add a package to the system. Either a URL or file path can be
|
||||
@@ -86,16 +87,22 @@ You can also use `pacman -Su` to upgrade all packages that are out of date. See
|
||||
Options
|
||||
-------
|
||||
*\--asdeps*::
|
||||
Install packages non-explicitly; in other works, fake their install reason
|
||||
Install packages non-explicitly; in other words, fake their install reason
|
||||
to be installed as a dependency. This is useful for makepkg and other
|
||||
build from source tools that need to install dependencies before building
|
||||
the package.
|
||||
|
||||
*\--asexplicit*::
|
||||
Install packages explicitly; in other words, fake their install reason to
|
||||
be explicitly installed. This is useful if you want to mark a dependency
|
||||
as explicitly installed so it will not be removed by the '\--recursive'
|
||||
remove operation.
|
||||
|
||||
*-b, \--dbpath* <'path'>::
|
||||
Specify an alternative database location (a typical default is
|
||||
``/var/lib/pacman''). This should not be used unless you know what you are
|
||||
doing. *NOTE*: if specified, this is an absolute path and the root path is
|
||||
not automatically prepended. This behavior changed in pacman 3.1.0.
|
||||
not automatically prepended.
|
||||
|
||||
*-d, \--nodeps*::
|
||||
Skips all dependency checks. Normally, pacman will always check a
|
||||
@@ -113,6 +120,9 @@ Options
|
||||
not be used as a way to install software into ``/usr/local'' instead of
|
||||
``/usr''. This option is used if you want to install a package on a
|
||||
temporary mounted partition which is "owned" by another system.
|
||||
*NOTE*: if database path or logfile are not specified on either the
|
||||
command line or in linkman:pacman.conf[5], their default location will
|
||||
be inside this root path.
|
||||
|
||||
*-v, --verbose*::
|
||||
Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
|
||||
@@ -120,9 +130,8 @@ Options
|
||||
*\--cachedir* <'dir'>::
|
||||
Specify an alternative package cache location (a typical default is
|
||||
``/var/cache/pacman/pkg''). Multiple cache directories can be specified,
|
||||
and they are tried in the order they are passed to pacman. *NOTE*: if
|
||||
specified, this is an absolute path and the root path is not automatically
|
||||
prepended. This behavior changed in pacman 3.1.0.
|
||||
and they are tried in the order they are passed to pacman. *NOTE*: this
|
||||
is an absolute path, the root path is not automatically prepended.
|
||||
|
||||
*\--config* <'file'>::
|
||||
Specify an alternate configuration file.
|
||||
@@ -190,11 +199,16 @@ Query Options[[QO]]
|
||||
not an entry in the database. The file will be decompressed and queried.
|
||||
This is useful in combination with '\--info' and '\--list'.
|
||||
|
||||
*-q, \--quiet*::
|
||||
Show less information for certain query operations. Search will only show
|
||||
package names and not version, group, and description information; a bare
|
||||
query will only show package names rather than names and versions.
|
||||
|
||||
*-s, \--search* <'regexp'>::
|
||||
This will search each locally-installed package for names or
|
||||
descriptions that match `regexp`.
|
||||
|
||||
*-t, \--orphans*::
|
||||
*-t, \--unrequired*::
|
||||
Restrict or filter output to packages not required by any currently
|
||||
installed package.
|
||||
|
||||
@@ -207,7 +221,8 @@ Remove Options[[RO]]
|
||||
--------------------
|
||||
*-c, \--cascade*::
|
||||
Remove all target packages, as well as all packages that depend on one
|
||||
or more target packages. This operation is recursive.
|
||||
or more target packages. This operation is recursive, and must be used
|
||||
with care since it can remove many potentially needed packages.
|
||||
|
||||
*-k, \--keep*::
|
||||
Removes the database entry only. Leaves all files in place.
|
||||
@@ -218,27 +233,33 @@ Remove Options[[RO]]
|
||||
file should be renamed with a ``.pacsave'' extension.
|
||||
|
||||
*-s, \--recursive*::
|
||||
Remove each target specified including all dependencies, provided that
|
||||
(A) they are not required by other packages; and (B) they were not
|
||||
explicitly installed by the user. This option is analogous to a
|
||||
backwards '\--sync' operation.
|
||||
Remove each target specified including all of their dependencies, provided
|
||||
that (A) they are not required by other packages; and (B) they were not
|
||||
explicitly installed by the user. This operation is recursive and analogous
|
||||
to a backwards '\--sync' operation, and helps keep a clean system without
|
||||
orphans. If you want to omit condition (B), pass this option twice.
|
||||
|
||||
*-u, \--unneeded*::
|
||||
Removes the targets that are not required by any other packages.
|
||||
This is mostly useful when removing a group without using the '-c' option,
|
||||
to avoid breaking any dependencies.
|
||||
|
||||
|
||||
Sync Options[[SO]]
|
||||
------------------
|
||||
*-c, \--clean*::
|
||||
Remove old packages from the cache as well as unused sync databases to
|
||||
free up disk space. When pacman downloads packages, it saves them in a
|
||||
cache directory. In addition, databases are saved for every sync DB you
|
||||
download from, and are not deleted even if they are removed from the
|
||||
configuration file linkman:pacman.conf[5]. Use one '\--clean' switch to
|
||||
only remove old packages; use two to remove all packages from the cache.
|
||||
In both cases, you will have a yes or no option to remove packages and/or
|
||||
unused downloaded databases.
|
||||
|
||||
*-e, \--dependsonly*::
|
||||
Install all dependencies of a package, but not the specified package
|
||||
itself. This is pretty useless and we're not sure why it even exists.
|
||||
Remove packages that are no longer installed from the cache as well as
|
||||
currently unused sync databases to free up disk space. When pacman
|
||||
downloads packages, it saves them in a cache directory. In addition,
|
||||
databases are saved for every sync DB you download from, and are not
|
||||
deleted even if they are removed from the configuration file
|
||||
linkman:pacman.conf[5]. Use one '\--clean' switch to only remove
|
||||
packages that are no longer installed; use two to remove all packages
|
||||
from the cache. In both cases, you will have a yes or no option to
|
||||
remove packages and/or unused downloaded databases.
|
||||
+
|
||||
If you use a network shared cache, see the 'CleanMethod' option in
|
||||
linkman:pacman.conf[5].
|
||||
|
||||
*-g, \--groups*::
|
||||
Display all the members for each package group specified. If no group
|
||||
@@ -258,6 +279,11 @@ Sync Options[[SO]]
|
||||
dependencies yet to be installed. These can be piped to a file and
|
||||
downloaded at a later time, using a program like wget.
|
||||
|
||||
*-q, \--quiet*::
|
||||
Show less information for certain sync operations. Search will only show
|
||||
package names and not version, group, and description information; list
|
||||
will only show package names and omit databases and versions.
|
||||
|
||||
*-s, \--search* <'regexp'>::
|
||||
This will search each package in the sync databases for names or
|
||||
descriptions that match `regexp`.
|
||||
@@ -282,7 +308,7 @@ Sync Options[[SO]]
|
||||
to date.
|
||||
|
||||
*\--needed*::
|
||||
Only install the targets that are not already installed and up-to-date.
|
||||
Don't reinstall the targets that are already up-to-date.
|
||||
|
||||
*\--ignore* <'package'>::
|
||||
Directs pacman to ignore upgrades of package even if there is one
|
||||
|
||||
@@ -33,13 +33,16 @@ Example
|
||||
NoUpgrade = etc/passwd etc/group etc/shadow
|
||||
NoUpgrade = etc/fstab
|
||||
|
||||
[current]
|
||||
Include = /etc/pacman.d/current
|
||||
[core]
|
||||
Include = /etc/pacman.d/core
|
||||
|
||||
[custom]
|
||||
Server = file:///home/pkgs
|
||||
--------
|
||||
|
||||
NOTE: Each directive must be in CamelCase. If the case isn't respected, the
|
||||
directive won't be recognized. For example. noupgrade or NOUPGRADE will not
|
||||
work.
|
||||
|
||||
Options
|
||||
-------
|
||||
@@ -47,27 +50,29 @@ Options
|
||||
Set the default root directory for pacman to install to. This option is
|
||||
used if you want to install a package on a temporary mounted partition
|
||||
which is "owned" by another system, or for a chroot install.
|
||||
*NOTE*: If database path or logfile are not specified on either the
|
||||
command line or in linkman:pacman.conf[5], their default location will
|
||||
be inside this root path.
|
||||
|
||||
*DBPath =* path/to/db/dir::
|
||||
Overrides the default location of the toplevel database directory. A
|
||||
typical default is ``/var/lib/pacman/''. Most users will not need to set
|
||||
this option. *NOTE*: if specified, this is an absolute path and the root
|
||||
path is not automatically prepended. This behavior changed in pacman 3.1.0.
|
||||
path is not automatically prepended.
|
||||
|
||||
*CacheDir =* path/to/cache/dir::
|
||||
Overrides the default location of the package cache directory. A typical
|
||||
default is ``/var/cache/pacman/pkg/''. Multiple cache directories can be
|
||||
specified, and they are tried in the order they are listed in the config
|
||||
file. If a file is not found in any cache directory, it will be downloaded
|
||||
to the first cache directory with write access. *NOTE*: if specified, this
|
||||
is an absolute path and the root path is not automatically prepended. This
|
||||
behavior changed in pacman 3.1.0.
|
||||
to the first cache directory with write access. *NOTE*: this is an absolute
|
||||
path, the root path is not automatically prepended.
|
||||
|
||||
|
||||
*LogFile =* '/path/to/file'::
|
||||
Log actions directly to a file. A typical default is
|
||||
``/var/log/pacman.log''. As of pacman 3.1.0, this does not need to be
|
||||
specified by default. This is an absolute path and root is not prepended.
|
||||
Overrides the default location of the pacman log file. A typical default
|
||||
is ``/var/log/pacman.log''. This is an absolute path and the root directory
|
||||
is not prepended.
|
||||
|
||||
*HoldPkg =* package ...::
|
||||
If a user tries to '\--remove' a package that's listed in `HoldPkg`,
|
||||
@@ -77,6 +82,12 @@ Options
|
||||
Instructs pacman to ignore any upgrades for this package when performing
|
||||
a '\--sysupgrade'.
|
||||
|
||||
*SyncFirst =* package ...::
|
||||
Instructs pacman to check for newer version of these packages before any
|
||||
sync operation. The user will have the choice to either cancel the current
|
||||
operation and upgrade these packages first or go on with the current operation.
|
||||
This option is typically used with the 'pacman' package.
|
||||
|
||||
*IgnoreGroup =* group ...::
|
||||
Instructs pacman to ignore any upgrades for all packages in this
|
||||
group when performing a '\--sysupgrade'.
|
||||
@@ -101,8 +112,9 @@ Options
|
||||
|
||||
*NoUpgrade =* file ...::
|
||||
All files listed with a `NoUpgrade` directive will never be touched during
|
||||
a package install/upgrade. Do not include the leading slash when specifying
|
||||
files.
|
||||
a package install/upgrade.
|
||||
These files refer to files in the package archive, so do not include the
|
||||
leading slash (the RootDir) when specifying them.
|
||||
|
||||
*NoExtract =* file ...::
|
||||
All files listed with a `NoExtract` directive will never be extracted from
|
||||
@@ -110,6 +122,17 @@ Options
|
||||
of a package to be installed. For example, if your httpd root uses an
|
||||
'index.php', then you would not want the 'index.html' file to be extracted
|
||||
from the 'apache' package.
|
||||
These files refer to files in the package archive, so do not include the
|
||||
leading slash (the RootDir) when specifying them.
|
||||
|
||||
*CleanMethod =* KeepInstalled | KeepCurrent::
|
||||
If set to `KeepInstalled` (the default), the '-Sc' operation will clean
|
||||
packages that are no longer installed (not present in the local database).
|
||||
If set to `KeepCurrent`, '-Sc' will clean outdated packages (not present in
|
||||
any sync database).
|
||||
The second behavior is useful when the package cache is shared among
|
||||
multiple machines, where the local databases are usually different, but the
|
||||
sync databases in use could be the same.
|
||||
|
||||
*UseSyslog*::
|
||||
Log action messages through syslog(). This will insert log entries into
|
||||
@@ -124,7 +147,7 @@ Options
|
||||
|
||||
*TotalDownload*::
|
||||
When downloading, display the amount downloaded, download rate, ETA,
|
||||
and completed percentage of the entire download list list rather
|
||||
and completed percentage of the entire download list rather
|
||||
than the percent of each individual download target. The progress
|
||||
bar is still based solely on the current file download.
|
||||
|
||||
@@ -137,9 +160,30 @@ defined with the 'Server' directive and follow a URL naming structure. If you
|
||||
want to use a local directory, you can specify the full path with a ``file://''
|
||||
prefix, as shown above.
|
||||
|
||||
The order of repositories in the file matters; repositories listed first will
|
||||
take precedence over those listed later in the file when packages in two
|
||||
repositories have identical names, regardless of version number.
|
||||
A common way to define DB locations utilizes the 'Include' directive. For each
|
||||
repository defined in the configuration file, a single 'Include' directive can
|
||||
contain a file that lists the servers for that repository.
|
||||
|
||||
--------
|
||||
[core]
|
||||
# use this repository first
|
||||
Server = ftp://ftp.archlinux.org/core/os/arch
|
||||
# next use servers as defined in the mirrorlist below
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
--------
|
||||
|
||||
During parsing, pacman will define the `$repo` variable to the name of the
|
||||
current section. This is often utilized in files specified using the 'Include'
|
||||
directive so all repositories can use the same mirrorfile.
|
||||
|
||||
--------
|
||||
Server = ftp://ftp.archlinux.org/$repo/os/arch
|
||||
--------
|
||||
|
||||
The order of repositories in the configuration files matters; repositories
|
||||
listed first will take precedence over those listed later in the file when
|
||||
packages in two repositories have identical names, regardless of version
|
||||
number.
|
||||
|
||||
Using Your Own Repository
|
||||
-------------------------
|
||||
|
||||
@@ -16,9 +16,9 @@ repo-add - package database maintenance utility
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
repo-add <path-to-db> [--force] <package> ...
|
||||
repo-add [-q] <path-to-db> <package1> [<package2> ...]
|
||||
|
||||
repo-remove <path-to-db> <packagename> ...
|
||||
repo-remove [-q] <path-to-db> <packagename> [<packagename2> ...]
|
||||
|
||||
|
||||
Description
|
||||
@@ -36,12 +36,9 @@ on the command line.
|
||||
|
||||
Options
|
||||
-------
|
||||
*--force* (repo-add only)::
|
||||
Add a force entry to the sync database, which tells pacman to skip version
|
||||
number comparison and update the package regardless. This flag can be
|
||||
specified in the middle of the command line, with any packages listed
|
||||
before the flag being added as normal entries, and any specified after
|
||||
being marked as force upgrades.
|
||||
*-q, \--quiet*::
|
||||
Force this program to keep quiet and run silent except for warning and
|
||||
error messages.
|
||||
|
||||
|
||||
See Also
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
SUBDIRS = pacman.d
|
||||
|
||||
dist_sysconf_DATA = makepkg.conf pacman.conf
|
||||
EXTRA_DIST = makepkg.conf.in pacman.conf.in
|
||||
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
#
|
||||
#-- The download utilities that makepkg should use to acquire sources
|
||||
# Format: 'protocol::agent'
|
||||
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3'
|
||||
'http::/usr/bin/wget -c -t 3 --waitretry=3'
|
||||
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate'
|
||||
'rsync::/usr/bin/rsync -z'
|
||||
'scp::/usr/bin/scp -C')
|
||||
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
|
||||
'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
|
||||
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
|
||||
'rsync::/usr/bin/rsync -z %u %o'
|
||||
'scp::/usr/bin/scp -C %u %o')
|
||||
|
||||
# Other common tools:
|
||||
# /usr/bin/snarf
|
||||
@@ -58,20 +58,23 @@ BUILDENV=(fakeroot !distcc color !ccache !xdelta)
|
||||
# These are default values for the options=() settings
|
||||
#########################################################################
|
||||
#
|
||||
# Default: OPTIONS=(strip !docs libtool emptydirs)
|
||||
# Default: OPTIONS=(strip docs libtool emptydirs zipman)
|
||||
# A negated option will do the opposite of the comments below.
|
||||
#
|
||||
#-- strip: Strip symbols from binaries/libraries
|
||||
#-- docs: Save doc and info directories
|
||||
#-- libtool: Leave libtool (.la) files in packages
|
||||
#-- emptydirs: Leave empty directories in packages
|
||||
#-- zipman: Compress manpages with gzip
|
||||
#
|
||||
OPTIONS=(strip !docs libtool emptydirs)
|
||||
OPTIONS=(strip docs libtool emptydirs zipman)
|
||||
|
||||
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
|
||||
INTEGRITY_CHECK=(md5)
|
||||
#-- Info and doc directories to remove (if option set correctly above)
|
||||
DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/gnome/{,share/}{info,doc,gtk-doc})
|
||||
DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/*/{info,doc,gtk-doc})
|
||||
#-- Directories to be searched for the strip option (if option set correctly above)
|
||||
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
|
||||
|
||||
#########################################################################
|
||||
# PACKAGE OUTPUT
|
||||
@@ -83,8 +86,6 @@ DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/gnome/{,share/}{info,doc,gtk-doc})
|
||||
#PKGDEST=/home/packages
|
||||
#-- Source cache: specify a fixed directory where source files will be cached
|
||||
#SRCDEST=/home/sources
|
||||
#-- Source root: specify location where PKGBUILDs are located for '--builddeps'
|
||||
#SRCROOT=/home/pkgbuilds
|
||||
#-- Packager: name/email of the person or organization building packages
|
||||
#PACKAGER="John Doe <john@doe.com>"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# @sysconfdir@/pacman.conf
|
||||
#
|
||||
# See the pacman manpage for option directives
|
||||
# See the pacman.conf(5) manpage for option and repository directives
|
||||
|
||||
#
|
||||
# GENERAL OPTIONS
|
||||
@@ -14,7 +14,25 @@
|
||||
#CacheDir = @localstatedir@/cache/pacman/pkg/
|
||||
#LogFile = @localstatedir@/log/pacman.log
|
||||
HoldPkg = pacman glibc
|
||||
# If upgrades are available for these packages they will be asked for first
|
||||
SyncFirst = pacman
|
||||
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
|
||||
#XferCommand = /usr/bin/curl %u > %o
|
||||
#CleanMethod = KeepInstalled
|
||||
|
||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
|
||||
#IgnorePkg =
|
||||
#IgnoreGroup =
|
||||
|
||||
#NoUpgrade =
|
||||
#NoExtract =
|
||||
|
||||
# Misc options (all disabled by default)
|
||||
#NoPassiveFtp
|
||||
#UseSyslog
|
||||
#ShowSize
|
||||
#UseDelta
|
||||
#TotalDownload
|
||||
|
||||
#
|
||||
# REPOSITORIES
|
||||
@@ -23,24 +41,24 @@ HoldPkg = pacman glibc
|
||||
# - local/custom mirrors can be added here or in separate files
|
||||
# - repositories listed first will take precedence when packages
|
||||
# have identical names, regardless of version number
|
||||
# - URLs will have $repo replaced by the name of the current repo
|
||||
#
|
||||
# Repository entries are of the format:
|
||||
# [repo-name]
|
||||
# Server = ServerName
|
||||
# Include = IncludePath
|
||||
#
|
||||
# The header [repo-name] is crucial - it must be present and
|
||||
# uncommented to enable the repo.
|
||||
#
|
||||
#[testing]
|
||||
#Include = @sysconfdir@/pacman.d/mirrorlist
|
||||
|
||||
[core]
|
||||
# Add your preferred servers here, they will be used first
|
||||
Include = @sysconfdir@/pacman.d/mirrorlist
|
||||
|
||||
[extra]
|
||||
# Add your preferred servers here, they will be used first
|
||||
Include = @sysconfdir@/pacman.d/mirrorlist
|
||||
|
||||
[community]
|
||||
# Add your preferred servers here, they will be used first
|
||||
Include = @sysconfdir@/pacman.d/mirrorlist
|
||||
|
||||
#[unstable]
|
||||
# Add your preferred servers here, they will be used first
|
||||
# An example of a disabled remote package repository with multiple servers
|
||||
# available. To enable, uncomment the following lines. You can add preferred
|
||||
# servers immediately after the header and they will be used before the
|
||||
# default mirrors.
|
||||
#[core]
|
||||
#Server = ftp://ftp.example.com/foobar/$repo/os/i686/
|
||||
# The file referenced here should contain a list of 'Server = ' lines.
|
||||
#Include = @sysconfdir@/pacman.d/mirrorlist
|
||||
|
||||
# An example of a custom package repository. See the pacman manpage for
|
||||
|
||||
1
etc/pacman.d/.gitignore
vendored
1
etc/pacman.d/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
mirrorlist
|
||||
@@ -1,17 +0,0 @@
|
||||
pkgsysconfdir = ${sysconfdir}/pacman.d
|
||||
dist_pkgsysconf_DATA = mirrorlist
|
||||
EXTRA_DIST = mirrorlist.in
|
||||
#
|
||||
# Files that should be removed, but which Automake does not know.
|
||||
MOSTLYCLEANFILES = $(dist_pkgsysconf_DATA)
|
||||
|
||||
$(dist_pkgsysconf_DATA): Makefile
|
||||
rm -f $@ $@.tmp
|
||||
sed \
|
||||
-e 's|@CARCH[@]|$(CARCH)|g' \
|
||||
$(srcdir)/mirrorlist.in >$@.tmp
|
||||
mv $@.tmp $@
|
||||
|
||||
mirrorlist: $(srcdir)/mirrorlist.in
|
||||
|
||||
# vim:set ts=2 sw=2 noet:
|
||||
@@ -1,84 +0,0 @@
|
||||
#
|
||||
# $repo: Arch Linux @REPO@ repository
|
||||
#
|
||||
|
||||
# United States
|
||||
Server = ftp://ftp.archlinux.org/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.nethat.com/pub/linux/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://locke.suu.edu/linux/dist/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://mirrors.unixheads.org/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/@CARCH@
|
||||
Server = http://mirrors.easynews.com/linux/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.ibiblio.org/pub/linux/distributions/archlinux/$repo/os/@CARCH@
|
||||
Server = http://holmes.umflint.edu/archlinux/$repo/os/@CARCH@
|
||||
|
||||
# South America
|
||||
# - Brazil
|
||||
Server = http://archlinux.c3sl.ufpr.br/$repo/os/@CARCH@
|
||||
Server = ftp://archlinux.c3sl.ufpr.br/archlinux/$repo/os/@CARCH@
|
||||
|
||||
# Europe
|
||||
# - Austria
|
||||
Server = ftp://gd.tuwien.ac.at/opsys/linux/archlinux/$repo/os/@CARCH@
|
||||
# - Belgium
|
||||
Server = ftp://ftp.belnet.be/mirror/archlinux.org/$repo/os/@CARCH@
|
||||
# - Czech Republic
|
||||
Server = ftp://ftp.sh.cvut.cz/MIRRORS/arch/$repo/os/@CARCH@
|
||||
# - Estonia
|
||||
Server = ftp://ftp.estpak.ee/pub/archlinux/$repo/os/@CARCH@
|
||||
# - Finland
|
||||
Server = ftp://ftp.sixnix.net/pub/archlinux/$repo/os/@CARCH@
|
||||
# - France
|
||||
Server = ftp://mir1.archlinuxfr.org/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://mir2.archlinuxfr.org/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/archlinux/$repo/os/@CARCH@
|
||||
Server = http://mir.archlinux.fr/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.free.fr/mirrors/ftp.archlinux.org/$repo/os/@CARCH@
|
||||
# - Germany
|
||||
Server = ftp://ftp.tu-chemnitz.de/pub/linux/sunsite.unc-mirror/distributions/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.archlinuxppc.org/i686/$repo/os/@CARCH@
|
||||
# - Great Britain
|
||||
Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/@CARCH@
|
||||
# - Greece
|
||||
Server = ftp://ftp.ntua.gr/pub/linux/archlinux/$repo/os/@CARCH@
|
||||
# - Hungary
|
||||
Server = ftp://ftp.mfa.kfki.hu/pub/mirrors/ftp.archlinux.org/$repo/os/@CARCH@
|
||||
# - Ireland
|
||||
Server = ftp://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/@CARCH@
|
||||
# - Italy
|
||||
Server = ftp://mi.mirror.garr.it/mirrors/archlinux/$repo/os/@CARCH@
|
||||
# - Netherlands
|
||||
Server = ftp://ftp.nluug.nl/pub/metalab/distributions/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.surfnet.nl/pub/os/Linux/distr/archlinux/$repo/os/@CARCH@
|
||||
# - Poland
|
||||
Server = ftp://ftp.icm.edu.pl/pub/Linux/sunsite/distributions/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://mirror.icis.pcz.pl/archlinux/$repo/os/@CARCH@
|
||||
# - Portugal
|
||||
Server = ftp://cesium.di.uminho.pt/pub/archlinux/$repo/os/@CARCH@
|
||||
# - Romania
|
||||
Server = ftp://ftp.iasi.roedu.net/mirrors/archlinux.org/$repo/os/@CARCH@
|
||||
# - Russia
|
||||
Server = ftp://archlinux.org.ru/pub/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://mirror.yandex.ru/archlinux/$repo/os/@CARCH@
|
||||
Server = http://archlinux.freeside.ru/$repo/os/@CARCH@
|
||||
# - Sweden
|
||||
Server = ftp://ftp.ds.hj.se/pub/os/linux/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.gigabit.nu/$repo/os/@CARCH@
|
||||
# - Switzerland
|
||||
Server = ftp://archlinux.puzzle.ch/$repo/os/@CARCH@
|
||||
# - Turkey
|
||||
Server = http://server.elsistech.com/archlinux/$repo/os/@CARCH@
|
||||
# - Ukraine
|
||||
Server = ftp://hell.org.ua/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://ftp.linux.kiev.ua/pub/Linux/ArchLinux/$repo/os/@CARCH@
|
||||
|
||||
# Asia
|
||||
# - Israel
|
||||
Server = http://mirror.isoc.org.il/pub/archlinux/$repo/os/@CARCH@
|
||||
|
||||
# Australia
|
||||
Server = ftp://mirror.pacific.net.au/linux/archlinux/$repo/os/@CARCH@
|
||||
Server = ftp://mirror.aarnet.edu.au/pub/archlinux/$repo/os/@CARCH@
|
||||
|
||||
@@ -10,8 +10,12 @@ DEFS = -DLOCALEDIR=\"@localedir@\" @DEFS@
|
||||
AM_CFLAGS = -pedantic -D_GNU_SOURCE
|
||||
|
||||
if ENABLE_VISIBILITY_CC
|
||||
if DARWIN
|
||||
AM_CFLAGS += -fvisibility=hidden
|
||||
else
|
||||
AM_CFLAGS += -fvisibility=internal
|
||||
endif
|
||||
endif
|
||||
if ENABLE_GNU89_INLINE_CC
|
||||
AM_CFLAGS += -fgnu89-inline
|
||||
endif
|
||||
@@ -22,23 +26,26 @@ libalpm_la_SOURCES = \
|
||||
alpm_list.h alpm_list.c \
|
||||
backup.h backup.c \
|
||||
be_files.c \
|
||||
be_package.c \
|
||||
cache.h cache.c \
|
||||
conflict.h conflict.c \
|
||||
db.h db.c \
|
||||
delta.h delta.c \
|
||||
deps.h deps.c \
|
||||
error.h error.c \
|
||||
dload.h dload.c \
|
||||
error.c \
|
||||
graph.h \
|
||||
group.h group.c \
|
||||
handle.h handle.c \
|
||||
log.h log.c \
|
||||
md5.h md5.c \
|
||||
package.h package.c \
|
||||
remove.h remove.c \
|
||||
server.h server.c \
|
||||
sync.h sync.c \
|
||||
trans.h trans.c \
|
||||
util.h util.c
|
||||
|
||||
libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
|
||||
libalpm_la_LIBADD = $(LTLIBINTL)
|
||||
|
||||
# vim:set ts=2 sw=2 noet:
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <inttypes.h> /* int64_t */
|
||||
#include <stdint.h> /* intmax_t */
|
||||
|
||||
/* libarchive */
|
||||
#include <archive.h>
|
||||
@@ -37,7 +39,6 @@
|
||||
#include "alpm_list.h"
|
||||
#include "trans.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "cache.h"
|
||||
#include "log.h"
|
||||
#include "backup.h"
|
||||
@@ -68,41 +69,25 @@ int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
|
||||
pkgname = alpm_pkg_get_name(pkg);
|
||||
pkgver = alpm_pkg_get_version(pkg);
|
||||
|
||||
if(trans->type != PM_TRANS_TYPE_UPGRADE) {
|
||||
/* only install this package if it is not already installed */
|
||||
if(_alpm_db_get_pkgfromcache(db, pkgname)) {
|
||||
pm_errno = PM_ERR_PKG_INSTALLED;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if an older version of said package is already in transaction
|
||||
* packages. if so, replace it in the list */
|
||||
for(i = trans->packages; i; i = i->next) {
|
||||
pmpkg_t *pkg = i->data;
|
||||
if(strcmp(pkg->name, pkgname) == 0) {
|
||||
if(_alpm_versioncmp(pkg->version, pkgver) < 0) {
|
||||
pmpkg_t *newpkg;
|
||||
pmpkg_t *transpkg = i->data;
|
||||
if(strcmp(transpkg->name, pkgname) == 0) {
|
||||
if(alpm_pkg_vercmp(transpkg->version, pkgver) < 0) {
|
||||
_alpm_log(PM_LOG_WARNING, _("replacing older version %s-%s by %s in target list\n"),
|
||||
pkg->name, pkg->version, pkgver);
|
||||
if((newpkg = _alpm_pkg_load(name, 1)) == NULL) {
|
||||
/* pm_errno is already set by pkg_load() */
|
||||
goto error;
|
||||
}
|
||||
transpkg->name, transpkg->version, pkgver);
|
||||
_alpm_pkg_free(i->data);
|
||||
i->data = newpkg;
|
||||
i->data = pkg;
|
||||
} else {
|
||||
_alpm_log(PM_LOG_WARNING, _("newer version %s-%s is in the target list -- skipping\n"),
|
||||
pkg->name, pkg->version);
|
||||
_alpm_log(PM_LOG_WARNING, _("skipping %s-%s because newer version %s is in the target list\n"),
|
||||
pkgname, pkgver, transpkg->version);
|
||||
_alpm_pkg_free(pkg);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
|
||||
pkg->reason = PM_PKG_REASON_DEPEND;
|
||||
}
|
||||
|
||||
/* add the package to the transaction */
|
||||
trans->packages = alpm_list_add(trans->packages, pkg);
|
||||
|
||||
@@ -113,15 +98,6 @@ error:
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
/* This is still messy. We have a lot of compare functions, and we should
|
||||
* try to consolidate them as much as we can (between add and sync) */
|
||||
/*static int deppkg_cmp(const void *p1, const void *p2)
|
||||
{
|
||||
return(strcmp(((pmdepmissing_t *)p1)->target,
|
||||
((pmdepmissing_t *)p2)->target));
|
||||
}*/
|
||||
|
||||
int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
{
|
||||
alpm_list_t *lp = NULL;
|
||||
@@ -138,12 +114,13 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
|
||||
/* look for unsatisfied dependencies */
|
||||
_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n");
|
||||
lp = alpm_checkdeps(db, trans->type == PM_TRANS_TYPE_UPGRADE, NULL, trans->packages);
|
||||
lp = alpm_checkdeps(db, 1, NULL, trans->packages);
|
||||
if(lp != NULL) {
|
||||
if(data) {
|
||||
*data = lp;
|
||||
} else {
|
||||
FREELIST(lp);
|
||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||
alpm_list_free(lp);
|
||||
}
|
||||
RET_ERR(PM_ERR_UNSATISFIED_DEPS, -1);
|
||||
}
|
||||
@@ -160,14 +137,15 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
if(data) {
|
||||
*data = lp;
|
||||
} else {
|
||||
FREELIST(lp);
|
||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_conflict_free);
|
||||
alpm_list_free(lp);
|
||||
}
|
||||
if(inner) {
|
||||
_alpm_log(PM_LOG_ERROR, _("conflicting packages were found in the target list\n"));
|
||||
_alpm_log(PM_LOG_ERROR, _("you cannot install two conflicting packages at the same time\n"));
|
||||
}
|
||||
if(outer) {
|
||||
_alpm_log(PM_LOG_ERROR, _("replacing packages with -A and -U is not supported yet\n"));
|
||||
_alpm_log(PM_LOG_ERROR, _("replacing packages with -U is not supported yet\n"));
|
||||
_alpm_log(PM_LOG_ERROR, _("you can replace packages manually using -Rd and -U\n"));
|
||||
}
|
||||
RET_ERR(PM_ERR_CONFLICTING_DEPS, -1);
|
||||
@@ -175,7 +153,7 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
|
||||
/* re-order w.r.t. dependencies */
|
||||
_alpm_log(PM_LOG_DEBUG, "sorting by dependencies\n");
|
||||
lp = _alpm_sortbydeps(trans->packages, PM_TRANS_TYPE_ADD);
|
||||
lp = _alpm_sortbydeps(trans->packages, 0);
|
||||
/* free the old alltargs */
|
||||
alpm_list_free(trans->packages);
|
||||
trans->packages = lp;
|
||||
@@ -193,7 +171,8 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
if(data) {
|
||||
*data = lp;
|
||||
} else {
|
||||
FREELIST(lp);
|
||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_fileconflict_free);
|
||||
alpm_list_free(lp);
|
||||
}
|
||||
RET_ERR(PM_ERR_FILE_CONFLICTS, -1);
|
||||
}
|
||||
@@ -210,6 +189,9 @@ static int upgrade_remove(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *trans, pm
|
||||
* with the type PM_TRANS_TYPE_REMOVEUPGRADE. TODO: kill this weird
|
||||
* behavior. */
|
||||
pmtrans_t *tr = _alpm_trans_new();
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "removing old package first (%s-%s)\n",
|
||||
oldpkg->name, oldpkg->version);
|
||||
|
||||
@@ -243,6 +225,7 @@ static int upgrade_remove(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *trans, pm
|
||||
char *backup = _alpm_backup_file(b->data);
|
||||
/* safety check (fix the upgrade026 pactest) */
|
||||
if(!alpm_list_find_str(filelist, backup)) {
|
||||
FREE(backup);
|
||||
continue;
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "adding %s to the NoUpgrade array temporarily\n",
|
||||
@@ -289,11 +272,12 @@ static int extract_single_file(struct archive *archive,
|
||||
struct archive_entry *entry, pmpkg_t *newpkg, pmpkg_t *oldpkg,
|
||||
pmtrans_t *trans, pmdb_t *db)
|
||||
{
|
||||
const char *entryname; /* the name of the file in the archive */
|
||||
const char *entryname;
|
||||
mode_t entrymode;
|
||||
char filename[PATH_MAX]; /* the actual file we're extracting */
|
||||
int needbackup = 0, notouch = 0;
|
||||
char *hash_orig = NULL;
|
||||
char *entryname_orig = NULL;
|
||||
const int archive_flags = ARCHIVE_EXTRACT_OWNER |
|
||||
ARCHIVE_EXTRACT_PERM |
|
||||
ARCHIVE_EXTRACT_TIME;
|
||||
@@ -306,12 +290,12 @@ static int extract_single_file(struct archive *archive,
|
||||
|
||||
if(strcmp(entryname, ".INSTALL") == 0) {
|
||||
/* the install script goes inside the db */
|
||||
snprintf(filename, PATH_MAX, "%s/%s-%s/install", db->path,
|
||||
snprintf(filename, PATH_MAX, "%s%s-%s/install", db->path,
|
||||
newpkg->name, newpkg->version);
|
||||
archive_entry_set_mode(entry, 0644);
|
||||
} else if(strcmp(entryname, ".CHANGELOG") == 0) {
|
||||
/* the changelog goes inside the db */
|
||||
snprintf(filename, PATH_MAX, "%s/%s-%s/changelog", db->path,
|
||||
snprintf(filename, PATH_MAX, "%s%s-%s/changelog", db->path,
|
||||
newpkg->name, newpkg->version);
|
||||
archive_entry_set_mode(entry, 0644);
|
||||
} else if(*entryname == '.') {
|
||||
@@ -337,7 +321,8 @@ static int extract_single_file(struct archive *archive,
|
||||
|
||||
/* if a file is in the add skiplist we never extract it */
|
||||
if(alpm_list_find_str(trans->skip_add, filename)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "%s is in trans->skip_add, skipping extraction\n", entryname);
|
||||
_alpm_log(PM_LOG_DEBUG, "%s is in trans->skip_add, skipping extraction\n",
|
||||
entryname);
|
||||
archive_read_data_skip(archive);
|
||||
return(0);
|
||||
}
|
||||
@@ -361,14 +346,12 @@ static int extract_single_file(struct archive *archive,
|
||||
* links, etc.
|
||||
* 12- skip extraction, dir already exists.
|
||||
*/
|
||||
struct stat lsbuf;
|
||||
if(_alpm_lstat(filename, &lsbuf) != 0) {
|
||||
|
||||
/* do both a lstat and a stat, so we can see what symlinks point to */
|
||||
struct stat lsbuf, sbuf;
|
||||
if(_alpm_lstat(filename, &lsbuf) != 0 || stat(filename, &sbuf) != 0) {
|
||||
/* cases 1,2,3: couldn't stat an existing file, skip all backup checks */
|
||||
} else {
|
||||
/* do a stat as well, so we can see what symlinks point to */
|
||||
struct stat sbuf;
|
||||
stat(filename, &sbuf);
|
||||
|
||||
if(S_ISDIR(lsbuf.st_mode) && S_ISDIR(entrymode)) {
|
||||
/* case 12: existing dir, ignore it */
|
||||
if(lsbuf.st_mode != entrymode) {
|
||||
@@ -438,7 +421,7 @@ static int extract_single_file(struct archive *archive,
|
||||
|
||||
/* if we force hash_orig to be non-NULL retroactive backup works */
|
||||
if(needbackup && !hash_orig) {
|
||||
hash_orig = strdup("");
|
||||
STRDUP(hash_orig, "", RET_ERR(PM_ERR_MEMORY, -1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -446,35 +429,35 @@ static int extract_single_file(struct archive *archive,
|
||||
/* case 5,8: don't need to do anything special */
|
||||
}
|
||||
|
||||
/* we need access to the original entryname later after calls to
|
||||
* archive_entry_set_pathname(), so we need to dupe it and free() later */
|
||||
STRDUP(entryname_orig, entryname, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
|
||||
if(needbackup) {
|
||||
char *tempfile = NULL;
|
||||
char checkfile[PATH_MAX];
|
||||
char *hash_local = NULL, *hash_pkg = NULL;
|
||||
int fd;
|
||||
int ret;
|
||||
|
||||
/* extract the package's version to a temporary file and checksum it */
|
||||
tempfile = strdup("/tmp/alpm_XXXXXX");
|
||||
fd = mkstemp(tempfile);
|
||||
snprintf(checkfile, PATH_MAX, "%s.paccheck", filename);
|
||||
archive_entry_set_pathname(entry, checkfile);
|
||||
|
||||
archive_entry_set_pathname(entry, tempfile);
|
||||
|
||||
int ret = archive_read_extract(archive, entry, archive_flags);
|
||||
ret = archive_read_extract(archive, entry, archive_flags);
|
||||
if(ret == ARCHIVE_WARN) {
|
||||
/* operation succeeded but a non-critical error was encountered */
|
||||
_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n",
|
||||
entryname, archive_error_string(archive));
|
||||
entryname_orig, archive_error_string(archive));
|
||||
} else if(ret != ARCHIVE_OK) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"),
|
||||
entryname, archive_error_string(archive));
|
||||
entryname_orig, archive_error_string(archive));
|
||||
alpm_logaction("error: could not extract %s (%s)\n",
|
||||
entryname, archive_error_string(archive));
|
||||
unlink(tempfile);
|
||||
entryname_orig, archive_error_string(archive));
|
||||
FREE(hash_orig);
|
||||
close(fd);
|
||||
FREE(entryname_orig);
|
||||
return(1);
|
||||
}
|
||||
|
||||
hash_local = alpm_get_md5sum(filename);
|
||||
hash_pkg = alpm_get_md5sum(tempfile);
|
||||
hash_pkg = alpm_get_md5sum(checkfile);
|
||||
|
||||
/* append the new md5 hash to it's respective entry
|
||||
* in newpkg's backup (it will be the new orginal) */
|
||||
@@ -482,16 +465,13 @@ static int extract_single_file(struct archive *archive,
|
||||
for(backups = alpm_pkg_get_backup(newpkg); backups;
|
||||
backups = alpm_list_next(backups)) {
|
||||
char *oldbackup = alpm_list_getdata(backups);
|
||||
if(!oldbackup || strcmp(oldbackup, entryname) != 0) {
|
||||
if(!oldbackup || strcmp(oldbackup, entryname_orig) != 0) {
|
||||
continue;
|
||||
}
|
||||
char *backup = NULL;
|
||||
/* length is tab char, null byte and MD5 (32 char) */
|
||||
int backup_len = strlen(oldbackup) + 34;
|
||||
backup = malloc(backup_len);
|
||||
if(!backup) {
|
||||
RET_ERR(PM_ERR_MEMORY, -1);
|
||||
}
|
||||
size_t backup_len = strlen(oldbackup) + 34;
|
||||
MALLOC(backup, backup_len, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
|
||||
sprintf(backup, "%s\t%s", oldbackup, hash_pkg);
|
||||
backup[backup_len-1] = '\0';
|
||||
@@ -499,7 +479,7 @@ static int extract_single_file(struct archive *archive,
|
||||
backups->data = backup;
|
||||
}
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "checking hashes for %s\n", entryname);
|
||||
_alpm_log(PM_LOG_DEBUG, "checking hashes for %s\n", entryname_orig);
|
||||
_alpm_log(PM_LOG_DEBUG, "current: %s\n", hash_local);
|
||||
_alpm_log(PM_LOG_DEBUG, "new: %s\n", hash_pkg);
|
||||
_alpm_log(PM_LOG_DEBUG, "original: %s\n", hash_orig);
|
||||
@@ -513,19 +493,20 @@ static int extract_single_file(struct archive *archive,
|
||||
|
||||
/* move the existing file to the "pacorig" */
|
||||
if(rename(filename, newpath)) {
|
||||
archive_entry_set_pathname(entry, filename);
|
||||
_alpm_log(PM_LOG_ERROR, _("could not rename %s (%s)\n"), filename, strerror(errno));
|
||||
alpm_logaction("error: could not rename %s (%s)\n", filename, strerror(errno));
|
||||
_alpm_log(PM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
|
||||
filename, newpath, strerror(errno));
|
||||
alpm_logaction("error: could not rename %s to %s (%s)\n",
|
||||
filename, newpath, strerror(errno));
|
||||
errors++;
|
||||
} else {
|
||||
/* copy the tempfile we extracted to the real path */
|
||||
if(_alpm_copyfile(tempfile, filename)) {
|
||||
archive_entry_set_pathname(entry, filename);
|
||||
_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), filename, strerror(errno));
|
||||
alpm_logaction("error: could not copy tempfile to %s (%s)\n", filename, strerror(errno));
|
||||
/* rename the file we extracted to the real name */
|
||||
if(rename(checkfile, filename)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
|
||||
checkfile, filename, strerror(errno));
|
||||
alpm_logaction("error: could not rename %s to %s (%s)\n",
|
||||
checkfile, filename, strerror(errno));
|
||||
errors++;
|
||||
} else {
|
||||
archive_entry_set_pathname(entry, filename);
|
||||
_alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), filename, newpath);
|
||||
alpm_logaction("warning: %s saved as %s\n", filename, newpath);
|
||||
}
|
||||
@@ -538,38 +519,48 @@ static int extract_single_file(struct archive *archive,
|
||||
/* installed file has NOT been changed by user */
|
||||
if(strcmp(hash_orig, hash_pkg) != 0) {
|
||||
_alpm_log(PM_LOG_DEBUG, "action: installing new file: %s\n",
|
||||
entryname);
|
||||
entryname_orig);
|
||||
|
||||
if(_alpm_copyfile(tempfile, filename)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), filename, strerror(errno));
|
||||
if(rename(checkfile, filename)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
|
||||
checkfile, filename, strerror(errno));
|
||||
alpm_logaction("error: could not rename %s to %s (%s)\n",
|
||||
checkfile, filename, strerror(errno));
|
||||
errors++;
|
||||
}
|
||||
archive_entry_set_pathname(entry, filename);
|
||||
} else {
|
||||
/* there's no sense in installing the same file twice, install
|
||||
* ONLY is the original and package hashes differ */
|
||||
_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");
|
||||
unlink(checkfile);
|
||||
}
|
||||
} else if(strcmp(hash_orig, hash_pkg) == 0) {
|
||||
/* originally installed file and new file are the same - this
|
||||
* implies the case above failed - i.e. the file was changed by a
|
||||
* user */
|
||||
_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");
|
||||
unlink(checkfile);
|
||||
} else if(strcmp(hash_local, hash_pkg) == 0) {
|
||||
/* this would be magical. The above two cases failed, but the
|
||||
* user changes just so happened to make the new file exactly the
|
||||
* same as the one in the package... skip it */
|
||||
_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");
|
||||
unlink(checkfile);
|
||||
} else {
|
||||
char newpath[PATH_MAX];
|
||||
_alpm_log(PM_LOG_DEBUG, "action: keeping current file and installing new one with .pacnew ending\n");
|
||||
_alpm_log(PM_LOG_DEBUG, "action: keeping current file and installing"
|
||||
" new one with .pacnew ending\n");
|
||||
snprintf(newpath, PATH_MAX, "%s.pacnew", filename);
|
||||
if(_alpm_copyfile(tempfile, newpath)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not install %s as %s: %s\n"), filename, newpath, strerror(errno));
|
||||
alpm_logaction("error: could not install %s as %s: %s\n", filename, newpath, strerror(errno));
|
||||
if(rename(checkfile, newpath)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not install %s as %s (%s)\n"),
|
||||
filename, newpath, strerror(errno));
|
||||
alpm_logaction("error: could not install %s as %s (%s)\n",
|
||||
filename, newpath, strerror(errno));
|
||||
} else {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s installed as %s\n"), filename, newpath);
|
||||
alpm_logaction("warning: %s installed as %s\n", filename, newpath);
|
||||
_alpm_log(PM_LOG_WARNING, _("%s installed as %s\n"),
|
||||
filename, newpath);
|
||||
alpm_logaction("warning: %s installed as %s\n",
|
||||
filename, newpath);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -577,10 +568,9 @@ static int extract_single_file(struct archive *archive,
|
||||
FREE(hash_local);
|
||||
FREE(hash_pkg);
|
||||
FREE(hash_orig);
|
||||
unlink(tempfile);
|
||||
FREE(tempfile);
|
||||
close(fd);
|
||||
} else {
|
||||
int ret;
|
||||
|
||||
/* we didn't need a backup */
|
||||
if(notouch) {
|
||||
/* change the path to a .pacnew extension */
|
||||
@@ -601,16 +591,17 @@ static int extract_single_file(struct archive *archive,
|
||||
|
||||
archive_entry_set_pathname(entry, filename);
|
||||
|
||||
int ret = archive_read_extract(archive, entry, archive_flags);
|
||||
ret = archive_read_extract(archive, entry, archive_flags);
|
||||
if(ret == ARCHIVE_WARN) {
|
||||
/* operation succeeded but a non-critical error was encountered */
|
||||
_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n",
|
||||
entryname, archive_error_string(archive));
|
||||
entryname_orig, archive_error_string(archive));
|
||||
} else if(ret != ARCHIVE_OK) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"),
|
||||
entryname, archive_error_string(archive));
|
||||
entryname_orig, archive_error_string(archive));
|
||||
alpm_logaction("error: could not extract %s (%s)\n",
|
||||
entryname, archive_error_string(archive));
|
||||
entryname_orig, archive_error_string(archive));
|
||||
FREE(entryname_orig);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@@ -620,18 +611,15 @@ static int extract_single_file(struct archive *archive,
|
||||
char *backup = NULL, *hash = NULL;
|
||||
char *oldbackup = alpm_list_getdata(b);
|
||||
/* length is tab char, null byte and MD5 (32 char) */
|
||||
int backup_len = strlen(oldbackup) + 34;
|
||||
size_t backup_len = strlen(oldbackup) + 34;
|
||||
|
||||
if(!oldbackup || strcmp(oldbackup, entryname) != 0) {
|
||||
if(!oldbackup || strcmp(oldbackup, entryname_orig) != 0) {
|
||||
continue;
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "appending backup entry for %s\n", filename);
|
||||
|
||||
hash = alpm_get_md5sum(filename);
|
||||
backup = malloc(backup_len);
|
||||
if(!backup) {
|
||||
RET_ERR(PM_ERR_MEMORY, -1);
|
||||
}
|
||||
MALLOC(backup, backup_len, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
|
||||
sprintf(backup, "%s\t%s", oldbackup, hash);
|
||||
backup[backup_len-1] = '\0';
|
||||
@@ -640,6 +628,7 @@ static int extract_single_file(struct archive *archive,
|
||||
b->data = backup;
|
||||
}
|
||||
}
|
||||
FREE(entryname_orig);
|
||||
return(errors);
|
||||
}
|
||||
|
||||
@@ -647,14 +636,12 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
pmtrans_t *trans, pmdb_t *db)
|
||||
{
|
||||
int i, ret = 0, errors = 0;
|
||||
struct archive *archive;
|
||||
struct archive_entry *entry;
|
||||
char cwd[PATH_MAX] = "";
|
||||
char scriptlet[PATH_MAX+1];
|
||||
int is_upgrade = 0;
|
||||
double percent = 0.0;
|
||||
pmpkg_t *oldpkg = NULL;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", db->path,
|
||||
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
|
||||
|
||||
@@ -669,12 +656,11 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
|
||||
/* we'll need to save some record for backup checks later */
|
||||
oldpkg = _alpm_pkg_dup(local);
|
||||
/* copy over the install reason (unless alldeps is set) */
|
||||
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
|
||||
newpkg->reason = PM_PKG_REASON_DEPEND;
|
||||
} else {
|
||||
/* make sure all infos are loaded because the database entry
|
||||
* will be removed soon */
|
||||
_alpm_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL);
|
||||
/* copy over the install reason */
|
||||
newpkg->reason = alpm_pkg_get_reason(local);
|
||||
}
|
||||
|
||||
/* pre_upgrade scriptlet */
|
||||
if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
|
||||
@@ -695,27 +681,53 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
}
|
||||
}
|
||||
|
||||
/* we override any pre-set reason if we have alldeps or allexplicit set */
|
||||
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
|
||||
newpkg->reason = PM_PKG_REASON_DEPEND;
|
||||
} else if(trans->flags & PM_TRANS_FLAG_ALLEXPLICIT) {
|
||||
newpkg->reason = PM_PKG_REASON_EXPLICIT;
|
||||
}
|
||||
|
||||
if(oldpkg) {
|
||||
/* set up fake remove transaction */
|
||||
int ret = upgrade_remove(oldpkg, newpkg, trans, db);
|
||||
if(ret != 0) {
|
||||
return(ret);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
/* prepare directory for database entries so permission are correct after
|
||||
changelog/install script installation (FS#12263) */
|
||||
if(_alpm_db_prepare(db, newpkg)) {
|
||||
alpm_logaction("error: could not create database entry %s-%s\n",
|
||||
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
|
||||
pm_errno = PM_ERR_DB_WRITE;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(!(trans->flags & PM_TRANS_FLAG_DBONLY)) {
|
||||
struct archive *archive;
|
||||
struct archive_entry *entry;
|
||||
char cwd[PATH_MAX] = "";
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "extracting files\n");
|
||||
|
||||
if ((archive = archive_read_new()) == NULL) {
|
||||
RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1);
|
||||
pm_errno = PM_ERR_LIBARCHIVE;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
archive_read_support_compression_all(archive);
|
||||
archive_read_support_format_all(archive);
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "archive: %s\n", newpkg->origin_data.file);
|
||||
if(archive_read_open_filename(archive, newpkg->origin_data.file,
|
||||
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
|
||||
RET_ERR(PM_ERR_PKG_OPEN, -1);
|
||||
pm_errno = PM_ERR_PKG_OPEN;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* save the cwd so we can restore it later */
|
||||
@@ -737,17 +749,22 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
}
|
||||
|
||||
for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
|
||||
double percent;
|
||||
|
||||
if(newpkg->size != 0) {
|
||||
/* Using compressed size for calculations here, as newpkg->isize is not
|
||||
* exact when it comes to comparing to the ACTUAL uncompressed size
|
||||
* (missing metadata sizes) */
|
||||
unsigned long pos = archive_position_compressed(archive);
|
||||
int64_t pos = archive_position_compressed(archive);
|
||||
percent = (double)pos / (double)newpkg->size;
|
||||
_alpm_log(PM_LOG_DEBUG, "decompression progress: %f%% (%ld / %ld)\n",
|
||||
percent*100.0, pos, newpkg->size);
|
||||
_alpm_log(PM_LOG_DEBUG, "decompression progress: "
|
||||
"%f%% (%"PRId64" / %jd)\n",
|
||||
percent*100.0, pos, (intmax_t)newpkg->size);
|
||||
if(percent >= 1.0) {
|
||||
percent = 1.0;
|
||||
}
|
||||
} else {
|
||||
percent = 0.0;
|
||||
}
|
||||
|
||||
if(is_upgrade) {
|
||||
@@ -772,7 +789,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
}
|
||||
|
||||
if(errors) {
|
||||
ret = 1;
|
||||
ret = -1;
|
||||
if(is_upgrade) {
|
||||
_alpm_log(PM_LOG_ERROR, _("problem occurred while upgrading %s\n"),
|
||||
newpkg->name);
|
||||
@@ -798,7 +815,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
|
||||
alpm_logaction("error: could not update database entry %s-%s\n",
|
||||
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
|
||||
RET_ERR(PM_ERR_DB_WRITE, -1);
|
||||
pm_errno = PM_ERR_DB_WRITE;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(_alpm_db_add_pkgincache(db, newpkg) == -1) {
|
||||
@@ -813,7 +832,6 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
PROGRESS(trans, PM_TRANS_PROGRESS_ADD_START,
|
||||
alpm_pkg_get_name(newpkg), 100, pkg_count, pkg_current);
|
||||
}
|
||||
EVENT(trans, PM_TRANS_EVT_EXTRACT_DONE, NULL, NULL);
|
||||
|
||||
/* run the post-install script if it exists */
|
||||
if(alpm_pkg_has_scriptlet(newpkg)
|
||||
@@ -834,9 +852,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
|
||||
EVENT(trans, PM_TRANS_EVT_ADD_DONE, newpkg, oldpkg);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
_alpm_pkg_free(oldpkg);
|
||||
|
||||
return(0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
|
||||
@@ -853,7 +871,7 @@ int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
|
||||
return(0);
|
||||
}
|
||||
|
||||
pkg_count = alpm_list_count(trans->targets);
|
||||
pkg_count = alpm_list_count(trans->packages);
|
||||
pkg_current = 1;
|
||||
|
||||
/* loop through our package list adding/upgrading one at a time */
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
/* libalpm */
|
||||
#include "alpm.h"
|
||||
#include "alpm_list.h"
|
||||
#include "error.h"
|
||||
#include "handle.h"
|
||||
#include "util.h"
|
||||
|
||||
@@ -81,4 +80,9 @@ int SYMEXPORT alpm_release(void)
|
||||
* @brief Various libalpm functions
|
||||
*/
|
||||
|
||||
/* Get the version of library */
|
||||
const char SYMEXPORT *alpm_version(void) {
|
||||
return(LIB_VERSION);
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alpm.h
|
||||
*
|
||||
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
|
||||
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
@@ -26,6 +26,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <sys/types.h> /* for off_t */
|
||||
#include <time.h> /* for time_t */
|
||||
#include <stdarg.h> /* for va_list */
|
||||
|
||||
@@ -45,14 +46,12 @@ typedef struct __pmdb_t pmdb_t;
|
||||
typedef struct __pmpkg_t pmpkg_t;
|
||||
typedef struct __pmdelta_t pmdelta_t;
|
||||
typedef struct __pmgrp_t pmgrp_t;
|
||||
typedef struct __pmserver_t pmserver_t;
|
||||
typedef struct __pmtrans_t pmtrans_t;
|
||||
typedef struct __pmsyncpkg_t pmsyncpkg_t;
|
||||
typedef struct __pmdepend_t pmdepend_t;
|
||||
typedef struct __pmdepmissing_t pmdepmissing_t;
|
||||
typedef struct __pmconflict_t pmconflict_t;
|
||||
typedef struct __pmfileconflict_t pmfileconflict_t;
|
||||
typedef struct __pmgraph_t pmgraph_t;
|
||||
|
||||
/*
|
||||
* Library
|
||||
@@ -60,6 +59,7 @@ typedef struct __pmgraph_t pmgraph_t;
|
||||
|
||||
int alpm_initialize(void);
|
||||
int alpm_release(void);
|
||||
const char *alpm_version(void);
|
||||
|
||||
/*
|
||||
* Logging facilities
|
||||
@@ -80,21 +80,23 @@ int alpm_logaction(char *fmt, ...);
|
||||
* Downloading
|
||||
*/
|
||||
|
||||
typedef void (*alpm_cb_download)(const char *filename, int file_xfered,
|
||||
int file_total, int list_xfered, int list_total);
|
||||
typedef void (*alpm_cb_download)(const char *filename,
|
||||
off_t xfered, off_t total);
|
||||
typedef void (*alpm_cb_totaldl)(off_t total);
|
||||
|
||||
/*
|
||||
* Options
|
||||
*/
|
||||
|
||||
#define PM_DLFNM_LEN 22
|
||||
|
||||
alpm_cb_log alpm_option_get_logcb();
|
||||
void alpm_option_set_logcb(alpm_cb_log cb);
|
||||
|
||||
alpm_cb_download alpm_option_get_dlcb();
|
||||
void alpm_option_set_dlcb(alpm_cb_download cb);
|
||||
|
||||
alpm_cb_totaldl alpm_option_get_totaldlcb();
|
||||
void alpm_option_set_totaldlcb(alpm_cb_totaldl cb);
|
||||
|
||||
const char *alpm_option_get_root();
|
||||
int alpm_option_set_root(const char *root);
|
||||
|
||||
@@ -169,7 +171,6 @@ int alpm_db_update(int level, pmdb_t *db);
|
||||
|
||||
pmpkg_t *alpm_db_get_pkg(pmdb_t *db, const char *name);
|
||||
alpm_list_t *alpm_db_getpkgcache(pmdb_t *db);
|
||||
alpm_list_t *alpm_db_whatprovides(pmdb_t *db, const char *name);
|
||||
|
||||
pmgrp_t *alpm_db_readgrp(pmdb_t *db, const char *name);
|
||||
alpm_list_t *alpm_db_getgrpcache(pmdb_t *db);
|
||||
@@ -191,7 +192,7 @@ int alpm_pkg_load(const char *filename, unsigned short full, pmpkg_t **pkg);
|
||||
int alpm_pkg_free(pmpkg_t *pkg);
|
||||
int alpm_pkg_checkmd5sum(pmpkg_t *pkg);
|
||||
char *alpm_fetch_pkgurl(const char *url);
|
||||
int alpm_pkg_vercmp(const char *ver1, const char *ver2);
|
||||
int alpm_pkg_vercmp(const char *a, const char *b);
|
||||
alpm_list_t *alpm_pkg_compute_requiredby(pmpkg_t *pkg);
|
||||
|
||||
const char *alpm_pkg_get_filename(pmpkg_t *pkg);
|
||||
@@ -204,8 +205,8 @@ time_t alpm_pkg_get_installdate(pmpkg_t *pkg);
|
||||
const char *alpm_pkg_get_packager(pmpkg_t *pkg);
|
||||
const char *alpm_pkg_get_md5sum(pmpkg_t *pkg);
|
||||
const char *alpm_pkg_get_arch(pmpkg_t *pkg);
|
||||
unsigned long alpm_pkg_get_size(pmpkg_t *pkg);
|
||||
unsigned long alpm_pkg_get_isize(pmpkg_t *pkg);
|
||||
off_t alpm_pkg_get_size(pmpkg_t *pkg);
|
||||
off_t alpm_pkg_get_isize(pmpkg_t *pkg);
|
||||
pmpkgreason_t alpm_pkg_get_reason(pmpkg_t *pkg);
|
||||
alpm_list_t *alpm_pkg_get_licenses(pmpkg_t *pkg);
|
||||
alpm_list_t *alpm_pkg_get_groups(pmpkg_t *pkg);
|
||||
@@ -223,39 +224,35 @@ size_t alpm_pkg_changelog_read(void *ptr, size_t size,
|
||||
/*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/
|
||||
int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);
|
||||
unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg);
|
||||
unsigned short alpm_pkg_has_force(pmpkg_t *pkg);
|
||||
|
||||
unsigned long alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local);
|
||||
off_t alpm_pkg_download_size(pmpkg_t *newpkg);
|
||||
|
||||
/*
|
||||
* Deltas
|
||||
*/
|
||||
|
||||
const char *alpm_delta_get_from(pmdelta_t *delta);
|
||||
const char *alpm_delta_get_from_md5sum(pmdelta_t *delta);
|
||||
const char *alpm_delta_get_to(pmdelta_t *delta);
|
||||
unsigned long alpm_delta_get_size(pmdelta_t *delta);
|
||||
const char *alpm_delta_get_to_md5sum(pmdelta_t *delta);
|
||||
const char *alpm_delta_get_filename(pmdelta_t *delta);
|
||||
const char *alpm_delta_get_md5sum(pmdelta_t *delta);
|
||||
off_t alpm_delta_get_size(pmdelta_t *delta);
|
||||
|
||||
/*
|
||||
* Groups
|
||||
*/
|
||||
const char *alpm_grp_get_name(const pmgrp_t *grp);
|
||||
const alpm_list_t *alpm_grp_get_pkgs(const pmgrp_t *grp);
|
||||
alpm_list_t *alpm_grp_get_pkgs(const pmgrp_t *grp);
|
||||
|
||||
/*
|
||||
* Sync
|
||||
*/
|
||||
|
||||
/* Types */
|
||||
typedef enum _pmsynctype_t {
|
||||
PM_SYNC_TYPE_REPLACE = 1,
|
||||
PM_SYNC_TYPE_UPGRADE,
|
||||
PM_SYNC_TYPE_DEPEND
|
||||
} pmsynctype_t;
|
||||
|
||||
pmsynctype_t alpm_sync_get_type(const pmsyncpkg_t *sync);
|
||||
pmpkg_t *alpm_sync_get_pkg(const pmsyncpkg_t *sync);
|
||||
void *alpm_sync_get_data(const pmsyncpkg_t *sync);
|
||||
alpm_list_t *alpm_sync_get_removes(const pmsyncpkg_t *sync);
|
||||
pmpkg_t *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync);
|
||||
int alpm_sync_sysupgrade(pmdb_t *db_local,
|
||||
alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);
|
||||
|
||||
@@ -265,10 +262,9 @@ int alpm_sync_sysupgrade(pmdb_t *db_local,
|
||||
|
||||
/* Types */
|
||||
typedef enum _pmtranstype_t {
|
||||
PM_TRANS_TYPE_ADD = 1,
|
||||
PM_TRANS_TYPE_UPGRADE = 1,
|
||||
PM_TRANS_TYPE_REMOVE,
|
||||
PM_TRANS_TYPE_REMOVEUPGRADE,
|
||||
PM_TRANS_TYPE_UPGRADE,
|
||||
PM_TRANS_TYPE_SYNC
|
||||
} pmtranstype_t;
|
||||
|
||||
@@ -281,45 +277,103 @@ typedef enum _pmtransflag_t {
|
||||
PM_TRANS_FLAG_CASCADE = 0x10,
|
||||
PM_TRANS_FLAG_RECURSE = 0x20,
|
||||
PM_TRANS_FLAG_DBONLY = 0x40,
|
||||
PM_TRANS_FLAG_DEPENDSONLY = 0x80,
|
||||
/* 0x80 flag can go here */
|
||||
PM_TRANS_FLAG_ALLDEPS = 0x100,
|
||||
PM_TRANS_FLAG_DOWNLOADONLY = 0x200,
|
||||
PM_TRANS_FLAG_NOSCRIPTLET = 0x400,
|
||||
PM_TRANS_FLAG_NOCONFLICTS = 0x800,
|
||||
PM_TRANS_FLAG_PRINTURIS = 0x1000,
|
||||
PM_TRANS_FLAG_NEEDED = 0x2000
|
||||
PM_TRANS_FLAG_NEEDED = 0x2000,
|
||||
PM_TRANS_FLAG_ALLEXPLICIT = 0x4000,
|
||||
PM_TRANS_FLAG_UNNEEDED = 0x8000,
|
||||
PM_TRANS_FLAG_RECURSEALL = 0x10000
|
||||
} pmtransflag_t;
|
||||
|
||||
/* Transaction Events */
|
||||
/**
|
||||
* @addtogroup alpm_trans
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Transaction events.
|
||||
* NULL parameters are passed to in all events unless specified otherwise.
|
||||
*/
|
||||
typedef enum _pmtransevt_t {
|
||||
/** Dependencies will be computed for a package. */
|
||||
PM_TRANS_EVT_CHECKDEPS_START = 1,
|
||||
/** Dependencies were computed for a package. */
|
||||
PM_TRANS_EVT_CHECKDEPS_DONE,
|
||||
/** File conflicts will be computed for a package. */
|
||||
PM_TRANS_EVT_FILECONFLICTS_START,
|
||||
/** File conflicts were computed for a package. */
|
||||
PM_TRANS_EVT_FILECONFLICTS_DONE,
|
||||
/** Dependencies will be resolved for target package. */
|
||||
PM_TRANS_EVT_RESOLVEDEPS_START,
|
||||
/** Dependencies were resolved for target package. */
|
||||
PM_TRANS_EVT_RESOLVEDEPS_DONE,
|
||||
/** Inter-conflicts will be checked for target package. */
|
||||
PM_TRANS_EVT_INTERCONFLICTS_START,
|
||||
/** Inter-conflicts were checked for target package. */
|
||||
PM_TRANS_EVT_INTERCONFLICTS_DONE,
|
||||
/** Package will be installed.
|
||||
* A pointer to the target package is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_ADD_START,
|
||||
/** Package was installed.
|
||||
* A pointer to the new package is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_ADD_DONE,
|
||||
/** Package will be removed.
|
||||
* A pointer to the target package is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_REMOVE_START,
|
||||
/** Package was removed.
|
||||
* A pointer to the removed package is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_REMOVE_DONE,
|
||||
/** Package will be upgraded.
|
||||
* A pointer to the upgraded package is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_UPGRADE_START,
|
||||
/** Package was upgraded.
|
||||
* A pointer to the new package, and a pointer to the old package is passed
|
||||
* to the callback, respectively.
|
||||
*/
|
||||
PM_TRANS_EVT_UPGRADE_DONE,
|
||||
PM_TRANS_EVT_EXTRACT_DONE,
|
||||
/** Target package's integrity will be checked. */
|
||||
PM_TRANS_EVT_INTEGRITY_START,
|
||||
/** Target package's integrity was checked. */
|
||||
PM_TRANS_EVT_INTEGRITY_DONE,
|
||||
/** Target deltas's integrity will be checked. */
|
||||
PM_TRANS_EVT_DELTA_INTEGRITY_START,
|
||||
/** Target delta's integrity was checked. */
|
||||
PM_TRANS_EVT_DELTA_INTEGRITY_DONE,
|
||||
/** Deltas will be applied to packages. */
|
||||
PM_TRANS_EVT_DELTA_PATCHES_START,
|
||||
/** Deltas were applied to packages. */
|
||||
PM_TRANS_EVT_DELTA_PATCHES_DONE,
|
||||
/** Delta patch will be applied to target package.
|
||||
* The filename of the package and the filename of the patch is passed to the
|
||||
* callback.
|
||||
*/
|
||||
PM_TRANS_EVT_DELTA_PATCH_START,
|
||||
/** Delta patch was applied to target package. */
|
||||
PM_TRANS_EVT_DELTA_PATCH_DONE,
|
||||
/** Delta patch failed to apply to target package. */
|
||||
PM_TRANS_EVT_DELTA_PATCH_FAILED,
|
||||
/** Scriptlet has printed information.
|
||||
* A line of text is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_SCRIPTLET_INFO,
|
||||
/** Print URI.
|
||||
* The database's URI and the package's filename are passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_PRINTURI,
|
||||
/** Files will be downloaded from a repository.
|
||||
* The repository's tree name is passed to the callback.
|
||||
*/
|
||||
PM_TRANS_EVT_RETRIEVE_START,
|
||||
} pmtransevt_t;
|
||||
/*@}*/
|
||||
|
||||
/* Transaction Conversations (ie, questions) */
|
||||
typedef enum _pmtransconv_t {
|
||||
@@ -352,7 +406,6 @@ typedef void (*alpm_trans_cb_progress)(pmtransprog_t, const char *, int, int, in
|
||||
|
||||
pmtranstype_t alpm_trans_get_type();
|
||||
unsigned int alpm_trans_get_flags();
|
||||
alpm_list_t * alpm_trans_get_targets();
|
||||
alpm_list_t * alpm_trans_get_pkgs();
|
||||
int alpm_trans_init(pmtranstype_t type, pmtransflag_t flags,
|
||||
alpm_trans_cb_event cb_event, alpm_trans_cb_conv conv,
|
||||
@@ -377,13 +430,16 @@ typedef enum _pmdepmod_t {
|
||||
PM_DEP_MOD_LT
|
||||
} pmdepmod_t;
|
||||
|
||||
pmdepend_t *alpm_splitdep(const char *depstring);
|
||||
int alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep);
|
||||
alpm_list_t *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||
alpm_list_t *remove, alpm_list_t *upgrade);
|
||||
alpm_list_t *alpm_deptest(pmdb_t *db, alpm_list_t *targets);
|
||||
|
||||
const char *alpm_miss_get_target(const pmdepmissing_t *miss);
|
||||
pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss);
|
||||
const char *alpm_miss_get_causingpkg(const pmdepmissing_t *miss);
|
||||
|
||||
alpm_list_t *alpm_checkdbconflicts(pmdb_t *db_local);
|
||||
|
||||
const char *alpm_conflict_get_package1(pmconflict_t *conflict);
|
||||
const char *alpm_conflict_get_package2(pmconflict_t *conflict);
|
||||
@@ -438,12 +494,6 @@ enum _pmerrno_t {
|
||||
PM_ERR_DB_REMOVE,
|
||||
/* Servers */
|
||||
PM_ERR_SERVER_BAD_URL,
|
||||
/* Configuration */
|
||||
PM_ERR_OPT_LOGFILE,
|
||||
PM_ERR_OPT_DBPATH,
|
||||
PM_ERR_OPT_LOCALDB,
|
||||
PM_ERR_OPT_SYNCDB,
|
||||
PM_ERR_OPT_USESYSLOG,
|
||||
/* Transactions */
|
||||
PM_ERR_TRANS_NOT_NULL,
|
||||
PM_ERR_TRANS_NULL,
|
||||
@@ -459,14 +509,12 @@ enum _pmerrno_t {
|
||||
PM_ERR_PKG_INVALID,
|
||||
PM_ERR_PKG_OPEN,
|
||||
PM_ERR_PKG_LOAD,
|
||||
PM_ERR_PKG_INSTALLED,
|
||||
PM_ERR_PKG_CANT_FRESH,
|
||||
PM_ERR_PKG_CANT_REMOVE,
|
||||
PM_ERR_PKG_INVALID_NAME,
|
||||
PM_ERR_PKG_CORRUPTED,
|
||||
PM_ERR_PKG_REPO_NOT_FOUND,
|
||||
/* Deltas */
|
||||
PM_ERR_DLT_CORRUPTED,
|
||||
PM_ERR_DLT_INVALID,
|
||||
PM_ERR_DLT_PATCHFAILED,
|
||||
/* Groups */
|
||||
PM_ERR_GRP_NOT_FOUND,
|
||||
@@ -477,14 +525,14 @@ enum _pmerrno_t {
|
||||
/* Misc */
|
||||
PM_ERR_USER_ABORT,
|
||||
PM_ERR_INTERNAL_ERROR,
|
||||
PM_ERR_LIBARCHIVE_ERROR,
|
||||
PM_ERR_DB_SYNC,
|
||||
PM_ERR_RETRIEVE,
|
||||
PM_ERR_PKG_HOLD,
|
||||
PM_ERR_INVALID_REGEX,
|
||||
/* Downloading */
|
||||
PM_ERR_CONNECT_FAILED,
|
||||
PM_ERR_FORK_FAILED
|
||||
/* External library errors */
|
||||
PM_ERR_LIBARCHIVE,
|
||||
PM_ERR_LIBDOWNLOAD,
|
||||
PM_ERR_EXTERNAL_DOWNLOAD
|
||||
};
|
||||
|
||||
extern enum _pmerrno_t pm_errno;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alpm_list.c
|
||||
*
|
||||
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -17,15 +17,16 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* libalpm */
|
||||
#include "alpm_list.h"
|
||||
#include "util.h"
|
||||
|
||||
/* check exported library symbols with: nm -C -D <lib> */
|
||||
#define SYMEXPORT __attribute__((visibility("default")))
|
||||
#define SYMHIDDEN __attribute__((visibility("internal")))
|
||||
|
||||
/**
|
||||
* @addtogroup alpm_list List Functions
|
||||
@@ -39,25 +40,6 @@
|
||||
|
||||
/* Allocation */
|
||||
|
||||
/**
|
||||
* @brief Allocate a new alpm_list_t.
|
||||
*
|
||||
* @return a new alpm_list_t item, or NULL on failure
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_new()
|
||||
{
|
||||
alpm_list_t *list = NULL;
|
||||
|
||||
list = malloc(sizeof(alpm_list_t));
|
||||
if(list) {
|
||||
list->data = NULL;
|
||||
list->prev = list; /* maintain a back reference to the tail pointer */
|
||||
list->next = NULL;
|
||||
}
|
||||
|
||||
return(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Free a list, but not the contained data.
|
||||
*
|
||||
@@ -107,30 +89,26 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
|
||||
{
|
||||
alpm_list_t *ptr, *lp;
|
||||
|
||||
ptr = list;
|
||||
ptr = calloc(1, sizeof(alpm_list_t));
|
||||
if(ptr == NULL) {
|
||||
ptr = alpm_list_new();
|
||||
if(ptr == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
return(list);
|
||||
}
|
||||
|
||||
lp = alpm_list_last(ptr);
|
||||
if(lp == ptr && lp->data == NULL) {
|
||||
/* nada */
|
||||
} else {
|
||||
lp->next = alpm_list_new();
|
||||
if(lp->next == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
lp->next->prev = lp;
|
||||
lp = lp->next;
|
||||
list->prev = lp;
|
||||
ptr->data = data;
|
||||
ptr->next = NULL;
|
||||
|
||||
/* Special case: the input list is empty */
|
||||
if(list == NULL) {
|
||||
ptr->prev = ptr;
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
lp->data = data;
|
||||
lp = alpm_list_last(list);
|
||||
lp->next = ptr;
|
||||
ptr->prev = lp;
|
||||
list->prev = ptr;
|
||||
|
||||
return(ptr);
|
||||
return(list);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,12 +122,15 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
|
||||
{
|
||||
if(!fn) {
|
||||
return alpm_list_add(list, data);
|
||||
if(!fn || !list) {
|
||||
return(alpm_list_add(list, data));
|
||||
} else {
|
||||
alpm_list_t *add = NULL, *prev = NULL, *next = list;
|
||||
|
||||
add = alpm_list_new();
|
||||
add = calloc(1, sizeof(alpm_list_t));
|
||||
if(add == NULL) {
|
||||
return(list);
|
||||
}
|
||||
add->data = data;
|
||||
|
||||
/* Find insertion point. */
|
||||
@@ -159,26 +140,25 @@ alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_
|
||||
next = next->next;
|
||||
}
|
||||
|
||||
/* Insert node before insertion point. */
|
||||
add->prev = prev;
|
||||
add->next = next;
|
||||
|
||||
if(next != NULL) {
|
||||
next->prev = add; /* Not at end. */
|
||||
}
|
||||
|
||||
if(prev != NULL) {
|
||||
prev->next = add; /* In middle. */
|
||||
} else {
|
||||
list = add; /* At beginning, or new list */
|
||||
}
|
||||
|
||||
if(next == NULL) {
|
||||
/* At end, adjust tail pointer on head node */
|
||||
/* Insert the add node to the list */
|
||||
if(prev == NULL) { /* special case: we insert add as the first element */
|
||||
add->prev = list->prev; /* list != NULL */
|
||||
add->next = list;
|
||||
list->prev = add;
|
||||
return(add);
|
||||
} else if(next == NULL) { /* another special case: add last element */
|
||||
add->prev = prev;
|
||||
add->next = NULL;
|
||||
prev->next = add;
|
||||
list->prev = add;
|
||||
return(list);
|
||||
} else {
|
||||
add->prev = prev;
|
||||
add->next = next;
|
||||
next->prev = add;
|
||||
prev->next = add;
|
||||
return(list);
|
||||
}
|
||||
|
||||
return(list);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,10 +178,10 @@ alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
|
||||
alpm_list_t *tmp;
|
||||
|
||||
if (first == NULL) {
|
||||
return second;
|
||||
return(second);
|
||||
}
|
||||
if (second == NULL) {
|
||||
return first;
|
||||
return(first);
|
||||
}
|
||||
/* tmp is the last element of the first list */
|
||||
tmp = first->prev;
|
||||
@@ -322,12 +302,16 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack, const void *needl
|
||||
*data = NULL;
|
||||
}
|
||||
|
||||
if(needle == NULL) {
|
||||
return(haystack);
|
||||
}
|
||||
|
||||
while(i) {
|
||||
if(i->data == NULL) {
|
||||
continue;
|
||||
}
|
||||
tmp = i->next;
|
||||
if(fn(needle, i->data) == 0) {
|
||||
if(fn(i->data, needle) == 0) {
|
||||
/* we found a matching item */
|
||||
if(i == haystack) {
|
||||
/* Special case: removing the head node which has a back reference to
|
||||
@@ -370,6 +354,22 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack, const void *needl
|
||||
return(haystack);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remove a string from a list.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param needle the data member of the item we're removing
|
||||
* @param data output parameter containing data of the removed item
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
|
||||
const char *needle, char **data)
|
||||
{
|
||||
return(alpm_list_remove(haystack, (const void *)needle,
|
||||
(alpm_list_fn_cmp)strcmp, (void **)data));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a new list without any duplicates.
|
||||
*
|
||||
@@ -464,18 +464,22 @@ alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
|
||||
alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
|
||||
{
|
||||
const alpm_list_t *lp;
|
||||
alpm_list_t *newlist = NULL;
|
||||
alpm_list_t *newlist = NULL, *backup;
|
||||
|
||||
if(list == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
lp = alpm_list_last(list);
|
||||
if(list) {
|
||||
/* break our reverse circular list */
|
||||
list->prev = NULL;
|
||||
}
|
||||
/* break our reverse circular list */
|
||||
backup = list->prev;
|
||||
list->prev = NULL;
|
||||
|
||||
while(lp) {
|
||||
newlist = alpm_list_add(newlist, lp->data);
|
||||
lp = lp->prev;
|
||||
}
|
||||
list->prev = backup; /* restore tail pointer */
|
||||
return(newlist);
|
||||
}
|
||||
|
||||
@@ -490,14 +494,18 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
|
||||
*/
|
||||
inline alpm_list_t SYMEXPORT *alpm_list_first(const alpm_list_t *list)
|
||||
{
|
||||
return((alpm_list_t*)list);
|
||||
if(list) {
|
||||
return((alpm_list_t*)list);
|
||||
} else {
|
||||
return(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return nth element from list (starting from 0).
|
||||
*
|
||||
* @param list the list
|
||||
* @param n the index of the item to find
|
||||
* @param n the index of the item to find (n < alpm_list_count(list) IS needed)
|
||||
*
|
||||
* @return an alpm_list_t node for index `n`
|
||||
*/
|
||||
@@ -519,7 +527,11 @@ alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, int n)
|
||||
*/
|
||||
inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
|
||||
{
|
||||
return(node->next);
|
||||
if(node) {
|
||||
return(node->next);
|
||||
} else {
|
||||
return(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -594,7 +606,7 @@ void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle,
|
||||
}
|
||||
|
||||
/* trivial helper function for alpm_list_find_ptr */
|
||||
static int ptrcmp(const void *p, const void *q)
|
||||
static int ptr_cmp(const void *p, const void *q)
|
||||
{
|
||||
return(p != q);
|
||||
}
|
||||
@@ -611,7 +623,7 @@ static int ptrcmp(const void *p, const void *q)
|
||||
*/
|
||||
void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle)
|
||||
{
|
||||
return(alpm_list_find(haystack, needle, ptrcmp));
|
||||
return(alpm_list_find(haystack, needle, ptr_cmp));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -622,9 +634,11 @@ void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack, const void *need
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack, const char *needle)
|
||||
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
|
||||
const char *needle)
|
||||
{
|
||||
return((char *)alpm_list_find(haystack, (const void*)needle, (alpm_list_fn_cmp)strcmp));
|
||||
return((char *)alpm_list_find(haystack, (const void*)needle,
|
||||
(alpm_list_fn_cmp)strcmp));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
#ifndef _ALPM_LIST_H
|
||||
#define _ALPM_LIST_H
|
||||
|
||||
#include <stdlib.h> /* size_t */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -45,7 +47,6 @@ typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */
|
||||
typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */
|
||||
|
||||
/* allocation */
|
||||
alpm_list_t *alpm_list_new(void);
|
||||
void alpm_list_free(alpm_list_t *list);
|
||||
void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);
|
||||
|
||||
@@ -56,6 +57,7 @@ alpm_list_t *alpm_list_join(alpm_list_t *first, alpm_list_t *second);
|
||||
alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn);
|
||||
alpm_list_t *alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn);
|
||||
alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data);
|
||||
alpm_list_t *alpm_list_remove_str(alpm_list_t *haystack, const char *needle, char **data);
|
||||
alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list);
|
||||
alpm_list_t *alpm_list_strdup(const alpm_list_t *list);
|
||||
alpm_list_t *alpm_list_copy(const alpm_list_t *list);
|
||||
|
||||
@@ -42,6 +42,9 @@ int _alpm_backup_split(const char *string, char **file, char **hash)
|
||||
if(ptr == NULL) {
|
||||
if(file) {
|
||||
*file = str;
|
||||
} else {
|
||||
/* don't need our dup as the fname wasn't requested, so free it */
|
||||
FREE(str);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
288
lib/libalpm/be_package.c
Normal file
288
lib/libalpm/be_package.c
Normal file
@@ -0,0 +1,288 @@
|
||||
/*
|
||||
* be_package.c
|
||||
*
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <ctype.h>
|
||||
#include <locale.h> /* setlocale */
|
||||
|
||||
/* libarchive */
|
||||
#include <archive.h>
|
||||
#include <archive_entry.h>
|
||||
|
||||
/* libalpm */
|
||||
#include "alpm_list.h"
|
||||
#include "util.h"
|
||||
#include "log.h"
|
||||
#include "package.h"
|
||||
#include "deps.h" /* _alpm_splitdep */
|
||||
|
||||
/**
|
||||
* Parses the package description file for a package into a pmpkg_t struct.
|
||||
* @param archive the archive to read from, pointed at the .PKGINFO entry
|
||||
* @param newpkg an empty pmpkg_t struct to fill with package info
|
||||
*
|
||||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
static int parse_descfile(struct archive *a, pmpkg_t *newpkg)
|
||||
{
|
||||
char line[PATH_MAX];
|
||||
char *ptr = NULL;
|
||||
char *key = NULL;
|
||||
int linenum = 0;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* loop until we reach EOF (where archive_fgets will return NULL) */
|
||||
while(_alpm_archive_fgets(line, PATH_MAX, a) != NULL) {
|
||||
linenum++;
|
||||
_alpm_strtrim(line);
|
||||
if(strlen(line) == 0 || line[0] == '#') {
|
||||
continue;
|
||||
}
|
||||
ptr = line;
|
||||
key = strsep(&ptr, "=");
|
||||
if(key == NULL || ptr == NULL) {
|
||||
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
|
||||
newpkg->name ? newpkg->name : "error", linenum);
|
||||
} else {
|
||||
key = _alpm_strtrim(key);
|
||||
ptr = _alpm_strtrim(ptr);
|
||||
if(!strcmp(key, "pkgname")) {
|
||||
STRDUP(newpkg->name, ptr, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
} else if(!strcmp(key, "pkgver")) {
|
||||
STRDUP(newpkg->version, ptr, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
} else if(!strcmp(key, "pkgdesc")) {
|
||||
STRDUP(newpkg->desc, ptr, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
} else if(!strcmp(key, "group")) {
|
||||
newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
|
||||
} else if(!strcmp(key, "url")) {
|
||||
STRDUP(newpkg->url, ptr, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
} else if(!strcmp(key, "license")) {
|
||||
newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
|
||||
} else if(!strcmp(key, "builddate")) {
|
||||
char first = tolower(ptr[0]);
|
||||
if(first > 'a' && first < 'z') {
|
||||
struct tm tmp_tm = {0}; //initialize to null in case of failure
|
||||
setlocale(LC_TIME, "C");
|
||||
strptime(ptr, "%a %b %e %H:%M:%S %Y", &tmp_tm);
|
||||
newpkg->builddate = mktime(&tmp_tm);
|
||||
setlocale(LC_TIME, "");
|
||||
} else {
|
||||
newpkg->builddate = atol(ptr);
|
||||
}
|
||||
} else if(!strcmp(key, "packager")) {
|
||||
STRDUP(newpkg->packager, ptr, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
} else if(!strcmp(key, "arch")) {
|
||||
STRDUP(newpkg->arch, ptr, RET_ERR(PM_ERR_MEMORY, -1));
|
||||
} else if(!strcmp(key, "size")) {
|
||||
/* size in the raw package is uncompressed (installed) size */
|
||||
newpkg->isize = atol(ptr);
|
||||
} else if(!strcmp(key, "depend")) {
|
||||
pmdepend_t *dep = _alpm_splitdep(ptr);
|
||||
newpkg->depends = alpm_list_add(newpkg->depends, dep);
|
||||
} else if(!strcmp(key, "optdepend")) {
|
||||
newpkg->optdepends = alpm_list_add(newpkg->optdepends, strdup(ptr));
|
||||
} else if(!strcmp(key, "conflict")) {
|
||||
newpkg->conflicts = alpm_list_add(newpkg->conflicts, strdup(ptr));
|
||||
} else if(!strcmp(key, "replaces")) {
|
||||
newpkg->replaces = alpm_list_add(newpkg->replaces, strdup(ptr));
|
||||
} else if(!strcmp(key, "provides")) {
|
||||
newpkg->provides = alpm_list_add(newpkg->provides, strdup(ptr));
|
||||
} else if(!strcmp(key, "backup")) {
|
||||
newpkg->backup = alpm_list_add(newpkg->backup, strdup(ptr));
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
|
||||
newpkg->name ? newpkg->name : "error", linenum);
|
||||
}
|
||||
}
|
||||
line[0] = '\0';
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a package and create the corresponding pmpkg_t struct.
|
||||
* @param pkgfile path to the package file
|
||||
* @param full whether to stop the load after metadata is read or continue
|
||||
* through the full archive
|
||||
* @return An information filled pmpkg_t struct
|
||||
*/
|
||||
static pmpkg_t *pkg_load(const char *pkgfile, unsigned short full)
|
||||
{
|
||||
int ret = ARCHIVE_OK;
|
||||
int config = 0;
|
||||
struct archive *archive;
|
||||
struct archive_entry *entry;
|
||||
pmpkg_t *newpkg = NULL;
|
||||
struct stat st;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(pkgfile == NULL || strlen(pkgfile) == 0) {
|
||||
RET_ERR(PM_ERR_WRONG_ARGS, NULL);
|
||||
}
|
||||
|
||||
if(stat(pkgfile, &st) != 0) {
|
||||
RET_ERR(PM_ERR_PKG_OPEN, NULL);
|
||||
}
|
||||
|
||||
if((archive = archive_read_new()) == NULL) {
|
||||
RET_ERR(PM_ERR_LIBARCHIVE, NULL);
|
||||
}
|
||||
|
||||
archive_read_support_compression_all(archive);
|
||||
archive_read_support_format_all(archive);
|
||||
|
||||
if (archive_read_open_filename(archive, pkgfile,
|
||||
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
|
||||
RET_ERR(PM_ERR_PKG_OPEN, NULL);
|
||||
}
|
||||
|
||||
newpkg = _alpm_pkg_new();
|
||||
if(newpkg == NULL) {
|
||||
archive_read_finish(archive);
|
||||
RET_ERR(PM_ERR_MEMORY, NULL);
|
||||
}
|
||||
|
||||
newpkg->filename = strdup(pkgfile);
|
||||
newpkg->size = st.st_size;
|
||||
|
||||
/* If full is false, only read through the archive until we find our needed
|
||||
* metadata. If it is true, read through the entire archive, which serves
|
||||
* as a verfication of integrity and allows us to create the filelist. */
|
||||
while((ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
|
||||
const char *entry_name = archive_entry_pathname(entry);
|
||||
|
||||
if(strcmp(entry_name, ".PKGINFO") == 0) {
|
||||
/* parse the info file */
|
||||
if(parse_descfile(archive, newpkg) != 0) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not parse package description file in %s\n"),
|
||||
pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
if(newpkg->name == NULL || strlen(newpkg->name) == 0) {
|
||||
_alpm_log(PM_LOG_ERROR, _("missing package name in %s\n"), pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
if(newpkg->version == NULL || strlen(newpkg->version) == 0) {
|
||||
_alpm_log(PM_LOG_ERROR, _("missing package version in %s\n"), pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
config = 1;
|
||||
continue;
|
||||
} else if(strcmp(entry_name, ".INSTALL") == 0) {
|
||||
newpkg->scriptlet = 1;
|
||||
} else if(*entry_name == '.') {
|
||||
/* for now, ignore all files starting with '.' that haven't
|
||||
* already been handled (for future possibilities) */
|
||||
} else {
|
||||
/* Keep track of all files for filelist generation */
|
||||
newpkg->files = alpm_list_add(newpkg->files, strdup(entry_name));
|
||||
}
|
||||
|
||||
if(archive_read_data_skip(archive)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
|
||||
pkgfile, archive_error_string(archive));
|
||||
pm_errno = PM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* if we are not doing a full read, see if we have all we need */
|
||||
if(!full && config) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occured */
|
||||
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
|
||||
pkgfile, archive_error_string(archive));
|
||||
pm_errno = PM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if(!config) {
|
||||
_alpm_log(PM_LOG_ERROR, _("missing package metadata in %s\n"), pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
|
||||
archive_read_finish(archive);
|
||||
|
||||
/* internal fields for package struct */
|
||||
newpkg->origin = PKG_FROM_FILE;
|
||||
newpkg->origin_data.file = strdup(pkgfile);
|
||||
|
||||
if(full) {
|
||||
/* "checking for conflicts" requires a sorted list, ensure that here */
|
||||
_alpm_log(PM_LOG_DEBUG, "sorting package filelist for %s\n", pkgfile);
|
||||
newpkg->files = alpm_list_msort(newpkg->files, alpm_list_count(newpkg->files),
|
||||
_alpm_str_cmp);
|
||||
newpkg->infolevel = INFRQ_ALL;
|
||||
} else {
|
||||
/* get rid of any partial filelist we may have collected, it is invalid */
|
||||
FREELIST(newpkg->files);
|
||||
newpkg->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_DEPENDS;
|
||||
}
|
||||
|
||||
return(newpkg);
|
||||
|
||||
pkg_invalid:
|
||||
pm_errno = PM_ERR_PKG_INVALID;
|
||||
error:
|
||||
_alpm_pkg_free(newpkg);
|
||||
archive_read_finish(archive);
|
||||
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/** Create a package from a file.
|
||||
* If full is false, the archive is read only until all necessary
|
||||
* metadata is found. If it is true, the entire archive is read, which
|
||||
* serves as a verfication of integrity and the filelist can be created.
|
||||
* @param filename location of the package tarball
|
||||
* @param full whether to stop the load after metadata is read or continue
|
||||
* through the full archive
|
||||
* @param pkg address of the package pointer
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_pkg_load(const char *filename, unsigned short full,
|
||||
pmpkg_t **pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(filename != NULL && strlen(filename) != 0,
|
||||
RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
*pkg = pkg_load(filename, full);
|
||||
if(*pkg == NULL) {
|
||||
/* pm_errno is set by pkg_load */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
@@ -31,7 +30,6 @@
|
||||
#include "log.h"
|
||||
#include "alpm.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "package.h"
|
||||
#include "group.h"
|
||||
#include "db.h"
|
||||
@@ -41,32 +39,21 @@
|
||||
*/
|
||||
int _alpm_db_load_pkgcache(pmdb_t *db)
|
||||
{
|
||||
pmpkg_t *info;
|
||||
int count = 0;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(db == NULL) {
|
||||
return(-1);
|
||||
}
|
||||
|
||||
_alpm_db_free_pkgcache(db);
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "loading package cache for repository '%s'\n",
|
||||
db->treename);
|
||||
|
||||
_alpm_db_rewind(db);
|
||||
while((info = _alpm_db_scan(db, NULL)) != NULL) {
|
||||
_alpm_log(PM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
|
||||
alpm_pkg_get_name(info), db->treename);
|
||||
info->origin = PKG_FROM_CACHE;
|
||||
info->origin_data.db = db;
|
||||
/* add to the collection */
|
||||
db->pkgcache = alpm_list_add(db->pkgcache, info);
|
||||
count++;
|
||||
db->treename);
|
||||
if(_alpm_db_populate(db) == -1) {
|
||||
_alpm_log(PM_LOG_DEBUG,
|
||||
"failed to load package cache for repository '%s'\n", db->treename);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
db->pkgcache = alpm_list_msort(db->pkgcache, count, _alpm_pkg_cmp);
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -81,10 +68,7 @@ void _alpm_db_free_pkgcache(pmdb_t *db)
|
||||
_alpm_log(PM_LOG_DEBUG, "freeing package cache for repository '%s'\n",
|
||||
db->treename);
|
||||
|
||||
alpm_list_t *tmp;
|
||||
for(tmp = db->pkgcache; tmp; tmp = alpm_list_next(tmp)) {
|
||||
_alpm_pkg_free(tmp->data);
|
||||
}
|
||||
alpm_list_free_inner(db->pkgcache, (alpm_list_fn_free)_alpm_pkg_free);
|
||||
alpm_list_free(db->pkgcache);
|
||||
db->pkgcache = NULL;
|
||||
|
||||
@@ -113,6 +97,7 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
|
||||
return(db->pkgcache);
|
||||
}
|
||||
|
||||
/* "duplicate" pkg with BASE info (to spare some memory) then add it to pkgcache */
|
||||
int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
|
||||
{
|
||||
pmpkg_t *newpkg;
|
||||
@@ -123,10 +108,21 @@ int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
|
||||
return(-1);
|
||||
}
|
||||
|
||||
newpkg = _alpm_pkg_dup(pkg);
|
||||
newpkg = _alpm_pkg_new();
|
||||
if(newpkg == NULL) {
|
||||
return(-1);
|
||||
}
|
||||
newpkg->name = strdup(pkg->name);
|
||||
newpkg->version = strdup(pkg->version);
|
||||
if(newpkg->name == NULL || newpkg->version == NULL) {
|
||||
pm_errno = PM_ERR_MEMORY;
|
||||
_alpm_pkg_free(newpkg);
|
||||
return(-1);
|
||||
}
|
||||
newpkg->origin = PKG_FROM_CACHE;
|
||||
newpkg->origin_data.db = db;
|
||||
newpkg->infolevel = INFRQ_BASE;
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "adding entry '%s' in '%s' cache\n",
|
||||
alpm_pkg_get_name(newpkg), db->treename);
|
||||
db->pkgcache = alpm_list_add_sorted(db->pkgcache, newpkg, _alpm_pkg_cmp);
|
||||
@@ -181,7 +177,7 @@ pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target)
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
return(_alpm_pkg_find(target, pkgcache));
|
||||
return(_alpm_pkg_find(pkgcache, target));
|
||||
}
|
||||
|
||||
/* Returns a new group cache from db.
|
||||
@@ -208,33 +204,29 @@ int _alpm_db_load_grpcache(pmdb_t *db)
|
||||
pmpkg_t *pkg = lp->data;
|
||||
|
||||
for(i = alpm_pkg_get_groups(pkg); i; i = i->next) {
|
||||
if(!alpm_list_find_str(db->grpcache, i->data)) {
|
||||
pmgrp_t *grp = _alpm_grp_new();
|
||||
const char *grpname = i->data;
|
||||
alpm_list_t *j;
|
||||
pmgrp_t *grp = NULL;
|
||||
int found = 0;
|
||||
|
||||
strncpy(grp->name, i->data, GRP_NAME_LEN);
|
||||
grp->name[GRP_NAME_LEN-1] = '\0';
|
||||
grp->packages = alpm_list_add_sorted(grp->packages,
|
||||
/* gross signature forces us to
|
||||
* discard const */
|
||||
(void*)alpm_pkg_get_name(pkg),
|
||||
_alpm_str_cmp);
|
||||
db->grpcache = alpm_list_add_sorted(db->grpcache, grp, _alpm_grp_cmp);
|
||||
} else {
|
||||
alpm_list_t *j;
|
||||
/* first look through the group cache for a group with this name */
|
||||
for(j = db->grpcache; j; j = j->next) {
|
||||
grp = j->data;
|
||||
|
||||
for(j = db->grpcache; j; j = j->next) {
|
||||
pmgrp_t *grp = j->data;
|
||||
|
||||
if(strcmp(grp->name, i->data) == 0) {
|
||||
const char *pkgname = alpm_pkg_get_name(pkg);
|
||||
if(!alpm_list_find_str(grp->packages, pkgname)) {
|
||||
grp->packages = alpm_list_add_sorted(grp->packages,
|
||||
(void*)pkgname,
|
||||
_alpm_str_cmp);
|
||||
}
|
||||
}
|
||||
if(strcmp(grp->name, grpname) == 0
|
||||
&& !alpm_list_find_ptr(grp->packages, pkg)) {
|
||||
grp->packages = alpm_list_add(grp->packages, pkg);
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(found) {
|
||||
continue;
|
||||
}
|
||||
/* we didn't find the group, so create a new one with this name */
|
||||
grp = _alpm_grp_new(grpname);
|
||||
grp->packages = alpm_list_add(grp->packages, pkg);
|
||||
db->grpcache = alpm_list_add(db->grpcache, grp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,10 +244,6 @@ void _alpm_db_free_grpcache(pmdb_t *db)
|
||||
}
|
||||
|
||||
for(lg = db->grpcache; lg; lg = lg->next) {
|
||||
pmgrp_t *grp = lg->data;
|
||||
|
||||
alpm_list_free(grp->packages);
|
||||
grp->packages = NULL;
|
||||
_alpm_grp_free(lg->data);
|
||||
lg->data = NULL;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -36,7 +35,6 @@
|
||||
#include "handle.h"
|
||||
#include "trans.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "log.h"
|
||||
#include "cache.h"
|
||||
#include "deps.h"
|
||||
@@ -49,12 +47,30 @@ pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2)
|
||||
|
||||
MALLOC(conflict, sizeof(pmconflict_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
strncpy(conflict->package1, package1, PKG_NAME_LEN);
|
||||
strncpy(conflict->package2, package2, PKG_NAME_LEN);
|
||||
STRDUP(conflict->package1, package1, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
STRDUP(conflict->package2, package2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
return(conflict);
|
||||
}
|
||||
|
||||
void _alpm_conflict_free(pmconflict_t *conflict)
|
||||
{
|
||||
FREE(conflict->package2);
|
||||
FREE(conflict->package1);
|
||||
FREE(conflict);
|
||||
}
|
||||
|
||||
pmconflict_t *_alpm_conflict_dup(const pmconflict_t *conflict)
|
||||
{
|
||||
pmconflict_t *newconflict;
|
||||
CALLOC(newconflict, 1, sizeof(pmconflict_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
STRDUP(newconflict->package1, conflict->package1, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
STRDUP(newconflict->package2, conflict->package2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
return(newconflict);
|
||||
}
|
||||
|
||||
int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
@@ -86,7 +102,7 @@ static int does_conflict(pmpkg_t *pkg1, const char *conflict, pmpkg_t *pkg2)
|
||||
{
|
||||
const char *pkg1name = alpm_pkg_get_name(pkg1);
|
||||
const char *pkg2name = alpm_pkg_get_name(pkg2);
|
||||
pmdepend_t *conf = alpm_splitdep(conflict);
|
||||
pmdepend_t *conf = _alpm_splitdep(conflict);
|
||||
int match = 0;
|
||||
|
||||
match = alpm_depcmp(pkg2, conf);
|
||||
@@ -94,7 +110,7 @@ static int does_conflict(pmpkg_t *pkg1, const char *conflict, pmpkg_t *pkg2)
|
||||
_alpm_log(PM_LOG_DEBUG, "package %s conflicts with %s (by %s)\n",
|
||||
pkg1name, pkg2name, conflict);
|
||||
}
|
||||
FREE(conf);
|
||||
_alpm_dep_free(conf);
|
||||
return(match);
|
||||
}
|
||||
|
||||
@@ -110,7 +126,7 @@ static void add_conflict(alpm_list_t **baddeps, const char *pkg1,
|
||||
if(conflict && !_alpm_conflict_isin(conflict, *baddeps)) {
|
||||
*baddeps = alpm_list_add(*baddeps, conflict);
|
||||
} else {
|
||||
FREE(conflict);
|
||||
_alpm_conflict_free(conflict);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,9 +216,13 @@ alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages)
|
||||
return(baddeps);
|
||||
}
|
||||
|
||||
/* Check for transaction conflicts */
|
||||
alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages) {
|
||||
return(alpm_list_join(_alpm_innerconflicts(packages), _alpm_outerconflicts(db, packages)));
|
||||
/** Check the package conflicts in a database
|
||||
*
|
||||
* @param db_local the database to check
|
||||
* @return an alpm_list_t of pmconflict_t
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_checkdbconflicts(pmdb_t *db_local) {
|
||||
return(_alpm_innerconflicts(_alpm_db_get_pkgcache(db_local)));
|
||||
}
|
||||
|
||||
/* Returns a alpm_list_t* of file conflicts.
|
||||
@@ -251,10 +271,7 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
|
||||
alpm_list_t *ret = NULL;
|
||||
alpm_list_t *pA = filesA, *pB = filesB;
|
||||
|
||||
if(pB == NULL) {
|
||||
return(alpm_list_strdup(pA));
|
||||
}
|
||||
|
||||
/* if both filesA and filesB have entries, do this loop */
|
||||
while(pA && pB) {
|
||||
const char *strA = pA->data;
|
||||
const char *strB = pB->data;
|
||||
@@ -279,6 +296,15 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
|
||||
}
|
||||
}
|
||||
}
|
||||
/* ensure we have completely emptied pA */
|
||||
while(pA) {
|
||||
const char *strA = pA->data;
|
||||
/* skip directories */
|
||||
if(strA[strlen(strA)-1] != '/') {
|
||||
ret = alpm_list_add(ret, strdup(strA));
|
||||
}
|
||||
pA = pA->next;
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
@@ -293,15 +319,15 @@ static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,
|
||||
const char* name1, const char* name2)
|
||||
{
|
||||
pmfileconflict_t *conflict;
|
||||
MALLOC(conflict, sizeof(pmfileconflict_t), return(conflicts));
|
||||
MALLOC(conflict, sizeof(pmfileconflict_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
conflict->type = type;
|
||||
strncpy(conflict->target, name1, PKG_NAME_LEN);
|
||||
strncpy(conflict->file, filestr, CONFLICT_FILE_LEN);
|
||||
STRDUP(conflict->target, name1, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
STRDUP(conflict->file, filestr, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
if(name2) {
|
||||
strncpy(conflict->ctarget, name2, PKG_NAME_LEN);
|
||||
STRDUP(conflict->ctarget, name2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
} else {
|
||||
conflict->ctarget[0] = '\0';
|
||||
conflict->ctarget = "";
|
||||
}
|
||||
|
||||
conflicts = alpm_list_add(conflicts, conflict);
|
||||
@@ -311,6 +337,16 @@ static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,
|
||||
return(conflicts);
|
||||
}
|
||||
|
||||
void _alpm_fileconflict_free(pmfileconflict_t *conflict)
|
||||
{
|
||||
if(strlen(conflict->ctarget) > 0) {
|
||||
FREE(conflict->ctarget);
|
||||
}
|
||||
FREE(conflict->file);;
|
||||
FREE(conflict->target);
|
||||
FREE(conflict);
|
||||
}
|
||||
|
||||
/* Find file conflicts that may occur during the transaction with two checks:
|
||||
* 1: check every target against every target
|
||||
* 2: check every target against the filesystem */
|
||||
@@ -345,13 +381,13 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
|
||||
PROGRESS(trans, PM_TRANS_PROGRESS_CONFLICTS_START, "", (percent * 100),
|
||||
numtargs, current);
|
||||
/* CHECK 1: check every target against every target */
|
||||
_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s\n",
|
||||
alpm_pkg_get_name(p1));
|
||||
for(j = i->next; j; j = j->next) {
|
||||
p2 = j->data;
|
||||
if(!p2) {
|
||||
continue;
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s and %s\n",
|
||||
alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
|
||||
tmpfiles = chk_fileconflicts(alpm_pkg_get_files(p1), alpm_pkg_get_files(p2));
|
||||
|
||||
if(tmpfiles) {
|
||||
@@ -410,26 +446,6 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
|
||||
if(!skip_conflict) {
|
||||
_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s\n", path);
|
||||
|
||||
/* Make sure the possible conflict is not a symlink that points to a
|
||||
* path in the old package. This is kind of dirty with inode usage */
|
||||
/* TODO this seems ripe for a cleanup */
|
||||
if(dbpkg) {
|
||||
struct stat pkgbuf;
|
||||
char str[PATH_MAX+1];
|
||||
unsigned ok = 0;
|
||||
for(k = dbpkg->files; k; k = k->next) {
|
||||
snprintf(str, PATH_MAX, "%s%s", root, (char*)k->data);
|
||||
if(!_alpm_lstat(str, &pkgbuf) && lsbuf.st_ino == pkgbuf.st_ino) {
|
||||
ok = 1;
|
||||
_alpm_log(PM_LOG_DEBUG, "conflict was a symlink: %s\n", path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(ok == 1) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Look at all the targets to see if file has changed hands */
|
||||
int resolved_conflict = 0; /* have we acted on this conflict? */
|
||||
for(k = targets; k; k = k->next) {
|
||||
|
||||
@@ -23,27 +23,28 @@
|
||||
#include "db.h"
|
||||
#include "package.h"
|
||||
|
||||
#define CONFLICT_FILE_LEN 512
|
||||
|
||||
struct __pmconflict_t {
|
||||
char package1[PKG_NAME_LEN];
|
||||
char package2[PKG_NAME_LEN];
|
||||
char *package1;
|
||||
char *package2;
|
||||
};
|
||||
|
||||
struct __pmfileconflict_t {
|
||||
char target[PKG_NAME_LEN];
|
||||
char *target;
|
||||
pmfileconflicttype_t type;
|
||||
char file[CONFLICT_FILE_LEN];
|
||||
char ctarget[PKG_NAME_LEN];
|
||||
char *file;
|
||||
char *ctarget;
|
||||
};
|
||||
|
||||
pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2);
|
||||
pmconflict_t *_alpm_conflict_dup(const pmconflict_t *conflict);
|
||||
void _alpm_conflict_free(pmconflict_t *conflict);
|
||||
int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack);
|
||||
alpm_list_t *_alpm_innerconflicts(alpm_list_t *packages);
|
||||
alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages);
|
||||
alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages);
|
||||
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root);
|
||||
|
||||
void _alpm_fileconflict_free(pmfileconflict_t *conflict);
|
||||
|
||||
#endif /* _ALPM_CONFLICT_H */
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
|
||||
228
lib/libalpm/db.c
228
lib/libalpm/db.c
@@ -23,12 +23,10 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h> /* uintmax_t */
|
||||
#include <sys/stat.h>
|
||||
#include <dirent.h>
|
||||
#include <regex.h>
|
||||
@@ -39,8 +37,6 @@
|
||||
#include "alpm_list.h"
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "server.h"
|
||||
#include "handle.h"
|
||||
#include "cache.h"
|
||||
#include "alpm.h"
|
||||
@@ -173,6 +169,8 @@ int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
int found = 0;
|
||||
char *newurl;
|
||||
int len = 0;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -189,15 +187,18 @@ int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
|
||||
RET_ERR(PM_ERR_DB_NOT_FOUND, -1);
|
||||
}
|
||||
|
||||
if(url && strlen(url)) {
|
||||
pmserver_t *server;
|
||||
if((server = _alpm_server_new(url)) == NULL) {
|
||||
/* pm_errno is set by _alpm_server_new */
|
||||
return(-1);
|
||||
if(url) {
|
||||
len = strlen(url);
|
||||
}
|
||||
if(len) {
|
||||
newurl = strdup(url);
|
||||
/* strip the trailing slash if one exists */
|
||||
if(newurl[len - 1] == '/') {
|
||||
newurl[len - 1] = '\0';
|
||||
}
|
||||
db->servers = alpm_list_add(db->servers, server);
|
||||
_alpm_log(PM_LOG_DEBUG, "adding new server to database '%s': protocol '%s', server '%s', path '%s'\n",
|
||||
db->treename, server->s_url->scheme, server->s_url->host, server->s_url->doc);
|
||||
db->servers = alpm_list_add(db->servers, newurl);
|
||||
_alpm_log(PM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
} else {
|
||||
FREELIST(db->servers);
|
||||
_alpm_log(PM_LOG_DEBUG, "serverlist flushed for '%s'\n", db->treename);
|
||||
@@ -206,98 +207,6 @@ int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
|
||||
return(0);
|
||||
}
|
||||
|
||||
/** Update a package database
|
||||
* @param force if true, then forces the update, otherwise update only in case
|
||||
* the database isn't up to date
|
||||
* @param db pointer to the package database to update
|
||||
* @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up
|
||||
* to date
|
||||
*/
|
||||
int SYMEXPORT alpm_db_update(int force, pmdb_t *db)
|
||||
{
|
||||
alpm_list_t *lp;
|
||||
char path[PATH_MAX];
|
||||
alpm_list_t *files = NULL;
|
||||
time_t newmtime = 0, lastupdate = 0;
|
||||
const char *dbpath;
|
||||
int ret;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
|
||||
ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
/* Verify we are in a transaction. This is done _mainly_ because we need a DB
|
||||
* lock - if we update without a db lock, we may kludge some other pacman
|
||||
* process that _has_ a lock.
|
||||
*/
|
||||
ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
|
||||
ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1));
|
||||
ASSERT(handle->trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1));
|
||||
|
||||
if(!alpm_list_find_ptr(handle->dbs_sync, db)) {
|
||||
RET_ERR(PM_ERR_DB_NOT_FOUND, -1);
|
||||
}
|
||||
|
||||
if(!force) {
|
||||
/* get the lastupdate time */
|
||||
lastupdate = _alpm_db_getlastupdate(db);
|
||||
if(lastupdate == 0) {
|
||||
_alpm_log(PM_LOG_DEBUG, "failed to get lastupdate time for %s\n",
|
||||
db->treename);
|
||||
}
|
||||
}
|
||||
|
||||
/* build a one-element list */
|
||||
snprintf(path, PATH_MAX, "%s" DBEXT, db->treename);
|
||||
files = alpm_list_add(files, strdup(path));
|
||||
|
||||
dbpath = alpm_option_get_dbpath();
|
||||
|
||||
ret = _alpm_downloadfiles_forreal(db->servers, dbpath, files, lastupdate,
|
||||
&newmtime, NULL, 0);
|
||||
FREELIST(files);
|
||||
if(ret == 1) {
|
||||
/* mtimes match, do nothing */
|
||||
pm_errno = 0;
|
||||
return(1);
|
||||
} else if(ret == -1) {
|
||||
/* we use downloadLastErrString and downloadLastErrCode here, error returns from
|
||||
* libdownload */
|
||||
_alpm_log(PM_LOG_DEBUG, "failed to sync db: %s [%d]\n",
|
||||
downloadLastErrString, downloadLastErrCode);
|
||||
RET_ERR(PM_ERR_DB_SYNC, -1);
|
||||
} else {
|
||||
if(newmtime != 0) {
|
||||
_alpm_log(PM_LOG_DEBUG, "sync: new mtime for %s: %ju\n",
|
||||
db->treename, (uintmax_t)newmtime);
|
||||
_alpm_db_setlastupdate(db, newmtime);
|
||||
}
|
||||
snprintf(path, PATH_MAX, "%s%s" DBEXT, dbpath, db->treename);
|
||||
|
||||
/* remove the old dir */
|
||||
_alpm_log(PM_LOG_DEBUG, "flushing database %s\n", db->path);
|
||||
for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) {
|
||||
pmpkg_t *pkg = lp->data;
|
||||
if(pkg && _alpm_db_remove(db, pkg) == -1) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s%s\n"), db->treename,
|
||||
alpm_pkg_get_name(pkg));
|
||||
RET_ERR(PM_ERR_DB_REMOVE, -1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Cache needs to be rebuild */
|
||||
_alpm_db_free_pkgcache(db);
|
||||
|
||||
/* uncompress the sync database */
|
||||
if(_alpm_db_install(db, path) == -1) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/** Get the name of a package database
|
||||
* @param db pointer to the package database
|
||||
* @return the name of the package database, NULL on error
|
||||
@@ -319,8 +228,7 @@ const char SYMEXPORT *alpm_db_get_name(const pmdb_t *db)
|
||||
*/
|
||||
const char SYMEXPORT *alpm_db_get_url(const pmdb_t *db)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
pmserver_t *s;
|
||||
char *url;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -328,10 +236,9 @@ const char SYMEXPORT *alpm_db_get_url(const pmdb_t *db)
|
||||
ASSERT(handle != NULL, return(NULL));
|
||||
ASSERT(db != NULL, return(NULL));
|
||||
|
||||
s = (pmserver_t*)db->servers->data;
|
||||
url = (char*)db->servers->data;
|
||||
|
||||
snprintf(path, PATH_MAX, "%s://%s%s", s->s_url->scheme, s->s_url->host, s->s_url->doc);
|
||||
return strdup(path);
|
||||
return(url);
|
||||
}
|
||||
|
||||
|
||||
@@ -367,23 +274,6 @@ alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db)
|
||||
return(_alpm_db_get_pkgcache(db));
|
||||
}
|
||||
|
||||
/** Get the list of packages that a package provides
|
||||
* @param db pointer to the package database to get the package from
|
||||
* @param name name of the package
|
||||
* @return the list of packages on success, NULL on error
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_db_whatprovides(pmdb_t *db, const char *name)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(handle != NULL, return(NULL));
|
||||
ASSERT(db != NULL, return(NULL));
|
||||
ASSERT(name != NULL && strlen(name) != 0, return(NULL));
|
||||
|
||||
return(_alpm_db_whatprovides(db, name));
|
||||
}
|
||||
|
||||
/** Get a group entry from a package database
|
||||
* @param db pointer to the package database to get the group from
|
||||
* @param name of the group
|
||||
@@ -445,41 +335,39 @@ pmdb_t *_alpm_db_new(const char *dbpath, const char *treename)
|
||||
CALLOC(db->path, 1, pathsize, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
sprintf(db->path, "%s%s/", dbpath, treename);
|
||||
|
||||
strncpy(db->treename, treename, PATH_MAX);
|
||||
STRDUP(db->treename, treename, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
return(db);
|
||||
}
|
||||
|
||||
void _alpm_db_free(pmdb_t *db)
|
||||
{
|
||||
alpm_list_t *tmp;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* cleanup pkgcache */
|
||||
_alpm_db_free_pkgcache(db);
|
||||
/* cleanup server list */
|
||||
for(tmp = db->servers; tmp; tmp = alpm_list_next(tmp)) {
|
||||
_alpm_server_free(tmp->data);
|
||||
}
|
||||
alpm_list_free(db->servers);
|
||||
FREELIST(db->servers);
|
||||
FREE(db->path);
|
||||
FREE(db->treename);
|
||||
FREE(db);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int _alpm_db_cmp(const void *db1, const void *db2)
|
||||
int _alpm_db_cmp(const void *d1, const void *d2)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
return(strcmp(((pmdb_t *)db1)->treename, ((pmdb_t *)db2)->treename));
|
||||
pmdb_t *db1 = (pmdb_t *)d1;
|
||||
pmdb_t *db2 = (pmdb_t *)d2;
|
||||
return(strcmp(db1->treename, db2->treename));
|
||||
}
|
||||
|
||||
alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
|
||||
{
|
||||
const alpm_list_t *i, *j, *k;
|
||||
alpm_list_t *ret = NULL;
|
||||
/* copy the pkgcache- we will free the list var after each needle */
|
||||
alpm_list_t *list = alpm_list_copy(_alpm_db_get_pkgcache(db));
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -490,6 +378,7 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
|
||||
if(i->data == NULL) {
|
||||
continue;
|
||||
}
|
||||
ret = NULL;
|
||||
targ = i->data;
|
||||
_alpm_log(PM_LOG_DEBUG, "searching for target '%s'\n", targ);
|
||||
|
||||
@@ -497,21 +386,19 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
|
||||
RET_ERR(PM_ERR_INVALID_REGEX, NULL);
|
||||
}
|
||||
|
||||
for(j = _alpm_db_get_pkgcache(db); j; j = j->next) {
|
||||
for(j = list; j; j = j->next) {
|
||||
pmpkg_t *pkg = j->data;
|
||||
const char *matched = NULL;
|
||||
const char *name = alpm_pkg_get_name(pkg);
|
||||
const char *desc = alpm_pkg_get_desc(pkg);
|
||||
|
||||
/* check name */
|
||||
if (regexec(®, alpm_pkg_get_name(pkg), 0, 0, 0) == 0) {
|
||||
matched = alpm_pkg_get_name(pkg);
|
||||
}
|
||||
/* check plain text name */
|
||||
else if (strstr(alpm_pkg_get_name(pkg), targ)) {
|
||||
matched = alpm_pkg_get_name(pkg);
|
||||
/* check name as regex AND as plain text */
|
||||
if(name && (regexec(®, name, 0, 0, 0) == 0 || strstr(name, targ))) {
|
||||
matched = name;
|
||||
}
|
||||
/* check desc */
|
||||
else if (regexec(®, alpm_pkg_get_desc(pkg), 0, 0, 0) == 0) {
|
||||
matched = alpm_pkg_get_desc(pkg);
|
||||
else if (desc && regexec(®, desc, 0, 0, 0) == 0) {
|
||||
matched = desc;
|
||||
}
|
||||
/* check provides */
|
||||
/* TODO: should we be doing this, and should we print something
|
||||
@@ -532,6 +419,10 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the existing search list, and use the returned list for the
|
||||
* next needle. This allows for AND-based package searching. */
|
||||
alpm_list_free(list);
|
||||
list = ret;
|
||||
regfree(®);
|
||||
}
|
||||
|
||||
@@ -641,47 +532,4 @@ pmdb_t *_alpm_db_register_sync(const char *treename)
|
||||
return(db);
|
||||
}
|
||||
|
||||
/* helper function for alpm_list_find and _alpm_db_whatprovides
|
||||
*
|
||||
* @return "provision.name" == needle (as string)
|
||||
*/
|
||||
int _alpm_prov_cmp(const void *provision, const void *needle)
|
||||
{
|
||||
char *tmpptr;
|
||||
char *provname = strdup(provision);
|
||||
int retval = 0;
|
||||
tmpptr = strchr(provname, ' ');
|
||||
|
||||
if(tmpptr != NULL) { /* provision-version */
|
||||
*tmpptr='\0';
|
||||
}
|
||||
retval = strcmp(provname, needle);
|
||||
free(provname);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
/* return a alpm_list_t of packages in "db" that provide "package"
|
||||
*/
|
||||
alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package)
|
||||
{
|
||||
alpm_list_t *pkgs = NULL;
|
||||
alpm_list_t *lp;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(db == NULL || package == NULL || strlen(package) == 0) {
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) {
|
||||
pmpkg_t *info = lp->data;
|
||||
|
||||
if(alpm_list_find(alpm_pkg_get_provides(info), (const void *)package, _alpm_prov_cmp)) {
|
||||
pkgs = alpm_list_add(pkgs, info);
|
||||
}
|
||||
}
|
||||
|
||||
return(pkgs);
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
|
||||
@@ -40,7 +40,7 @@ typedef enum _pmdbinfrq_t {
|
||||
/* Database */
|
||||
struct __pmdb_t {
|
||||
char *path;
|
||||
char treename[PATH_MAX];
|
||||
char *treename;
|
||||
void *handle;
|
||||
alpm_list_t *pkgcache;
|
||||
alpm_list_t *grpcache;
|
||||
@@ -50,26 +50,19 @@ struct __pmdb_t {
|
||||
/* db.c, database general calls */
|
||||
pmdb_t *_alpm_db_new(const char *dbpath, const char *treename);
|
||||
void _alpm_db_free(pmdb_t *db);
|
||||
int _alpm_db_cmp(const void *db1, const void *db2);
|
||||
int _alpm_db_cmp(const void *d1, const void *d2);
|
||||
alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles);
|
||||
pmdb_t *_alpm_db_register_local(void);
|
||||
pmdb_t *_alpm_db_register_sync(const char *treename);
|
||||
|
||||
/* Provision */
|
||||
int _alpm_prov_cmp(const void *provision, const void *needle);
|
||||
alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package);
|
||||
|
||||
/* be.c, backend specific calls */
|
||||
int _alpm_db_install(pmdb_t *db, const char *dbfile);
|
||||
int _alpm_db_open(pmdb_t *db);
|
||||
void _alpm_db_close(pmdb_t *db);
|
||||
void _alpm_db_rewind(pmdb_t *db);
|
||||
pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target);
|
||||
int _alpm_db_populate(pmdb_t *db);
|
||||
int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);
|
||||
int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info);
|
||||
int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);
|
||||
int _alpm_db_remove(pmdb_t *db, pmpkg_t *info);
|
||||
time_t _alpm_db_getlastupdate(const pmdb_t *db);
|
||||
int _alpm_db_setlastupdate(const pmdb_t *db, time_t time);
|
||||
|
||||
#endif /* _ALPM_DB_H */
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* delta.c
|
||||
*
|
||||
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2007-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -21,14 +21,16 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <sys/types.h>
|
||||
#include <regex.h>
|
||||
|
||||
/* libalpm */
|
||||
#include "delta.h"
|
||||
#include "error.h"
|
||||
#include "alpm_list.h"
|
||||
#include "util.h"
|
||||
#include "log.h"
|
||||
#include "alpm_list.h"
|
||||
#include "alpm.h"
|
||||
#include "graph.h"
|
||||
|
||||
/** \addtogroup alpm_deltas Delta Functions
|
||||
* @brief Functions to manipulate libalpm deltas
|
||||
@@ -37,230 +39,286 @@
|
||||
|
||||
const char SYMEXPORT *alpm_delta_get_from(pmdelta_t *delta)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(delta != NULL, return(NULL));
|
||||
|
||||
return(delta->from);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_delta_get_from_md5sum(pmdelta_t *delta)
|
||||
{
|
||||
ASSERT(delta != NULL, return(NULL));
|
||||
return(delta->from_md5);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_delta_get_to(pmdelta_t *delta)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(delta != NULL, return(NULL));
|
||||
|
||||
return(delta->to);
|
||||
}
|
||||
|
||||
unsigned long SYMEXPORT alpm_delta_get_size(pmdelta_t *delta)
|
||||
const char SYMEXPORT *alpm_delta_get_to_md5sum(pmdelta_t *delta)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(delta != NULL, return(-1));
|
||||
|
||||
return(delta->size);
|
||||
ASSERT(delta != NULL, return(NULL));
|
||||
return(delta->to_md5);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_delta_get_filename(pmdelta_t *delta)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(delta != NULL, return(NULL));
|
||||
|
||||
return(delta->filename);
|
||||
return(delta->delta);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_delta_get_md5sum(pmdelta_t *delta)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(delta != NULL, return(NULL));
|
||||
return(delta->delta_md5);
|
||||
}
|
||||
|
||||
return(delta->md5sum);
|
||||
off_t SYMEXPORT alpm_delta_get_size(pmdelta_t *delta)
|
||||
{
|
||||
ASSERT(delta != NULL, return(-1));
|
||||
return(delta->delta_size);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/** Calculates the combined size of a list of delta files.
|
||||
*
|
||||
* @param deltas the list of pmdelta_t * objects
|
||||
*
|
||||
* @return the combined size
|
||||
*/
|
||||
unsigned long _alpm_delta_path_size(alpm_list_t *deltas)
|
||||
static alpm_list_t *delta_graph_init(alpm_list_t *deltas)
|
||||
{
|
||||
unsigned long sum = 0;
|
||||
alpm_list_t *dlts = deltas;
|
||||
alpm_list_t *i, *j;
|
||||
alpm_list_t *vertices = NULL;
|
||||
/* create the vertices */
|
||||
for(i = deltas; i; i = i->next) {
|
||||
char *fpath, *md5sum;
|
||||
pmgraph_t *v = _alpm_graph_new();
|
||||
pmdelta_t *vdelta = i->data;
|
||||
vdelta->download_size = vdelta->delta_size;
|
||||
v->weight = LONG_MAX;
|
||||
|
||||
while(dlts) {
|
||||
pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts);
|
||||
sum += d->size;
|
||||
/* determine whether the delta file already exists */
|
||||
fpath = _alpm_filecache_find(vdelta->delta);
|
||||
md5sum = alpm_get_md5sum(fpath);
|
||||
if(fpath && md5sum && strcmp(md5sum, vdelta->delta_md5) == 0) {
|
||||
vdelta->download_size = 0;
|
||||
}
|
||||
FREE(fpath);
|
||||
FREE(md5sum);
|
||||
|
||||
dlts = alpm_list_next(dlts);
|
||||
/* determine whether a base 'from' file exists */
|
||||
fpath = _alpm_filecache_find(vdelta->from);
|
||||
md5sum = alpm_get_md5sum(fpath);
|
||||
if(fpath && md5sum && strcmp(md5sum, vdelta->from_md5) == 0) {
|
||||
v->weight = vdelta->download_size;
|
||||
}
|
||||
FREE(fpath);
|
||||
FREE(md5sum);
|
||||
|
||||
v->data = vdelta;
|
||||
vertices = alpm_list_add(vertices, v);
|
||||
}
|
||||
|
||||
return(sum);
|
||||
/* compute the edges */
|
||||
for(i = vertices; i; i = i->next) {
|
||||
pmgraph_t *v_i = i->data;
|
||||
pmdelta_t *d_i = v_i->data;
|
||||
/* loop a second time so we make all possible comparisons */
|
||||
for(j = vertices; j; j = j->next) {
|
||||
pmgraph_t *v_j = j->data;
|
||||
pmdelta_t *d_j = v_j->data;
|
||||
/* We want to create a delta tree like the following:
|
||||
* 1_to_2
|
||||
* |
|
||||
* 1_to_3 2_to_3
|
||||
* \ /
|
||||
* 3_to_4
|
||||
* If J 'from' is equal to I 'to', then J is a child of I.
|
||||
* */
|
||||
if(strcmp(d_j->from, d_i->to) == 0
|
||||
&& strcmp(d_j->from_md5, d_i->to_md5) == 0) {
|
||||
v_i->children = alpm_list_add(v_i->children, v_j);
|
||||
}
|
||||
}
|
||||
v_i->childptr = v_i->children;
|
||||
}
|
||||
return(vertices);
|
||||
}
|
||||
|
||||
/** Calculates the combined size of a list of delta files that are not
|
||||
* in the cache.
|
||||
*
|
||||
* @param deltas the list of pmdelta_t * objects
|
||||
*
|
||||
* @return the combined size
|
||||
*/
|
||||
unsigned long _alpm_delta_path_size_uncached(alpm_list_t *deltas)
|
||||
{
|
||||
unsigned long sum = 0;
|
||||
alpm_list_t *dlts = deltas;
|
||||
static off_t delta_vert(alpm_list_t *vertices,
|
||||
const char *to, const char *to_md5, alpm_list_t **path) {
|
||||
alpm_list_t *i;
|
||||
pmgraph_t *v;
|
||||
while(1) {
|
||||
v = NULL;
|
||||
/* find the smallest vertice not visited yet */
|
||||
for(i = vertices; i; i = i->next) {
|
||||
pmgraph_t *v_i = i->data;
|
||||
|
||||
while(dlts) {
|
||||
pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts);
|
||||
char *fname = _alpm_filecache_find(d->filename);
|
||||
if(v_i->state == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!fname) {
|
||||
sum += d->size;
|
||||
if(v == NULL || v_i->weight < v->weight) {
|
||||
v = v_i;
|
||||
}
|
||||
}
|
||||
if(v == NULL || v->weight == LONG_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
FREE(fname);
|
||||
v->state = -1;
|
||||
|
||||
dlts = alpm_list_next(dlts);
|
||||
}
|
||||
v->childptr = v->children;
|
||||
while(v->childptr) {
|
||||
pmgraph_t *v_c = v->childptr->data;
|
||||
pmdelta_t *d_c = v_c->data;
|
||||
if(v_c->weight > v->weight + d_c->download_size) {
|
||||
v_c->weight = v->weight + d_c->download_size;
|
||||
v_c->parent = v;
|
||||
}
|
||||
|
||||
return(sum);
|
||||
}
|
||||
v->childptr = (v->childptr)->next;
|
||||
|
||||
/** Calculates the shortest path from one version to another.
|
||||
*
|
||||
* The shortest path is defined as the path with the smallest combined
|
||||
* size, not the length of the path.
|
||||
*
|
||||
* The algorithm is based on Dijkstra's shortest path algorithm.
|
||||
*
|
||||
* @param deltas the list of pmdelta_t * objects that a package has
|
||||
* @param from the version to start from
|
||||
* @param to the version to end at
|
||||
* @param path the current path
|
||||
*
|
||||
* @return the list of pmdelta_t * objects that has the smallest size.
|
||||
* NULL (the empty list) is returned if there is no path between the
|
||||
* versions.
|
||||
*/
|
||||
static alpm_list_t *shortest_delta_path(alpm_list_t *deltas,
|
||||
const char *from, const char *to, alpm_list_t *path)
|
||||
{
|
||||
alpm_list_t *d;
|
||||
alpm_list_t *shortest = NULL;
|
||||
|
||||
/* Found the 'to' version, this is a good path so return it. */
|
||||
if(strcmp(from, to) == 0) {
|
||||
return(path);
|
||||
}
|
||||
|
||||
for(d = deltas; d; d = alpm_list_next(d)) {
|
||||
pmdelta_t *v = alpm_list_getdata(d);
|
||||
|
||||
/* If this vertex has already been visited in the path, go to the
|
||||
* next vertex. */
|
||||
if(alpm_list_find_ptr(path, v)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Once we find a vertex that starts at the 'from' version,
|
||||
* recursively find the shortest path using the 'to' version of this
|
||||
* current vertex as the 'from' version in the function call. */
|
||||
if(strcmp(v->from, from) == 0) {
|
||||
alpm_list_t *newpath = alpm_list_copy(path);
|
||||
newpath = alpm_list_add(newpath, v);
|
||||
newpath = shortest_delta_path(deltas, v->to, to, newpath);
|
||||
v = NULL;
|
||||
off_t bestsize = 0;
|
||||
|
||||
if(newpath != NULL) {
|
||||
/* The path returned works, now use it unless there is already a
|
||||
* shorter path found. */
|
||||
if(shortest == NULL) {
|
||||
shortest = newpath;
|
||||
} else if(_alpm_delta_path_size(shortest) > _alpm_delta_path_size(newpath)) {
|
||||
alpm_list_free(shortest);
|
||||
shortest = newpath;
|
||||
} else {
|
||||
alpm_list_free(newpath);
|
||||
}
|
||||
for(i = vertices; i; i = i->next) {
|
||||
pmgraph_t *v_i = i->data;
|
||||
pmdelta_t *d_i = v_i->data;
|
||||
|
||||
if(strcmp(d_i->to, to) == 0
|
||||
|| strcmp(d_i->to_md5, to_md5) == 0) {
|
||||
if(v == NULL || v_i->weight < v->weight) {
|
||||
v = v_i;
|
||||
bestsize = v->weight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
alpm_list_free(path);
|
||||
alpm_list_t *rpath = NULL;
|
||||
while(v != NULL) {
|
||||
pmdelta_t *vdelta = v->data;
|
||||
rpath = alpm_list_add(rpath, vdelta);
|
||||
v = v->parent;
|
||||
}
|
||||
*path = alpm_list_reverse(rpath);
|
||||
alpm_list_free(rpath);
|
||||
|
||||
return(shortest);
|
||||
return(bestsize);
|
||||
}
|
||||
|
||||
/** Calculates the shortest path from one version to another.
|
||||
*
|
||||
* The shortest path is defined as the path with the smallest combined
|
||||
* size, not the length of the path.
|
||||
*
|
||||
* @param deltas the list of pmdelta_t * objects that a package has
|
||||
* @param from the version to start from
|
||||
* @param to the version to end at
|
||||
*
|
||||
* @return the list of pmdelta_t * objects that has the smallest size.
|
||||
* NULL (the empty list) is returned if there is no path between the
|
||||
* versions.
|
||||
* @param deltas the list of pmdelta_t * objects that a file has
|
||||
* @param to the file to start the search at
|
||||
* @param to_md5 the md5sum of the above named file
|
||||
* @param path the pointer to a list location where pmdelta_t * objects that
|
||||
* have the smallest size are placed. NULL is set if there is no path
|
||||
* possible with the files available.
|
||||
* @return the size of the path stored, or LONG_MAX if path is unfindable
|
||||
*/
|
||||
alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from,
|
||||
const char *to)
|
||||
off_t _alpm_shortest_delta_path(alpm_list_t *deltas,
|
||||
const char *to, const char *to_md5, alpm_list_t **path)
|
||||
{
|
||||
alpm_list_t *path = NULL;
|
||||
alpm_list_t *bestpath = NULL;
|
||||
alpm_list_t *vertices;
|
||||
off_t bestsize = LONG_MAX;
|
||||
|
||||
path = shortest_delta_path(deltas, from, to, path);
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
return(path);
|
||||
if(deltas == NULL) {
|
||||
*path = NULL;
|
||||
return(bestsize);
|
||||
}
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "started delta shortest-path search\n");
|
||||
|
||||
vertices = delta_graph_init(deltas);
|
||||
|
||||
bestsize = delta_vert(vertices, to, to_md5, &bestpath);
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "delta shortest-path search complete\n");
|
||||
|
||||
alpm_list_free_inner(vertices, _alpm_graph_free);
|
||||
alpm_list_free(vertices);
|
||||
|
||||
*path = bestpath;
|
||||
return(bestsize);
|
||||
}
|
||||
|
||||
/** Parses the string representation of a pmdelta_t object.
|
||||
*
|
||||
* This function assumes that the string is in the correct format.
|
||||
*
|
||||
* This format is as follows:
|
||||
* $oldfile $oldmd5 $newfile $newmd5 $deltafile $deltamd5 $deltasize
|
||||
* @param line the string to parse
|
||||
*
|
||||
* @return A pointer to the new pmdelta_t object
|
||||
*/
|
||||
/* TODO this does not really belong here, but in a parsing lib */
|
||||
pmdelta_t *_alpm_delta_parse(char *line)
|
||||
{
|
||||
pmdelta_t *delta;
|
||||
char *tmp = line, *tmp2;
|
||||
regex_t reg;
|
||||
|
||||
regcomp(®,
|
||||
"^[^[:space:]]* [[:xdigit:]]{32}"
|
||||
" [^[:space:]]* [[:xdigit:]]{32}"
|
||||
" [^[:space:]]* [[:xdigit:]]{32} [[:digit:]]*$",
|
||||
REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
|
||||
if(regexec(®, line, 0, 0, 0) != 0) {
|
||||
/* delta line is invalid, return NULL */
|
||||
regfree(®);
|
||||
return(NULL);
|
||||
}
|
||||
regfree(®);
|
||||
|
||||
CALLOC(delta, 1, sizeof(pmdelta_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
tmp2 = tmp;
|
||||
tmp = strchr(tmp, ' ');
|
||||
*(tmp++) = '\0';
|
||||
strncpy(delta->from, tmp2, DLT_VERSION_LEN);
|
||||
STRDUP(delta->from, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
tmp2 = tmp;
|
||||
tmp = strchr(tmp, ' ');
|
||||
*(tmp++) = '\0';
|
||||
strncpy(delta->to, tmp2, DLT_VERSION_LEN);
|
||||
STRDUP(delta->from_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
tmp2 = tmp;
|
||||
tmp = strchr(tmp, ' ');
|
||||
*(tmp++) = '\0';
|
||||
delta->size = atol(tmp2);
|
||||
STRDUP(delta->to, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
tmp2 = tmp;
|
||||
tmp = strchr(tmp, ' ');
|
||||
*(tmp++) = '\0';
|
||||
strncpy(delta->filename, tmp2, DLT_FILENAME_LEN);
|
||||
STRDUP(delta->to_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
strncpy(delta->md5sum, tmp, DLT_MD5SUM_LEN);
|
||||
tmp2 = tmp;
|
||||
tmp = strchr(tmp, ' ');
|
||||
*(tmp++) = '\0';
|
||||
STRDUP(delta->delta, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
tmp2 = tmp;
|
||||
tmp = strchr(tmp, ' ');
|
||||
*(tmp++) = '\0';
|
||||
STRDUP(delta->delta_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
delta->delta_size = atol(tmp);
|
||||
|
||||
return(delta);
|
||||
}
|
||||
|
||||
void _alpm_delta_free(pmdelta_t *delta)
|
||||
{
|
||||
FREE(delta->from);
|
||||
FREE(delta->from_md5);
|
||||
FREE(delta->to);
|
||||
FREE(delta->to_md5);
|
||||
FREE(delta->delta);
|
||||
FREE(delta->delta_md5);
|
||||
FREE(delta);
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* delta.h
|
||||
*
|
||||
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2007-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -19,24 +19,33 @@
|
||||
#ifndef _ALPM_DELTA_H
|
||||
#define _ALPM_DELTA_H
|
||||
|
||||
#include <sys/types.h> /* off_t */
|
||||
|
||||
#include "alpm.h"
|
||||
|
||||
#define DLT_FILENAME_LEN 512
|
||||
#define DLT_VERSION_LEN 64
|
||||
#define DLT_MD5SUM_LEN 33
|
||||
|
||||
struct __pmdelta_t {
|
||||
char from[DLT_VERSION_LEN];
|
||||
char to[DLT_VERSION_LEN];
|
||||
unsigned long size;
|
||||
char filename[DLT_FILENAME_LEN];
|
||||
char md5sum[DLT_MD5SUM_LEN];
|
||||
/** filename of the 'before' file */
|
||||
char *from;
|
||||
/** md5sum of the 'before' file */
|
||||
char *from_md5;
|
||||
/** filename of the 'after' file */
|
||||
char *to;
|
||||
/** md5sum of the 'after' file */
|
||||
char *to_md5;
|
||||
/** filename of the delta patch */
|
||||
char *delta;
|
||||
/** md5sum of the delta file */
|
||||
char *delta_md5;
|
||||
/** filesize of the delta file */
|
||||
off_t delta_size;
|
||||
/** download filesize of the delta file */
|
||||
off_t download_size;
|
||||
};
|
||||
|
||||
unsigned long _alpm_delta_path_size(alpm_list_t *deltas);
|
||||
unsigned long _alpm_delta_path_size_uncached(alpm_list_t *deltas);
|
||||
pmdelta_t *_alpm_delta_parse(char *line);
|
||||
alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from, const char *to);
|
||||
void _alpm_delta_free(pmdelta_t *delta);
|
||||
off_t _alpm_shortest_delta_path(alpm_list_t *deltas,
|
||||
const char *to, const char *to_md5, alpm_list_t **path);
|
||||
|
||||
#endif /* _ALPM_DELTA_H */
|
||||
|
||||
|
||||
@@ -30,37 +30,21 @@
|
||||
#include "alpm_list.h"
|
||||
#include "util.h"
|
||||
#include "log.h"
|
||||
#include "error.h"
|
||||
#include "graph.h"
|
||||
#include "package.h"
|
||||
#include "db.h"
|
||||
#include "cache.h"
|
||||
#include "handle.h"
|
||||
|
||||
static pmgraph_t *_alpm_graph_new(void)
|
||||
void _alpm_dep_free(pmdepend_t *dep)
|
||||
{
|
||||
pmgraph_t *graph = NULL;
|
||||
|
||||
MALLOC(graph, sizeof(pmgraph_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
if(graph) {
|
||||
graph->state = 0;
|
||||
graph->data = NULL;
|
||||
graph->parent = NULL;
|
||||
graph->children = NULL;
|
||||
graph->childptr = NULL;
|
||||
}
|
||||
return(graph);
|
||||
FREE(dep->name);
|
||||
FREE(dep->version);
|
||||
FREE(dep);
|
||||
}
|
||||
|
||||
static void _alpm_graph_free(void *data)
|
||||
{
|
||||
pmgraph_t *graph = data;
|
||||
alpm_list_free(graph->children);
|
||||
free(graph);
|
||||
}
|
||||
|
||||
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod,
|
||||
const char *depname, const char *depversion)
|
||||
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepend_t *dep,
|
||||
const char *causingpkg)
|
||||
{
|
||||
pmdepmissing_t *miss;
|
||||
|
||||
@@ -68,26 +52,29 @@ pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod,
|
||||
|
||||
MALLOC(miss, sizeof(pmdepmissing_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
strncpy(miss->target, target, PKG_NAME_LEN);
|
||||
miss->depend.mod = depmod;
|
||||
strncpy(miss->depend.name, depname, PKG_NAME_LEN);
|
||||
if(depversion) {
|
||||
strncpy(miss->depend.version, depversion, PKG_VERSION_LEN);
|
||||
} else {
|
||||
miss->depend.version[0] = 0;
|
||||
}
|
||||
STRDUP(miss->target, target, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
miss->depend = _alpm_dep_dup(dep);
|
||||
STRDUP(miss->causingpkg, causingpkg, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
return(miss);
|
||||
}
|
||||
|
||||
void _alpm_depmiss_free(pmdepmissing_t *miss)
|
||||
{
|
||||
_alpm_dep_free(miss->depend);
|
||||
FREE(miss->target);
|
||||
FREE(miss->causingpkg);
|
||||
FREE(miss);
|
||||
}
|
||||
|
||||
/* Convert a list of pmpkg_t * to a graph structure,
|
||||
* with a edge for each dependency.
|
||||
* Returns a list of vertices (one vertex = one package)
|
||||
* (used by alpm_sortbydeps)
|
||||
*/
|
||||
static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)
|
||||
static alpm_list_t *dep_graph_init(alpm_list_t *targets)
|
||||
{
|
||||
alpm_list_t *i, *j, *k;
|
||||
alpm_list_t *i, *j;
|
||||
alpm_list_t *vertices = NULL;
|
||||
/* We create the vertices */
|
||||
for(i = targets; i; i = i->next) {
|
||||
@@ -104,12 +91,7 @@ static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)
|
||||
for(j = vertices; j; j = j->next) {
|
||||
pmgraph_t *vertex_j = j->data;
|
||||
pmpkg_t *p_j = vertex_j->data;
|
||||
int child = 0;
|
||||
for(k = alpm_pkg_get_depends(p_i); k && !child; k = k->next) {
|
||||
pmdepend_t *depend = k->data;
|
||||
child = alpm_depcmp(p_j, depend);
|
||||
}
|
||||
if(child) {
|
||||
if(_alpm_dep_edge(p_i, p_j)) {
|
||||
vertex_i->children =
|
||||
alpm_list_add(vertex_i->children, vertex_j);
|
||||
}
|
||||
@@ -121,20 +103,19 @@ static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)
|
||||
|
||||
/* Re-order a list of target packages with respect to their dependencies.
|
||||
*
|
||||
* Example (PM_TRANS_TYPE_ADD):
|
||||
* Example (reverse == 0):
|
||||
* A depends on C
|
||||
* B depends on A
|
||||
* Target order is A,B,C,D
|
||||
*
|
||||
* Should be re-ordered to C,A,B,D
|
||||
*
|
||||
* mode should be either PM_TRANS_TYPE_ADD or PM_TRANS_TYPE_REMOVE. This
|
||||
* affects the dependency order sortbydeps() will use.
|
||||
* if reverse is > 0, the dependency order will be reversed.
|
||||
*
|
||||
* This function returns the new alpm_list_t* target list.
|
||||
*
|
||||
*/
|
||||
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
|
||||
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, int reverse)
|
||||
{
|
||||
alpm_list_t *newtargs = NULL;
|
||||
alpm_list_t *vertices = NULL;
|
||||
@@ -149,7 +130,7 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "started sorting dependencies\n");
|
||||
|
||||
vertices = _alpm_graph_init(targets);
|
||||
vertices = dep_graph_init(targets);
|
||||
|
||||
vptr = vertices;
|
||||
vertex = vertices->data;
|
||||
@@ -169,7 +150,7 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
|
||||
pmpkg_t *vertexpkg = vertex->data;
|
||||
pmpkg_t *childpkg = nextchild->data;
|
||||
_alpm_log(PM_LOG_WARNING, _("dependency cycle detected:\n"));
|
||||
if(mode == PM_TRANS_TYPE_REMOVE) {
|
||||
if(reverse) {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s will be removed after its %s dependency\n"), vertexpkg->name, childpkg->name);
|
||||
} else {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s will be installed before its %s dependency\n"), vertexpkg->name, childpkg->name);
|
||||
@@ -194,8 +175,8 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "sorting dependencies finished\n");
|
||||
|
||||
if(mode == PM_TRANS_TYPE_REMOVE) {
|
||||
/* we're removing packages, so reverse the order */
|
||||
if(reverse) {
|
||||
/* reverse the order */
|
||||
alpm_list_t *tmptargs = alpm_list_reverse(newtargs);
|
||||
/* free the old one */
|
||||
alpm_list_free(newtargs);
|
||||
@@ -208,10 +189,42 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
|
||||
return(newtargs);
|
||||
}
|
||||
|
||||
/* Little helper function for alpm_list_find */
|
||||
static int satisfycmp(const void *pkg, const void *depend)
|
||||
pmpkg_t *_alpm_find_dep_satisfier(alpm_list_t *pkgs, pmdepend_t *dep)
|
||||
{
|
||||
return(!alpm_depcmp((pmpkg_t*) pkg, (pmdepend_t*) depend));
|
||||
alpm_list_t *i;
|
||||
|
||||
for(i = pkgs; i; i = alpm_list_next(i)) {
|
||||
pmpkg_t *pkg = i->data;
|
||||
if(alpm_depcmp(pkg, dep)) {
|
||||
return(pkg);
|
||||
}
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/** Checks dependencies and returns missing ones in a list.
|
||||
* Dependencies can include versions with depmod operators.
|
||||
* @param db pointer to the local package database
|
||||
* @param targets an alpm_list_t* of dependencies strings to satisfy
|
||||
* @return an alpm_list_t* of missing dependencies strings
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_deptest(pmdb_t *db, alpm_list_t *targets)
|
||||
{
|
||||
alpm_list_t *i, *ret = NULL;
|
||||
|
||||
for(i = targets; i; i = alpm_list_next(i)) {
|
||||
pmdepend_t *dep;
|
||||
char *target;
|
||||
|
||||
target = alpm_list_getdata(i);
|
||||
dep = _alpm_splitdep(target);
|
||||
|
||||
if(!_alpm_find_dep_satisfier(_alpm_db_get_pkgcache(db), dep)) {
|
||||
ret = alpm_list_add(ret, target);
|
||||
}
|
||||
_alpm_dep_free(dep);
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/** Checks dependencies and returns missing ones in a list.
|
||||
@@ -226,7 +239,7 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||
alpm_list_t *remove, alpm_list_t *upgrade)
|
||||
{
|
||||
alpm_list_t *i, *j;
|
||||
alpm_list_t *joined, *dblist;
|
||||
alpm_list_t *targets, *dblist = NULL, *modified = NULL;
|
||||
alpm_list_t *baddeps = NULL;
|
||||
pmdepmissing_t *miss = NULL;
|
||||
|
||||
@@ -236,9 +249,16 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
joined = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
|
||||
dblist = alpm_list_diff(_alpm_db_get_pkgcache(db), joined, _alpm_pkg_cmp);
|
||||
alpm_list_free(joined);
|
||||
targets = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
|
||||
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
|
||||
void *pkg = i->data;
|
||||
if(alpm_list_find(targets, pkg, _alpm_pkg_cmp)) {
|
||||
modified = alpm_list_add(modified, pkg);
|
||||
} else {
|
||||
dblist = alpm_list_add(dblist, pkg);
|
||||
}
|
||||
}
|
||||
alpm_list_free(targets);
|
||||
|
||||
/* look for unsatisfied dependencies of the upgrade list */
|
||||
for(i = upgrade; i; i = i->next) {
|
||||
@@ -250,15 +270,14 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||
pmdepend_t *depend = j->data;
|
||||
/* 1. we check the upgrade list */
|
||||
/* 2. we check database for untouched satisfying packages */
|
||||
if(!alpm_list_find(upgrade, depend, satisfycmp) &&
|
||||
!alpm_list_find(dblist, depend, satisfycmp)) {
|
||||
if(!_alpm_find_dep_satisfier(upgrade, depend) &&
|
||||
!_alpm_find_dep_satisfier(dblist, depend)) {
|
||||
/* Unsatisfied dependency in the upgrade list */
|
||||
char *missdepstring = alpm_dep_get_string(depend);
|
||||
_alpm_log(PM_LOG_DEBUG, "checkdeps: missing dependency '%s' for package '%s'\n",
|
||||
missdepstring, alpm_pkg_get_name(tp));
|
||||
free(missdepstring);
|
||||
miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), depend->mod,
|
||||
depend->name, depend->version);
|
||||
miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), depend, NULL);
|
||||
baddeps = alpm_list_add(baddeps, miss);
|
||||
}
|
||||
}
|
||||
@@ -267,31 +286,28 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
|
||||
if(reversedeps) {
|
||||
/* reversedeps handles the backwards dependencies, ie,
|
||||
* the packages listed in the requiredby field. */
|
||||
|
||||
alpm_list_t *modified = alpm_list_diff(_alpm_db_get_pkgcache(db), dblist, _alpm_pkg_cmp);
|
||||
|
||||
for(i = dblist; i; i = i->next) {
|
||||
pmpkg_t *lp = i->data;
|
||||
for(j = alpm_pkg_get_depends(lp); j; j = j->next) {
|
||||
pmdepend_t *depend = j->data;
|
||||
pmpkg_t *causingpkg = _alpm_find_dep_satisfier(modified, depend);
|
||||
/* we won't break this depend, if it is already broken, we ignore it */
|
||||
/* 1. check upgrade list for satisfiers */
|
||||
/* 2. check dblist for satisfiers */
|
||||
if(alpm_list_find(modified, depend, satisfycmp) &&
|
||||
!alpm_list_find(upgrade, depend, satisfycmp) &&
|
||||
!alpm_list_find(dblist, depend, satisfycmp)) {
|
||||
if(causingpkg &&
|
||||
!_alpm_find_dep_satisfier(upgrade, depend) &&
|
||||
!_alpm_find_dep_satisfier(dblist, depend)) {
|
||||
char *missdepstring = alpm_dep_get_string(depend);
|
||||
_alpm_log(PM_LOG_DEBUG, "checkdeps: transaction would break '%s' dependency of '%s'\n",
|
||||
missdepstring, alpm_pkg_get_name(lp));
|
||||
free(missdepstring);
|
||||
miss = _alpm_depmiss_new(lp->name, depend->mod,
|
||||
depend->name, depend->version);
|
||||
miss = _alpm_depmiss_new(lp->name, depend, alpm_pkg_get_name(causingpkg));
|
||||
baddeps = alpm_list_add(baddeps, miss);
|
||||
}
|
||||
}
|
||||
}
|
||||
alpm_list_free(modified);
|
||||
}
|
||||
alpm_list_free(modified);
|
||||
alpm_list_free(dblist);
|
||||
|
||||
return(baddeps);
|
||||
@@ -305,7 +321,7 @@ static int dep_vercmp(const char *version1, pmdepmod_t mod,
|
||||
if(mod == PM_DEP_MOD_ANY) {
|
||||
equal = 1;
|
||||
} else {
|
||||
int cmp = _alpm_versioncmp(version1, version2);
|
||||
int cmp = alpm_pkg_vercmp(version1, version2);
|
||||
switch(mod) {
|
||||
case PM_DEP_MOD_EQ: equal = (cmp == 0); break;
|
||||
case PM_DEP_MOD_GE: equal = (cmp >= 0); break;
|
||||
@@ -332,16 +348,15 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
|
||||
satisfy = (strcmp(pkgname, dep->name) == 0
|
||||
&& dep_vercmp(pkgversion, dep->mod, dep->version));
|
||||
|
||||
/* check provisions, format : "name version" */
|
||||
/* check provisions, format : "name=version" */
|
||||
for(i = alpm_pkg_get_provides(pkg); i && !satisfy; i = i->next) {
|
||||
char *provname = strdup(i->data);
|
||||
char *provver = strchr(provname, ' ');
|
||||
char *provver = strchr(provname, '=');
|
||||
|
||||
if(provver == NULL) { /* no provision version */
|
||||
satisfy = (dep->mod == PM_DEP_MOD_ANY
|
||||
&& strcmp(provname, dep->name) == 0);
|
||||
} else {
|
||||
/* replace the space with a NULL byte, and advance ptr the version */
|
||||
*provver = '\0';
|
||||
provver += 1;
|
||||
satisfy = (strcmp(provname, dep->name) == 0
|
||||
@@ -353,7 +368,7 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
|
||||
return(satisfy);
|
||||
}
|
||||
|
||||
pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
|
||||
pmdepend_t *_alpm_splitdep(const char *depstring)
|
||||
{
|
||||
pmdepend_t *depend;
|
||||
char *ptr = NULL;
|
||||
@@ -362,9 +377,9 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
|
||||
if(depstring == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
newstr = strdup(depstring);
|
||||
STRDUP(newstr, depstring, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
MALLOC(depend, sizeof(pmdepend_t), return(NULL));
|
||||
CALLOC(depend, 1, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
/* Find a version comparator if one exists. If it does, set the type and
|
||||
* increment the ptr accordingly so we can copy the right strings. */
|
||||
@@ -388,25 +403,36 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
|
||||
depend->mod = PM_DEP_MOD_GT;
|
||||
*ptr = '\0';
|
||||
ptr += 1;
|
||||
|
||||
} else {
|
||||
/* no version specified - copy in the name and return it */
|
||||
/* no version specified - copy the name and return it */
|
||||
depend->mod = PM_DEP_MOD_ANY;
|
||||
strncpy(depend->name, newstr, PKG_NAME_LEN);
|
||||
depend->version[0] = '\0';
|
||||
STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
depend->version = NULL;
|
||||
free(newstr);
|
||||
return(depend);
|
||||
}
|
||||
|
||||
/* if we get here, we have a version comparator, copy the right parts
|
||||
* to the right places */
|
||||
strncpy(depend->name, newstr, PKG_NAME_LEN);
|
||||
strncpy(depend->version, ptr, PKG_VERSION_LEN);
|
||||
STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
STRDUP(depend->version, ptr, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
free(newstr);
|
||||
|
||||
return(depend);
|
||||
}
|
||||
|
||||
pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep)
|
||||
{
|
||||
pmdepend_t *newdep;
|
||||
CALLOC(newdep, 1, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
STRDUP(newdep->name, dep->name, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
STRDUP(newdep->version, dep->version, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
newdep->mod = dep->mod;
|
||||
|
||||
return(newdep);
|
||||
}
|
||||
|
||||
/* These parameters are messy. We check if this package, given a list of
|
||||
* targets and a db is safe to remove. We do NOT remove it if it is in the
|
||||
* target list, or if if the package was explictly installed and
|
||||
@@ -414,9 +440,9 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
|
||||
static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
|
||||
int include_explicit)
|
||||
{
|
||||
alpm_list_t *i, *requiredby;
|
||||
alpm_list_t *i;
|
||||
|
||||
if(_alpm_pkg_find(alpm_pkg_get_name(pkg), targets)) {
|
||||
if(_alpm_pkg_find(targets, alpm_pkg_get_name(pkg))) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -436,15 +462,12 @@ static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
|
||||
* if checkdeps detected it would break something */
|
||||
|
||||
/* see if other packages need it */
|
||||
requiredby = alpm_pkg_compute_requiredby(pkg);
|
||||
for(i = requiredby; i; i = i->next) {
|
||||
pmpkg_t *reqpkg = _alpm_db_get_pkgfromcache(db, i->data);
|
||||
if(reqpkg && !_alpm_pkg_find(alpm_pkg_get_name(reqpkg), targets)) {
|
||||
FREELIST(requiredby);
|
||||
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
|
||||
pmpkg_t *lpkg = i->data;
|
||||
if(_alpm_dep_edge(lpkg, pkg) && !_alpm_pkg_find(targets, lpkg->name)) {
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
FREELIST(requiredby);
|
||||
|
||||
/* it's ok to remove */
|
||||
return(1);
|
||||
@@ -462,7 +485,7 @@ static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
|
||||
*/
|
||||
void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit)
|
||||
{
|
||||
alpm_list_t *i, *j, *k;
|
||||
alpm_list_t *i, *j;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -472,149 +495,133 @@ void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit)
|
||||
|
||||
for(i = targs; i; i = i->next) {
|
||||
pmpkg_t *pkg = i->data;
|
||||
for(j = alpm_pkg_get_depends(pkg); j; j = j->next) {
|
||||
pmdepend_t *depend = j->data;
|
||||
|
||||
for(k = _alpm_db_get_pkgcache(db); k; k = k->next) {
|
||||
pmpkg_t *deppkg = k->data;
|
||||
if(alpm_depcmp(deppkg,depend)
|
||||
&& can_remove_package(db, deppkg, targs, include_explicit)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "adding '%s' to the targets\n",
|
||||
alpm_pkg_get_name(deppkg));
|
||||
/* add it to the target list */
|
||||
targs = alpm_list_add(targs, _alpm_pkg_dup(deppkg));
|
||||
}
|
||||
for(j = _alpm_db_get_pkgcache(db); j; j = j->next) {
|
||||
pmpkg_t *deppkg = j->data;
|
||||
if(_alpm_dep_edge(pkg, deppkg)
|
||||
&& can_remove_package(db, deppkg, targs, include_explicit)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "adding '%s' to the targets\n",
|
||||
alpm_pkg_get_name(deppkg));
|
||||
/* add it to the target list */
|
||||
targs = alpm_list_add(targs, _alpm_pkg_dup(deppkg));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* populates *list with packages that need to be installed to satisfy all
|
||||
* dependencies (recursive) for syncpkg
|
||||
/* helper function for resolvedeps: search for dep satisfier in dbs */
|
||||
pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, pmpkg_t *tpkg)
|
||||
{
|
||||
alpm_list_t *i, *j;
|
||||
/* 1. literals */
|
||||
for(i = dbs; i; i = i->next) {
|
||||
pmpkg_t *pkg = _alpm_db_get_pkgfromcache(i->data, dep->name);
|
||||
if(pkg && alpm_depcmp(pkg, dep) && !_alpm_pkg_find(excluding, pkg->name)) {
|
||||
if(_alpm_pkg_should_ignore(pkg)) {
|
||||
int install;
|
||||
QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
|
||||
tpkg, NULL, &install);
|
||||
if(!install) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return(pkg);
|
||||
}
|
||||
}
|
||||
/* 2. satisfiers (skip literals here) */
|
||||
for(i = dbs; i; i = i->next) {
|
||||
for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) {
|
||||
pmpkg_t *pkg = j->data;
|
||||
if(alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) &&
|
||||
!_alpm_pkg_find(excluding, pkg->name)) {
|
||||
if(_alpm_pkg_should_ignore(pkg)) {
|
||||
int install;
|
||||
QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
|
||||
tpkg, NULL, &install);
|
||||
if(!install) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
_alpm_log(PM_LOG_WARNING, _("provider package was selected (%s provides %s)\n"),
|
||||
pkg->name, dep->name);
|
||||
return(pkg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/* populates list with packages that need to be installed to satisfy all
|
||||
* dependencies of packages in list
|
||||
*
|
||||
* @param remove contains packages elected for removal
|
||||
* make sure **list is already initialized
|
||||
*/
|
||||
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,
|
||||
alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data)
|
||||
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, alpm_list_t *list,
|
||||
alpm_list_t *remove, alpm_list_t **data)
|
||||
{
|
||||
alpm_list_t *i, *j, *k;
|
||||
alpm_list_t *i, *j;
|
||||
alpm_list_t *targ;
|
||||
alpm_list_t *deps = NULL;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(local == NULL || dbs_sync == NULL || syncpkg == NULL || list == NULL) {
|
||||
if(local == NULL || dbs_sync == NULL) {
|
||||
return(-1);
|
||||
}
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "started resolving dependencies\n");
|
||||
targ = alpm_list_add(NULL, syncpkg);
|
||||
deps = alpm_checkdeps(local, 0, remove, targ);
|
||||
alpm_list_free(targ);
|
||||
|
||||
if(deps == NULL) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
for(i = deps; i; i = i->next) {
|
||||
int found = 0;
|
||||
pmdepmissing_t *miss = i->data;
|
||||
pmdepend_t *missdep = &(miss->depend);
|
||||
pmpkg_t *sync = NULL;
|
||||
|
||||
/* check if one of the packages in *list already satisfies this dependency */
|
||||
for(j = *list; j && !found; j = j->next) {
|
||||
pmpkg_t *sp = j->data;
|
||||
if(alpm_depcmp(sp, missdep)) {
|
||||
for(i = list; i; i = i->next) {
|
||||
pmpkg_t *tpkg = i->data;
|
||||
targ = alpm_list_add(NULL, tpkg);
|
||||
deps = alpm_checkdeps(local, 0, remove, targ);
|
||||
alpm_list_free(targ);
|
||||
for(j = deps; j; j = j->next) {
|
||||
pmdepmissing_t *miss = j->data;
|
||||
pmdepend_t *missdep = alpm_miss_get_dep(miss);
|
||||
/* check if one of the packages in list already satisfies this dependency */
|
||||
if(_alpm_find_dep_satisfier(list, missdep)) {
|
||||
continue;
|
||||
}
|
||||
/* find a satisfier package in the given repositories */
|
||||
pmpkg_t *spkg = _alpm_resolvedep(missdep, dbs_sync, list, tpkg);
|
||||
if(!spkg) {
|
||||
pm_errno = PM_ERR_UNSATISFIED_DEPS;
|
||||
char *missdepstring = alpm_dep_get_string(missdep);
|
||||
_alpm_log(PM_LOG_DEBUG, "%s satisfies dependency %s -- skipping\n",
|
||||
alpm_pkg_get_name(sp), missdepstring);
|
||||
_alpm_log(PM_LOG_ERROR, _("cannot resolve \"%s\", a dependency of \"%s\"\n"),
|
||||
missdepstring, tpkg->name);
|
||||
free(missdepstring);
|
||||
found = 1;
|
||||
if(data) {
|
||||
pmdepmissing_t *missd = _alpm_depmiss_new(miss->target,
|
||||
miss->depend, miss->causingpkg);
|
||||
if(missd) {
|
||||
*data = alpm_list_add(*data, missd);
|
||||
}
|
||||
}
|
||||
alpm_list_free_inner(deps, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||
alpm_list_free(deps);
|
||||
return(-1);
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "pulling dependency %s (needed by %s)\n",
|
||||
alpm_pkg_get_name(spkg), alpm_pkg_get_name(tpkg));
|
||||
list = alpm_list_add(list, spkg);
|
||||
}
|
||||
}
|
||||
if(found) {
|
||||
continue;
|
||||
}
|
||||
alpm_list_free_inner(deps, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||
alpm_list_free(deps);
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "finished resolving dependencies\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* find the package in one of the repositories */
|
||||
/* check literals */
|
||||
for(j = dbs_sync; j && !found; j = j->next) {
|
||||
sync = _alpm_db_get_pkgfromcache(j->data, missdep->name);
|
||||
if(!sync) {
|
||||
continue;
|
||||
}
|
||||
found = alpm_depcmp(sync, missdep) && !_alpm_pkg_find(alpm_pkg_get_name(sync), remove);
|
||||
if(!found) {
|
||||
continue;
|
||||
}
|
||||
/* If package is in the ignorepkg list, ask before we pull it */
|
||||
if(_alpm_pkg_should_ignore(sync)) {
|
||||
pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL);
|
||||
QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &found);
|
||||
_alpm_pkg_free(dummypkg);
|
||||
}
|
||||
}
|
||||
/*TODO this autoresolves the first 'satisfier' package... we should fix this
|
||||
* somehow */
|
||||
/* check provides */
|
||||
/* we don't check literals again to avoid duplicated PM_TRANS_CONV_INSTALL_IGNOREPKG messages */
|
||||
for(j = dbs_sync; j && !found; j = j->next) {
|
||||
for(k = _alpm_db_get_pkgcache(j->data); k && !found; k = k->next) {
|
||||
sync = k->data;
|
||||
if(!sync) {
|
||||
continue;
|
||||
}
|
||||
found = alpm_depcmp(sync, missdep) && strcmp(sync->name, missdep->name)
|
||||
&& !_alpm_pkg_find(alpm_pkg_get_name(sync), remove);
|
||||
if(!found) {
|
||||
continue;
|
||||
}
|
||||
if(_alpm_pkg_should_ignore(sync)) {
|
||||
pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL);
|
||||
QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &found);
|
||||
_alpm_pkg_free(dummypkg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!found) {
|
||||
char *missdepstring = alpm_dep_get_string(missdep);
|
||||
_alpm_log(PM_LOG_ERROR, _("cannot resolve \"%s\", a dependency of \"%s\"\n"),
|
||||
missdepstring, miss->target);
|
||||
free(missdepstring);
|
||||
if(data) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t),/*nothing*/);
|
||||
if(!miss) {
|
||||
pm_errno = PM_ERR_MEMORY;
|
||||
FREELIST(*data);
|
||||
goto error;
|
||||
}
|
||||
*miss = *(pmdepmissing_t *)i->data;
|
||||
*data = alpm_list_add(*data, miss);
|
||||
}
|
||||
pm_errno = PM_ERR_UNSATISFIED_DEPS;
|
||||
goto error;
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "pulling dependency %s (needed by %s)\n",
|
||||
alpm_pkg_get_name(sync), alpm_pkg_get_name(syncpkg));
|
||||
*list = alpm_list_add(*list, sync);
|
||||
if(_alpm_resolvedeps(local, dbs_sync, sync, list, remove, trans, data)) {
|
||||
goto error;
|
||||
}
|
||||
/* Does pkg1 depend on pkg2, ie. does pkg2 satisfy a dependency of pkg1? */
|
||||
int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
for(i = alpm_pkg_get_depends(pkg1); i; i = i->next) {
|
||||
if(alpm_depcmp(pkg2, i->data)) {
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "finished resolving dependencies\n");
|
||||
|
||||
FREELIST(deps);
|
||||
|
||||
return(0);
|
||||
|
||||
error:
|
||||
FREELIST(deps);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_miss_get_target(const pmdepmissing_t *miss)
|
||||
@@ -624,7 +631,17 @@ const char SYMEXPORT *alpm_miss_get_target(const pmdepmissing_t *miss)
|
||||
/* Sanity checks */
|
||||
ASSERT(miss != NULL, return(NULL));
|
||||
|
||||
return miss->target;
|
||||
return(miss->target);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_miss_get_causingpkg(const pmdepmissing_t *miss)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(miss != NULL, return(NULL));
|
||||
|
||||
return miss->causingpkg;
|
||||
}
|
||||
|
||||
pmdepend_t SYMEXPORT *alpm_miss_get_dep(pmdepmissing_t *miss)
|
||||
@@ -634,7 +651,7 @@ pmdepend_t SYMEXPORT *alpm_miss_get_dep(pmdepmissing_t *miss)
|
||||
/* Sanity checks */
|
||||
ASSERT(miss != NULL, return(NULL));
|
||||
|
||||
return &(miss->depend);
|
||||
return(miss->depend);
|
||||
}
|
||||
|
||||
pmdepmod_t SYMEXPORT alpm_dep_get_mod(const pmdepend_t *dep)
|
||||
@@ -644,7 +661,7 @@ pmdepmod_t SYMEXPORT alpm_dep_get_mod(const pmdepend_t *dep)
|
||||
/* Sanity checks */
|
||||
ASSERT(dep != NULL, return(-1));
|
||||
|
||||
return dep->mod;
|
||||
return(dep->mod);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_dep_get_name(const pmdepend_t *dep)
|
||||
@@ -654,7 +671,7 @@ const char SYMEXPORT *alpm_dep_get_name(const pmdepend_t *dep)
|
||||
/* Sanity checks */
|
||||
ASSERT(dep != NULL, return(NULL));
|
||||
|
||||
return dep->name;
|
||||
return(dep->name);
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
|
||||
@@ -664,7 +681,7 @@ const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
|
||||
/* Sanity checks */
|
||||
ASSERT(dep != NULL, return(NULL));
|
||||
|
||||
return dep->version;
|
||||
return(dep->version);
|
||||
}
|
||||
|
||||
/** Reverse of splitdep; make a dep string from a pmdepend_t struct.
|
||||
@@ -674,7 +691,7 @@ const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
|
||||
*/
|
||||
char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
|
||||
{
|
||||
char *opr, *str = NULL;
|
||||
char *name, *opr, *ver, *str = NULL;
|
||||
size_t len;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
@@ -682,6 +699,12 @@ char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
|
||||
/* Sanity checks */
|
||||
ASSERT(dep != NULL, return(NULL));
|
||||
|
||||
if(dep->name) {
|
||||
name = dep->name;
|
||||
} else {
|
||||
name = "";
|
||||
}
|
||||
|
||||
switch(dep->mod) {
|
||||
case PM_DEP_MOD_ANY:
|
||||
opr = "";
|
||||
@@ -706,11 +729,18 @@ char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
|
||||
break;
|
||||
}
|
||||
|
||||
if(dep->version) {
|
||||
ver = dep->version;
|
||||
} else {
|
||||
ver = "";
|
||||
}
|
||||
|
||||
/* we can always compute len and print the string like this because opr
|
||||
* and ver will be empty when PM_DEP_MOD_ANY is the depend type */
|
||||
len = strlen(dep->name) + strlen(opr) + strlen(dep->version) + 1;
|
||||
* and ver will be empty when PM_DEP_MOD_ANY is the depend type. the
|
||||
* reassignments above also ensure we do not do a strlen(NULL). */
|
||||
len = strlen(name) + strlen(opr) + strlen(ver) + 1;
|
||||
MALLOC(str, len, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
snprintf(str, len, "%s%s%s", dep->name, opr, dep->version);
|
||||
snprintf(str, len, "%s%s%s", name, opr, ver);
|
||||
|
||||
return(str);
|
||||
}
|
||||
|
||||
@@ -29,31 +29,30 @@
|
||||
/* Dependency */
|
||||
struct __pmdepend_t {
|
||||
pmdepmod_t mod;
|
||||
char name[PKG_NAME_LEN];
|
||||
char version[PKG_VERSION_LEN];
|
||||
char *name;
|
||||
char *version;
|
||||
};
|
||||
|
||||
/* Missing dependency */
|
||||
struct __pmdepmissing_t {
|
||||
char target[PKG_NAME_LEN];
|
||||
pmdepend_t depend;
|
||||
char *target;
|
||||
pmdepend_t *depend;
|
||||
char *causingpkg; /* this is used in case of remove dependency error only */
|
||||
};
|
||||
|
||||
/* Graphs */
|
||||
struct __pmgraph_t {
|
||||
int state; /* 0: untouched, -1: entered, other: leaving time */
|
||||
void *data;
|
||||
struct __pmgraph_t *parent; /* where did we come from? */
|
||||
alpm_list_t *children;
|
||||
alpm_list_t *childptr; /* points to a child in children list */
|
||||
};
|
||||
|
||||
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod,
|
||||
const char *depname, const char *depversion);
|
||||
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode);
|
||||
void _alpm_dep_free(pmdepend_t *dep);
|
||||
pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep);
|
||||
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepend_t *dep,
|
||||
const char *causinpkg);
|
||||
void _alpm_depmiss_free(pmdepmissing_t *miss);
|
||||
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, int reverse);
|
||||
void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit);
|
||||
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,
|
||||
alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data);
|
||||
pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, pmpkg_t *tpkg);
|
||||
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, alpm_list_t *list,
|
||||
alpm_list_t *remove, alpm_list_t **data);
|
||||
int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2);
|
||||
pmdepend_t *_alpm_splitdep(const char *depstring);
|
||||
pmpkg_t *_alpm_find_dep_satisfier(alpm_list_t *pkgs, pmdepend_t *dep);
|
||||
|
||||
#endif /* _ALPM_DEPS_H */
|
||||
|
||||
|
||||
453
lib/libalpm/dload.c
Normal file
453
lib/libalpm/dload.c
Normal file
@@ -0,0 +1,453 @@
|
||||
/*
|
||||
* download.c
|
||||
*
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
/* the following two are needed on BSD for libfetch */
|
||||
#if defined(HAVE_SYS_SYSLIMITS_H)
|
||||
#include <sys/syslimits.h> /* PATH_MAX */
|
||||
#endif
|
||||
#if defined(HAVE_SYS_PARAM_H)
|
||||
#include <sys/param.h> /* MAXHOSTNAMELEN */
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_LIBDOWNLOAD)
|
||||
#include <download.h>
|
||||
#elif defined(HAVE_LIBFETCH)
|
||||
#include <fetch.h>
|
||||
#define downloadFreeURL fetchFreeURL
|
||||
#define downloadLastErrCode fetchLastErrCode
|
||||
#define downloadLastErrString fetchLastErrString
|
||||
#define downloadParseURL fetchParseURL
|
||||
#define downloadTimeout fetchTimeout
|
||||
#define downloadXGet fetchXGet
|
||||
#endif
|
||||
|
||||
/* libalpm */
|
||||
#include "dload.h"
|
||||
#include "alpm_list.h"
|
||||
#include "alpm.h"
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
#include "handle.h"
|
||||
|
||||
static char *get_filename(const char *url) {
|
||||
char *filename = strrchr(url, '/');
|
||||
if(filename != NULL) {
|
||||
filename++;
|
||||
}
|
||||
return(filename);
|
||||
}
|
||||
|
||||
static char *get_destfile(const char *path, const char *filename) {
|
||||
char *destfile;
|
||||
/* len = localpath len + filename len + null */
|
||||
int len = strlen(path) + strlen(filename) + 1;
|
||||
CALLOC(destfile, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
snprintf(destfile, len, "%s%s", path, filename);
|
||||
|
||||
return(destfile);
|
||||
}
|
||||
|
||||
static char *get_tempfile(const char *path, const char *filename) {
|
||||
char *tempfile;
|
||||
/* len = localpath len + filename len + '.part' len + null */
|
||||
int len = strlen(path) + strlen(filename) + 6;
|
||||
CALLOC(tempfile, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
snprintf(tempfile, len, "%s%s.part", path, filename);
|
||||
|
||||
return(tempfile);
|
||||
}
|
||||
|
||||
#if defined(INTERNAL_DOWNLOAD)
|
||||
/* Build a 'struct url' from an url. */
|
||||
static struct url *url_for_string(const char *url)
|
||||
{
|
||||
struct url *ret = NULL;
|
||||
ret = downloadParseURL(url);
|
||||
if(!ret) {
|
||||
_alpm_log(PM_LOG_ERROR, _("url '%s' is invalid\n"), url);
|
||||
RET_ERR(PM_ERR_SERVER_BAD_URL, NULL);
|
||||
}
|
||||
|
||||
/* if no URL scheme specified, assume HTTP */
|
||||
if(strlen(ret->scheme) == 0) {
|
||||
_alpm_log(PM_LOG_WARNING, _("url scheme not specified, assuming HTTP\n"));
|
||||
strcpy(ret->scheme, SCHEME_HTTP);
|
||||
}
|
||||
/* add a user & password for anonymous FTP */
|
||||
if(strcmp(ret->scheme,SCHEME_FTP) == 0 && strlen(ret->user) == 0) {
|
||||
strcpy(ret->user, "anonymous");
|
||||
strcpy(ret->pwd, "libalpm@guest");
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
static int download_internal(const char *url, const char *localpath,
|
||||
time_t mtimeold, time_t *mtimenew) {
|
||||
FILE *dlf, *localf = NULL;
|
||||
struct url_stat ust;
|
||||
struct stat st;
|
||||
int chk_resume = 0, ret = 0;
|
||||
size_t dl_thisfile = 0, nread = 0;
|
||||
char *tempfile, *destfile, *filename;
|
||||
struct url *fileurl = url_for_string(url);
|
||||
char buffer[PM_DLBUF_LEN];
|
||||
|
||||
if(!fileurl) {
|
||||
return(-1);
|
||||
}
|
||||
|
||||
filename = get_filename(url);
|
||||
if(!filename) {
|
||||
return(-1);
|
||||
}
|
||||
destfile = get_destfile(localpath, filename);
|
||||
tempfile = get_tempfile(localpath, filename);
|
||||
|
||||
/* pass the raw filename for passing to the callback function */
|
||||
_alpm_log(PM_LOG_DEBUG, "using '%s' for download progress\n", filename);
|
||||
|
||||
if(stat(tempfile, &st) == 0 && st.st_size > 0) {
|
||||
_alpm_log(PM_LOG_DEBUG, "existing file found, using it\n");
|
||||
fileurl->offset = (off_t)st.st_size;
|
||||
dl_thisfile = st.st_size;
|
||||
localf = fopen(tempfile, "ab");
|
||||
chk_resume = 1;
|
||||
} else {
|
||||
fileurl->offset = (off_t)0;
|
||||
dl_thisfile = 0;
|
||||
}
|
||||
|
||||
/* print proxy info for debug purposes */
|
||||
_alpm_log(PM_LOG_DEBUG, "HTTP_PROXY: %s\n", getenv("HTTP_PROXY"));
|
||||
_alpm_log(PM_LOG_DEBUG, "http_proxy: %s\n", getenv("http_proxy"));
|
||||
_alpm_log(PM_LOG_DEBUG, "FTP_PROXY: %s\n", getenv("FTP_PROXY"));
|
||||
_alpm_log(PM_LOG_DEBUG, "ftp_proxy: %s\n", getenv("ftp_proxy"));
|
||||
|
||||
/* libdownload does not reset the error code, reset it in
|
||||
* the case of previous errors */
|
||||
downloadLastErrCode = 0;
|
||||
|
||||
/* 10s timeout - TODO make a config option */
|
||||
downloadTimeout = 10000;
|
||||
|
||||
dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));
|
||||
|
||||
if(downloadLastErrCode != 0 || dlf == NULL) {
|
||||
const char *host = _("disk");
|
||||
if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) {
|
||||
host = fileurl->host;
|
||||
}
|
||||
pm_errno = PM_ERR_LIBDOWNLOAD;
|
||||
_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
|
||||
filename, host, downloadLastErrString);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "connected to %s successfully\n", fileurl->host);
|
||||
}
|
||||
|
||||
if(ust.mtime && mtimeold && ust.mtime == mtimeold) {
|
||||
_alpm_log(PM_LOG_DEBUG, "mtimes are identical, skipping %s\n", filename);
|
||||
ret = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(ust.mtime && mtimenew) {
|
||||
*mtimenew = ust.mtime;
|
||||
}
|
||||
|
||||
if(chk_resume && fileurl->offset == 0) {
|
||||
_alpm_log(PM_LOG_WARNING, _("cannot resume download, starting over\n"));
|
||||
if(localf != NULL) {
|
||||
fclose(localf);
|
||||
localf = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if(localf == NULL) {
|
||||
_alpm_rmrf(tempfile);
|
||||
fileurl->offset = (off_t)0;
|
||||
dl_thisfile = 0;
|
||||
localf = fopen(tempfile, "wb");
|
||||
if(localf == NULL) { /* still null? */
|
||||
_alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'\n"), tempfile);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
/* Progress 0 - initialize */
|
||||
if(handle->dlcb) {
|
||||
handle->dlcb(filename, 0, ust.size);
|
||||
}
|
||||
|
||||
while((nread = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) {
|
||||
size_t nwritten = 0;
|
||||
if(ferror(dlf)) {
|
||||
pm_errno = PM_ERR_LIBDOWNLOAD;
|
||||
_alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s\n"),
|
||||
filename, downloadLastErrString);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
while(nwritten < nread) {
|
||||
nwritten += fwrite(buffer, 1, (nread - nwritten), localf);
|
||||
if(ferror(localf)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
|
||||
destfile, strerror(errno));
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
dl_thisfile += nread;
|
||||
|
||||
if(handle->dlcb) {
|
||||
handle->dlcb(filename, dl_thisfile, ust.size);
|
||||
}
|
||||
}
|
||||
/* probably safer to close the file descriptors now before renaming the file,
|
||||
* for example to make sure the buffers are flushed.
|
||||
*/
|
||||
fclose(localf);
|
||||
localf = NULL;
|
||||
fclose(dlf);
|
||||
dlf = NULL;
|
||||
|
||||
rename(tempfile, destfile);
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
FREE(tempfile);
|
||||
FREE(destfile);
|
||||
if(localf != NULL) {
|
||||
fclose(localf);
|
||||
}
|
||||
if(dlf != NULL) {
|
||||
fclose(dlf);
|
||||
}
|
||||
downloadFreeURL(fileurl);
|
||||
return(ret);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int download_external(const char *url, const char *localpath,
|
||||
time_t mtimeold, time_t *mtimenew) {
|
||||
int ret = 0;
|
||||
int retval;
|
||||
int usepart = 0;
|
||||
char *ptr1, *ptr2;
|
||||
char origCmd[PATH_MAX];
|
||||
char parsedCmd[PATH_MAX] = "";
|
||||
char cwd[PATH_MAX];
|
||||
char *destfile, *tempfile, *filename;
|
||||
|
||||
if(!handle->xfercommand) {
|
||||
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
|
||||
}
|
||||
|
||||
filename = get_filename(url);
|
||||
if(!filename) {
|
||||
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
|
||||
}
|
||||
destfile = get_destfile(localpath, filename);
|
||||
tempfile = get_tempfile(localpath, filename);
|
||||
|
||||
/* replace all occurrences of %o with fn.part */
|
||||
strncpy(origCmd, handle->xfercommand, sizeof(origCmd));
|
||||
ptr1 = origCmd;
|
||||
while((ptr2 = strstr(ptr1, "%o"))) {
|
||||
usepart = 1;
|
||||
ptr2[0] = '\0';
|
||||
strcat(parsedCmd, ptr1);
|
||||
strcat(parsedCmd, tempfile);
|
||||
ptr1 = ptr2 + 2;
|
||||
}
|
||||
strcat(parsedCmd, ptr1);
|
||||
/* replace all occurrences of %u with the download URL */
|
||||
strncpy(origCmd, parsedCmd, sizeof(origCmd));
|
||||
parsedCmd[0] = '\0';
|
||||
ptr1 = origCmd;
|
||||
while((ptr2 = strstr(ptr1, "%u"))) {
|
||||
ptr2[0] = '\0';
|
||||
strcat(parsedCmd, ptr1);
|
||||
strcat(parsedCmd, url);
|
||||
ptr1 = ptr2 + 2;
|
||||
}
|
||||
strcat(parsedCmd, ptr1);
|
||||
/* cwd to the download directory */
|
||||
getcwd(cwd, PATH_MAX);
|
||||
if(chdir(localpath)) {
|
||||
_alpm_log(PM_LOG_WARNING, _("could not chdir to %s\n"), localpath);
|
||||
pm_errno = PM_ERR_EXTERNAL_DOWNLOAD;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
/* execute the parsed command via /bin/sh -c */
|
||||
_alpm_log(PM_LOG_DEBUG, "running command: %s\n", parsedCmd);
|
||||
retval = system(parsedCmd);
|
||||
|
||||
if(retval == -1) {
|
||||
_alpm_log(PM_LOG_WARNING, _("running XferCommand: fork failed!\n"));
|
||||
pm_errno = PM_ERR_EXTERNAL_DOWNLOAD;
|
||||
ret = -1;
|
||||
} else if(retval != 0) {
|
||||
/* download failed */
|
||||
_alpm_log(PM_LOG_DEBUG, "XferCommand command returned non-zero status "
|
||||
"code (%d)\n", retval);
|
||||
ret = -1;
|
||||
} else {
|
||||
/* download was successful */
|
||||
if(usepart) {
|
||||
rename(tempfile, destfile);
|
||||
}
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
chdir(cwd);
|
||||
if(ret == -1) {
|
||||
/* hack to let an user the time to cancel a download */
|
||||
sleep(2);
|
||||
}
|
||||
FREE(destfile);
|
||||
FREE(tempfile);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
static int download(const char *url, const char *localpath,
|
||||
time_t mtimeold, time_t *mtimenew) {
|
||||
int ret;
|
||||
|
||||
/* We have a few things to take into account here.
|
||||
* 1. If we have both internal/external available, choose based on
|
||||
* whether xfercommand is populated.
|
||||
* 2. If we only have external available, we should first check
|
||||
* if a command was provided before we drop into download_external.
|
||||
*/
|
||||
if(handle->xfercommand == NULL) {
|
||||
#if defined(INTERNAL_DOWNLOAD)
|
||||
ret = download_internal(url, localpath, mtimeold, mtimenew);
|
||||
#else
|
||||
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
|
||||
#endif
|
||||
} else {
|
||||
ret = download_external(url, localpath, mtimeold, mtimenew);
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Download a single file
|
||||
* - if mtimeold is non-NULL, then only download the file if it's different
|
||||
* than mtimeold.
|
||||
* - if *mtimenew is non-NULL, it will be filled with the mtime of the remote
|
||||
* file.
|
||||
* - servers must be a list of urls WITHOUT trailing slashes.
|
||||
*
|
||||
* RETURN: 0 for successful download
|
||||
* 1 if the mtimes are identical
|
||||
* -1 on error
|
||||
*/
|
||||
int _alpm_download_single_file(const char *filename,
|
||||
alpm_list_t *servers, const char *localpath,
|
||||
time_t mtimeold, time_t *mtimenew)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
int ret = -1;
|
||||
|
||||
for(i = servers; i; i = i->next) {
|
||||
const char *server = i->data;
|
||||
char *fileurl = NULL;
|
||||
int len;
|
||||
|
||||
/* print server + filename into a buffer */
|
||||
len = strlen(server) + strlen(filename) + 2;
|
||||
CALLOC(fileurl, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, -1));
|
||||
snprintf(fileurl, len, "%s/%s", server, filename);
|
||||
|
||||
ret = download(fileurl, localpath, mtimeold, mtimenew);
|
||||
FREE(fileurl);
|
||||
if(ret != -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
int _alpm_download_files(alpm_list_t *files,
|
||||
alpm_list_t *servers, const char *localpath)
|
||||
{
|
||||
int ret = 0;
|
||||
alpm_list_t *lp;
|
||||
|
||||
for(lp = files; lp; lp = lp->next) {
|
||||
char *filename = lp->data;
|
||||
if(_alpm_download_single_file(filename, servers,
|
||||
localpath, 0, NULL) == -1) {
|
||||
ret++;
|
||||
}
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/** Fetch a remote pkg.
|
||||
* @param url URL of the package to download
|
||||
* @return the downloaded filepath on success, NULL on error
|
||||
* @addtogroup alpm_misc
|
||||
*/
|
||||
char SYMEXPORT *alpm_fetch_pkgurl(const char *url)
|
||||
{
|
||||
char *filename, *filepath;
|
||||
const char *cachedir;
|
||||
int ret;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
filename = get_filename(url);
|
||||
|
||||
/* find a valid cache dir to download to */
|
||||
cachedir = _alpm_filecache_setup();
|
||||
|
||||
/* download the file */
|
||||
ret = download(url, cachedir, 0, NULL);
|
||||
if(ret == -1) {
|
||||
_alpm_log(PM_LOG_WARNING, _("failed to download %s\n"), url);
|
||||
return(NULL);
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "successfully downloaded %s\n", url);
|
||||
|
||||
/* we should be able to find the file the second time around */
|
||||
filepath = _alpm_filecache_find(filename);
|
||||
return(filepath);
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* error.h
|
||||
* dload.h
|
||||
*
|
||||
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,13 +16,23 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef _ALPM_ERROR_H
|
||||
#define _ALPM_ERROR_H
|
||||
#ifndef _ALPM_DLOAD_H
|
||||
#define _ALPM_DLOAD_H
|
||||
|
||||
#define RET_ERR(err, ret) do { pm_errno = (err); \
|
||||
_alpm_log(PM_LOG_DEBUG, "returning error %d from %s : %s\n", err, __func__, alpm_strerrorlast()); \
|
||||
return(ret); } while(0)
|
||||
#include "alpm_list.h"
|
||||
#include "alpm.h"
|
||||
|
||||
#endif /* _ALPM_ERROR_H */
|
||||
#include <time.h>
|
||||
|
||||
#define PM_DLBUF_LEN (1024 * 10)
|
||||
|
||||
int _alpm_download_single_file(const char *filename,
|
||||
alpm_list_t *servers, const char *localpath,
|
||||
time_t mtimeold, time_t *mtimenew);
|
||||
|
||||
int _alpm_download_files(alpm_list_t *files,
|
||||
alpm_list_t *servers, const char *localpath);
|
||||
|
||||
#endif /* _ALPM_DLOAD_H */
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
@@ -1,10 +1,7 @@
|
||||
/*
|
||||
* error.c
|
||||
*
|
||||
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
|
||||
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -22,12 +19,28 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/* TODO: needed for the libfetch stuff, unfortunately- we should kill it */
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
/* the following two are needed on BSD for libfetch */
|
||||
#if defined(HAVE_SYS_SYSLIMITS_H)
|
||||
#include <sys/syslimits.h> /* PATH_MAX */
|
||||
#endif
|
||||
#if defined(HAVE_SYS_PARAM_H)
|
||||
#include <sys/param.h> /* MAXHOSTNAMELEN */
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_LIBDOWNLOAD)
|
||||
#include <download.h> /* downloadLastErrString */
|
||||
#elif defined(HAVE_LIBFETCH)
|
||||
#include <fetch.h> /* fetchLastErrString */
|
||||
#define downloadLastErrString fetchLastErrString
|
||||
#endif
|
||||
|
||||
/* libalpm */
|
||||
#include "error.h"
|
||||
#include "util.h"
|
||||
#include "alpm.h"
|
||||
|
||||
/* TODO does this really need a file all on its own? */
|
||||
const char SYMEXPORT *alpm_strerrorlast(void)
|
||||
{
|
||||
return alpm_strerror(pm_errno);
|
||||
@@ -74,13 +87,6 @@ const char SYMEXPORT *alpm_strerror(int err)
|
||||
/* Servers */
|
||||
case PM_ERR_SERVER_BAD_URL:
|
||||
return _("invalid url for server");
|
||||
/* Configuration */
|
||||
case PM_ERR_OPT_LOGFILE:
|
||||
case PM_ERR_OPT_DBPATH:
|
||||
case PM_ERR_OPT_LOCALDB:
|
||||
case PM_ERR_OPT_SYNCDB:
|
||||
case PM_ERR_OPT_USESYSLOG:
|
||||
return _("could not set parameter");
|
||||
/* Transactions */
|
||||
case PM_ERR_TRANS_NOT_NULL:
|
||||
return _("transaction already initialized");
|
||||
@@ -109,21 +115,17 @@ const char SYMEXPORT *alpm_strerror(int err)
|
||||
return _("cannot open package file");
|
||||
case PM_ERR_PKG_LOAD:
|
||||
return _("cannot load package data");
|
||||
case PM_ERR_PKG_INSTALLED:
|
||||
return _("package already installed");
|
||||
case PM_ERR_PKG_CANT_FRESH:
|
||||
return _("package not installed or lesser version");
|
||||
case PM_ERR_PKG_CANT_REMOVE:
|
||||
return _("cannot remove all files for package");
|
||||
case PM_ERR_PKG_INVALID_NAME:
|
||||
return _("package name is not valid");
|
||||
case PM_ERR_PKG_CORRUPTED:
|
||||
return _("corrupted package");
|
||||
return _("package filename is not valid");
|
||||
case PM_ERR_PKG_REPO_NOT_FOUND:
|
||||
return _("no such repository");
|
||||
/* Deltas */
|
||||
case PM_ERR_DLT_CORRUPTED:
|
||||
return _("corrupted delta");
|
||||
case PM_ERR_DLT_INVALID:
|
||||
return _("invalid or corrupted delta");
|
||||
case PM_ERR_DLT_PATCHFAILED:
|
||||
return _("delta patch failed");
|
||||
/* Groups */
|
||||
@@ -141,16 +143,26 @@ const char SYMEXPORT *alpm_strerror(int err)
|
||||
return _("user aborted the operation");
|
||||
case PM_ERR_INTERNAL_ERROR:
|
||||
return _("internal error");
|
||||
case PM_ERR_LIBARCHIVE_ERROR:
|
||||
return _("libarchive error");
|
||||
case PM_ERR_PKG_HOLD:
|
||||
/* TODO wow this is not descriptive at all... what does this mean? */
|
||||
return _("not confirmed");
|
||||
case PM_ERR_INVALID_REGEX:
|
||||
return _("invalid regular expression");
|
||||
/* Downloading */
|
||||
case PM_ERR_CONNECT_FAILED:
|
||||
return _("connection to remote host failed");
|
||||
/* Errors from external libraries- our own wrapper error */
|
||||
case PM_ERR_LIBARCHIVE:
|
||||
/* it would be nice to use archive_error_string() here, but that
|
||||
* requires the archive struct, so we can't. Just use a generic
|
||||
* error string instead. */
|
||||
return _("libarchive error");
|
||||
case PM_ERR_LIBDOWNLOAD:
|
||||
#if defined(INTERNAL_DOWNLOAD)
|
||||
return downloadLastErrString;
|
||||
#else
|
||||
/* obviously shouldn't get here... */
|
||||
return _("download library error");
|
||||
#endif
|
||||
case PM_ERR_EXTERNAL_DOWNLOAD:
|
||||
return _("error invoking external downloader");
|
||||
/* Unknown error! */
|
||||
default:
|
||||
return _("unexpected error");
|
||||
|
||||
58
lib/libalpm/graph.h
Normal file
58
lib/libalpm/graph.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* graph.h - helpful graph structure and setup/teardown methods
|
||||
*
|
||||
* Copyright (c) 2002-2008 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <sys/types.h> /* off_t */
|
||||
|
||||
#include "alpm_list.h"
|
||||
#include "util.h" /* MALLOC() */
|
||||
#include "alpm.h"
|
||||
|
||||
struct __pmgraph_t {
|
||||
char state; /* 0: untouched, -1: entered, other: leaving time */
|
||||
void *data;
|
||||
off_t weight; /* weight of the node */
|
||||
struct __pmgraph_t *parent; /* where did we come from? */
|
||||
alpm_list_t *children;
|
||||
alpm_list_t *childptr; /* points to a child in children list */
|
||||
};
|
||||
typedef struct __pmgraph_t pmgraph_t;
|
||||
|
||||
static pmgraph_t *_alpm_graph_new(void)
|
||||
{
|
||||
pmgraph_t *graph = NULL;
|
||||
|
||||
MALLOC(graph, sizeof(pmgraph_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
if(graph) {
|
||||
graph->state = 0;
|
||||
graph->data = NULL;
|
||||
graph->parent = NULL;
|
||||
graph->children = NULL;
|
||||
graph->childptr = NULL;
|
||||
}
|
||||
return(graph);
|
||||
}
|
||||
|
||||
static void _alpm_graph_free(void *data)
|
||||
{
|
||||
pmgraph_t *graph = data;
|
||||
alpm_list_free(graph->children);
|
||||
free(graph);
|
||||
}
|
||||
|
||||
@@ -27,17 +27,17 @@
|
||||
#include "group.h"
|
||||
#include "alpm_list.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "log.h"
|
||||
#include "alpm.h"
|
||||
|
||||
pmgrp_t *_alpm_grp_new()
|
||||
pmgrp_t *_alpm_grp_new(const char *name)
|
||||
{
|
||||
pmgrp_t* grp;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
CALLOC(grp, 1, sizeof(pmgrp_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
STRDUP(grp->name, name, RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
return(grp);
|
||||
}
|
||||
@@ -50,20 +50,12 @@ void _alpm_grp_free(pmgrp_t *grp)
|
||||
return;
|
||||
}
|
||||
|
||||
FREELIST(grp->packages);
|
||||
FREE(grp->name);
|
||||
/* do NOT free the contents of the list, just the nodes */
|
||||
alpm_list_free(grp->packages);
|
||||
FREE(grp);
|
||||
}
|
||||
|
||||
/* Helper function for sorting groups
|
||||
*/
|
||||
int _alpm_grp_cmp(const void *g1, const void *g2)
|
||||
{
|
||||
pmgrp_t *grp1 = (pmgrp_t *)g1;
|
||||
pmgrp_t *grp2 = (pmgrp_t *)g2;
|
||||
|
||||
return(strcmp(grp1->name, grp2->name));
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_grp_get_name(const pmgrp_t *grp)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
@@ -74,7 +66,7 @@ const char SYMEXPORT *alpm_grp_get_name(const pmgrp_t *grp)
|
||||
return grp->name;
|
||||
}
|
||||
|
||||
const alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(const pmgrp_t *grp)
|
||||
alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(const pmgrp_t *grp)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
|
||||
@@ -19,19 +19,17 @@
|
||||
#ifndef _ALPM_GROUP_H
|
||||
#define _ALPM_GROUP_H
|
||||
|
||||
/* Groups */
|
||||
#define GRP_NAME_LEN 256
|
||||
|
||||
#include "alpm.h"
|
||||
|
||||
struct __pmgrp_t {
|
||||
char name[GRP_NAME_LEN];
|
||||
alpm_list_t *packages; /* List of strings */
|
||||
/** group name */
|
||||
char *name;
|
||||
/** list of pmpkg_t packages */
|
||||
alpm_list_t *packages;
|
||||
};
|
||||
|
||||
pmgrp_t *_alpm_grp_new(void);
|
||||
pmgrp_t *_alpm_grp_new(const char *name);
|
||||
void _alpm_grp_free(pmgrp_t *grp);
|
||||
int _alpm_grp_cmp(const void *g1, const void *g2);
|
||||
|
||||
#endif /* _ALPM_GROUP_H */
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
#include <sys/types.h>
|
||||
#include <syslog.h>
|
||||
@@ -36,10 +35,8 @@
|
||||
#include "alpm_list.h"
|
||||
#include "util.h"
|
||||
#include "log.h"
|
||||
#include "error.h"
|
||||
#include "trans.h"
|
||||
#include "alpm.h"
|
||||
#include "server.h"
|
||||
|
||||
/* global var for handle (private to libalpm) */
|
||||
pmhandle_t *handle = NULL;
|
||||
@@ -55,8 +52,6 @@ pmhandle_t *_alpm_handle_new()
|
||||
handle->lckfd = -1;
|
||||
handle->logstream = NULL;
|
||||
|
||||
/* see if we're root or not */
|
||||
handle->uid = geteuid();
|
||||
handle->root = NULL;
|
||||
handle->dbpath = NULL;
|
||||
handle->cachedirs = NULL;
|
||||
@@ -120,6 +115,15 @@ alpm_cb_download SYMEXPORT alpm_option_get_dlcb()
|
||||
return handle->dlcb;
|
||||
}
|
||||
|
||||
alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb()
|
||||
{
|
||||
if (handle == NULL) {
|
||||
pm_errno = PM_ERR_HANDLE_NULL;
|
||||
return NULL;
|
||||
}
|
||||
return handle->totaldlcb;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_option_get_root()
|
||||
{
|
||||
if (handle == NULL) {
|
||||
@@ -273,6 +277,15 @@ void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb)
|
||||
handle->dlcb = cb;
|
||||
}
|
||||
|
||||
void SYMEXPORT alpm_option_set_totaldlcb(alpm_cb_totaldl cb)
|
||||
{
|
||||
if (handle == NULL) {
|
||||
pm_errno = PM_ERR_HANDLE_NULL;
|
||||
return;
|
||||
}
|
||||
handle->totaldlcb = cb;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_root(const char *root)
|
||||
{
|
||||
struct stat st;
|
||||
@@ -386,7 +399,7 @@ void SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs)
|
||||
|
||||
int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir)
|
||||
{
|
||||
void *vdata = NULL;
|
||||
char *vdata = NULL;
|
||||
char *newcachedir;
|
||||
size_t cachedirlen;
|
||||
/* verify cachedir ends in a '/' */
|
||||
@@ -397,8 +410,7 @@ int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir)
|
||||
newcachedir = calloc(cachedirlen + 1, sizeof(char));
|
||||
strncpy(newcachedir, cachedir, cachedirlen);
|
||||
newcachedir[cachedirlen-1] = '/';
|
||||
handle->cachedirs = alpm_list_remove(handle->cachedirs, newcachedir,
|
||||
_alpm_str_cmp, &vdata);
|
||||
handle->cachedirs = alpm_list_remove_str(handle->cachedirs, newcachedir, &vdata);
|
||||
FREE(newcachedir);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
@@ -427,6 +439,7 @@ int SYMEXPORT alpm_option_set_logfile(const char *logfile)
|
||||
}
|
||||
if(handle->logstream) {
|
||||
fclose(handle->logstream);
|
||||
handle->logstream = NULL;
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "option 'logfile' = %s\n", handle->logfile);
|
||||
return(0);
|
||||
@@ -450,9 +463,8 @@ void SYMEXPORT alpm_option_set_noupgrades(alpm_list_t *noupgrade)
|
||||
|
||||
int SYMEXPORT alpm_option_remove_noupgrade(const char *pkg)
|
||||
{
|
||||
void *vdata = NULL;
|
||||
handle->noupgrade = alpm_list_remove(handle->noupgrade, pkg,
|
||||
_alpm_str_cmp, &vdata);
|
||||
char *vdata = NULL;
|
||||
handle->noupgrade = alpm_list_remove_str(handle->noupgrade, pkg, &vdata);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
return(1);
|
||||
@@ -473,9 +485,8 @@ void SYMEXPORT alpm_option_set_noextracts(alpm_list_t *noextract)
|
||||
|
||||
int SYMEXPORT alpm_option_remove_noextract(const char *pkg)
|
||||
{
|
||||
void *vdata = NULL;
|
||||
handle->noextract = alpm_list_remove(handle->noextract, pkg,
|
||||
_alpm_str_cmp, &vdata);
|
||||
char *vdata = NULL;
|
||||
handle->noextract = alpm_list_remove_str(handle->noextract, pkg, &vdata);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
return(1);
|
||||
@@ -488,7 +499,7 @@ void SYMEXPORT alpm_option_add_ignorepkg(const char *pkg)
|
||||
handle->ignorepkg = alpm_list_add(handle->ignorepkg, strdup(pkg));
|
||||
}
|
||||
|
||||
void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)
|
||||
void SYMEXPORT alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)
|
||||
{
|
||||
if(handle->ignorepkg) FREELIST(handle->ignorepkg);
|
||||
if(ignorepkgs) handle->ignorepkg = ignorepkgs;
|
||||
@@ -496,9 +507,8 @@ void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)
|
||||
|
||||
int SYMEXPORT alpm_option_remove_ignorepkg(const char *pkg)
|
||||
{
|
||||
void *vdata = NULL;
|
||||
handle->ignorepkg = alpm_list_remove(handle->ignorepkg, pkg,
|
||||
_alpm_str_cmp, &vdata);
|
||||
char *vdata = NULL;
|
||||
handle->ignorepkg = alpm_list_remove_str(handle->ignorepkg, pkg, &vdata);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
return(1);
|
||||
@@ -519,9 +529,8 @@ void SYMEXPORT alpm_option_set_holdpkgs(alpm_list_t *holdpkgs)
|
||||
|
||||
int SYMEXPORT alpm_option_remove_holdpkg(const char *pkg)
|
||||
{
|
||||
void *vdata = NULL;
|
||||
handle->holdpkg = alpm_list_remove(handle->holdpkg, pkg,
|
||||
_alpm_str_cmp, &vdata);
|
||||
char *vdata = NULL;
|
||||
handle->holdpkg = alpm_list_remove_str(handle->holdpkg, pkg, &vdata);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
return(1);
|
||||
@@ -534,7 +543,7 @@ void SYMEXPORT alpm_option_add_ignoregrp(const char *grp)
|
||||
handle->ignoregrp = alpm_list_add(handle->ignoregrp, strdup(grp));
|
||||
}
|
||||
|
||||
void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
|
||||
void SYMEXPORT alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
|
||||
{
|
||||
if(handle->ignoregrp) FREELIST(handle->ignoregrp);
|
||||
if(ignoregrps) handle->ignoregrp = ignoregrps;
|
||||
@@ -542,9 +551,8 @@ void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
|
||||
|
||||
int SYMEXPORT alpm_option_remove_ignoregrp(const char *grp)
|
||||
{
|
||||
void *vdata = NULL;
|
||||
handle->ignoregrp = alpm_list_remove(handle->ignoregrp, grp,
|
||||
_alpm_str_cmp, &vdata);
|
||||
char *vdata = NULL;
|
||||
handle->ignoregrp = alpm_list_remove_str(handle->ignoregrp, grp, &vdata);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
return(1);
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
|
||||
typedef struct _pmhandle_t {
|
||||
/* internal usage */
|
||||
uid_t uid; /* current UID */ /* TODO is this used? */
|
||||
pmdb_t *db_local; /* local db pointer */
|
||||
alpm_list_t *dbs_sync; /* List of (pmdb_t *) */
|
||||
FILE *logstream; /* log file stream pointer */
|
||||
@@ -40,6 +39,7 @@ typedef struct _pmhandle_t {
|
||||
/* callback functions */
|
||||
alpm_cb_log logcb; /* Log callback function */
|
||||
alpm_cb_download dlcb; /* Download callback function */
|
||||
alpm_cb_totaldl totaldlcb; /* Total download callback function */
|
||||
|
||||
/* filesystem paths */
|
||||
char *root; /* Root path, default '/' */
|
||||
@@ -50,7 +50,7 @@ typedef struct _pmhandle_t {
|
||||
|
||||
/* package lists */
|
||||
alpm_list_t *noupgrade; /* List of packages NOT to be upgraded */
|
||||
alpm_list_t *noextract; /* List of packages NOT to extract */ /*TODO is this used?*/
|
||||
alpm_list_t *noextract; /* List of files NOT to extract */
|
||||
alpm_list_t *ignorepkg; /* List of packages to ignore */
|
||||
alpm_list_t *holdpkg; /* List of packages which 'hold' pacman */
|
||||
alpm_list_t *ignoregrp; /* List of groups to ignore */
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
#include "log.h"
|
||||
#include "handle.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "alpm.h"
|
||||
|
||||
/** \addtogroup alpm_log Logging Functions
|
||||
|
||||
@@ -3,18 +3,18 @@
|
||||
*
|
||||
* Copyright (C) 2006-2007 Christophe Devine
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License, version 2.1 as published by the Free Software Foundation.
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*
|
||||
* The MD5 algorithm was designed by Ron Rivest in 1991.
|
||||
@@ -25,8 +25,9 @@
|
||||
* Pacman Notes:
|
||||
*
|
||||
* Taken from the XySSL project at www.xyssl.org under terms of the
|
||||
* LGPL. This is from version 0.7 of the library, and has been modified
|
||||
* GPL. This is from version 0.9 of the library, and has been modified
|
||||
* as following, which may be helpful for future updates:
|
||||
* * remove "xyssl/config.h" include
|
||||
* * change include from "xyssl/md5.h" to "md5.h"
|
||||
* * removal of HMAC code
|
||||
* * removal of SELF_TEST code
|
||||
@@ -35,12 +36,9 @@
|
||||
* int md5_file( char *path, unsigned char *output )
|
||||
* to
|
||||
* int md5_file( const char *path, unsigned char *output )
|
||||
* * various static/inline changes
|
||||
*/
|
||||
|
||||
#ifndef _CRT_SECURE_NO_DEPRECATE
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -49,8 +47,8 @@
|
||||
/*
|
||||
* 32-bit integer manipulation macros (little endian)
|
||||
*/
|
||||
#ifndef GET_UINT32_LE
|
||||
#define GET_UINT32_LE(n,b,i) \
|
||||
#ifndef GET_ULONG_LE
|
||||
#define GET_ULONG_LE(n,b,i) \
|
||||
{ \
|
||||
(n) = ( (unsigned long) (b)[(i) ] ) \
|
||||
| ( (unsigned long) (b)[(i) + 1] << 8 ) \
|
||||
@@ -59,8 +57,8 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef PUT_UINT32_LE
|
||||
#define PUT_UINT32_LE(n,b,i) \
|
||||
#ifndef PUT_ULONG_LE
|
||||
#define PUT_ULONG_LE(n,b,i) \
|
||||
{ \
|
||||
(b)[(i) ] = (unsigned char) ( (n) ); \
|
||||
(b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \
|
||||
@@ -87,22 +85,22 @@ static inline void md5_process( md5_context *ctx, unsigned char data[64] )
|
||||
{
|
||||
unsigned long X[16], A, B, C, D;
|
||||
|
||||
GET_UINT32_LE( X[ 0], data, 0 );
|
||||
GET_UINT32_LE( X[ 1], data, 4 );
|
||||
GET_UINT32_LE( X[ 2], data, 8 );
|
||||
GET_UINT32_LE( X[ 3], data, 12 );
|
||||
GET_UINT32_LE( X[ 4], data, 16 );
|
||||
GET_UINT32_LE( X[ 5], data, 20 );
|
||||
GET_UINT32_LE( X[ 6], data, 24 );
|
||||
GET_UINT32_LE( X[ 7], data, 28 );
|
||||
GET_UINT32_LE( X[ 8], data, 32 );
|
||||
GET_UINT32_LE( X[ 9], data, 36 );
|
||||
GET_UINT32_LE( X[10], data, 40 );
|
||||
GET_UINT32_LE( X[11], data, 44 );
|
||||
GET_UINT32_LE( X[12], data, 48 );
|
||||
GET_UINT32_LE( X[13], data, 52 );
|
||||
GET_UINT32_LE( X[14], data, 56 );
|
||||
GET_UINT32_LE( X[15], data, 60 );
|
||||
GET_ULONG_LE( X[ 0], data, 0 );
|
||||
GET_ULONG_LE( X[ 1], data, 4 );
|
||||
GET_ULONG_LE( X[ 2], data, 8 );
|
||||
GET_ULONG_LE( X[ 3], data, 12 );
|
||||
GET_ULONG_LE( X[ 4], data, 16 );
|
||||
GET_ULONG_LE( X[ 5], data, 20 );
|
||||
GET_ULONG_LE( X[ 6], data, 24 );
|
||||
GET_ULONG_LE( X[ 7], data, 28 );
|
||||
GET_ULONG_LE( X[ 8], data, 32 );
|
||||
GET_ULONG_LE( X[ 9], data, 36 );
|
||||
GET_ULONG_LE( X[10], data, 40 );
|
||||
GET_ULONG_LE( X[11], data, 44 );
|
||||
GET_ULONG_LE( X[12], data, 48 );
|
||||
GET_ULONG_LE( X[13], data, 52 );
|
||||
GET_ULONG_LE( X[14], data, 56 );
|
||||
GET_ULONG_LE( X[15], data, 60 );
|
||||
|
||||
#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
|
||||
|
||||
@@ -250,7 +248,7 @@ static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned char md5_padding[64] =
|
||||
static const unsigned char md5_padding[64] =
|
||||
{
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -261,7 +259,7 @@ static unsigned char md5_padding[64] =
|
||||
/*
|
||||
* MD5 final digest
|
||||
*/
|
||||
static inline void md5_finish( md5_context *ctx, unsigned char *output )
|
||||
static inline void md5_finish( md5_context *ctx, unsigned char output[16] )
|
||||
{
|
||||
unsigned long last, padn;
|
||||
unsigned long high, low;
|
||||
@@ -271,8 +269,8 @@ static inline void md5_finish( md5_context *ctx, unsigned char *output )
|
||||
| ( ctx->total[1] << 3 );
|
||||
low = ( ctx->total[0] << 3 );
|
||||
|
||||
PUT_UINT32_LE( low, msglen, 0 );
|
||||
PUT_UINT32_LE( high, msglen, 4 );
|
||||
PUT_ULONG_LE( low, msglen, 0 );
|
||||
PUT_ULONG_LE( high, msglen, 4 );
|
||||
|
||||
last = ctx->total[0] & 0x3F;
|
||||
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
|
||||
@@ -280,17 +278,16 @@ static inline void md5_finish( md5_context *ctx, unsigned char *output )
|
||||
md5_update( ctx, (unsigned char *) md5_padding, padn );
|
||||
md5_update( ctx, msglen, 8 );
|
||||
|
||||
PUT_UINT32_LE( ctx->state[0], output, 0 );
|
||||
PUT_UINT32_LE( ctx->state[1], output, 4 );
|
||||
PUT_UINT32_LE( ctx->state[2], output, 8 );
|
||||
PUT_UINT32_LE( ctx->state[3], output, 12 );
|
||||
PUT_ULONG_LE( ctx->state[0], output, 0 );
|
||||
PUT_ULONG_LE( ctx->state[1], output, 4 );
|
||||
PUT_ULONG_LE( ctx->state[2], output, 8 );
|
||||
PUT_ULONG_LE( ctx->state[3], output, 12 );
|
||||
}
|
||||
|
||||
/*
|
||||
* Output = MD5( input buffer )
|
||||
* output = MD5( input buffer )
|
||||
*/
|
||||
void md5( unsigned char *input, int ilen,
|
||||
unsigned char *output )
|
||||
void md5( unsigned char *input, int ilen, unsigned char output[16] )
|
||||
{
|
||||
md5_context ctx;
|
||||
|
||||
@@ -302,9 +299,9 @@ void md5( unsigned char *input, int ilen,
|
||||
}
|
||||
|
||||
/*
|
||||
* Output = MD5( file contents )
|
||||
* output = MD5( file contents )
|
||||
*/
|
||||
int md5_file( const char *path, unsigned char *output )
|
||||
int md5_file( const char *path, unsigned char output[16] )
|
||||
{
|
||||
FILE *f;
|
||||
size_t n;
|
||||
|
||||
@@ -3,29 +3,24 @@
|
||||
*
|
||||
* Copyright (C) 2006-2007 Christophe Devine
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License, version 2.1 as published by the Free Software Foundation.
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _MD5_H
|
||||
#define _MD5_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \internal
|
||||
* \brief MD5 context structure
|
||||
*/
|
||||
typedef struct
|
||||
@@ -37,18 +32,15 @@ typedef struct
|
||||
md5_context;
|
||||
|
||||
/**
|
||||
* \internal
|
||||
* \brief Output = MD5( input buffer )
|
||||
*
|
||||
* \param input buffer holding the data
|
||||
* \param ilen length of the input data
|
||||
* \param output MD5 checksum result
|
||||
*/
|
||||
void md5( unsigned char *input, int ilen,
|
||||
unsigned char *output );
|
||||
void md5( unsigned char *input, int ilen, unsigned char output[16] );
|
||||
|
||||
/**
|
||||
* \internal
|
||||
* \brief Output = MD5( file contents )
|
||||
*
|
||||
* \param path input file name
|
||||
@@ -57,10 +49,6 @@ void md5( unsigned char *input, int ilen,
|
||||
* \return 0 if successful, 1 if fopen failed,
|
||||
* or 2 if fread failed
|
||||
*/
|
||||
int md5_file( const char *path, unsigned char *output );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
int md5_file( const char *path, unsigned char output[16] );
|
||||
|
||||
#endif /* md5.h */
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <locale.h> /* setlocale */
|
||||
|
||||
/* libarchive */
|
||||
#include <archive.h>
|
||||
@@ -42,7 +40,6 @@
|
||||
#include "alpm_list.h"
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "db.h"
|
||||
#include "cache.h"
|
||||
#include "delta.h"
|
||||
@@ -54,39 +51,13 @@
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Create a package from a file.
|
||||
* @param filename location of the package tarball
|
||||
* @param full whether to stop the load after metadata is read or continue
|
||||
* through the full archive
|
||||
* @param pkg address of the package pointer
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_pkg_load(const char *filename, unsigned short full,
|
||||
pmpkg_t **pkg)
|
||||
{
|
||||
_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_load\n");
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(filename != NULL && strlen(filename) != 0,
|
||||
RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
*pkg = _alpm_pkg_load(filename, full);
|
||||
if(*pkg == NULL) {
|
||||
/* pm_errno is set by pkg_load */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/** Free a package.
|
||||
* @param pkg package pointer to free
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)
|
||||
{
|
||||
_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_free\n");
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
@@ -105,8 +76,7 @@ int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)
|
||||
int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)
|
||||
{
|
||||
char *fpath;
|
||||
char *md5sum = NULL;
|
||||
int retval = 0;
|
||||
int retval;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -116,44 +86,19 @@ int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)
|
||||
ASSERT(pkg->origin_data.db != handle->db_local, RET_ERR(PM_ERR_PKG_INVALID, -1));
|
||||
|
||||
fpath = _alpm_filecache_find(alpm_pkg_get_filename(pkg));
|
||||
md5sum = alpm_get_md5sum(fpath);
|
||||
|
||||
if(md5sum == NULL) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not get md5sum for package %s-%s\n"),
|
||||
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
||||
pm_errno = PM_ERR_NOT_A_FILE;
|
||||
retval = _alpm_test_md5sum(fpath, alpm_pkg_get_md5sum(pkg));
|
||||
|
||||
if(retval == 0) {
|
||||
return(0);
|
||||
} else if (retval == 1) {
|
||||
pm_errno = PM_ERR_PKG_INVALID;
|
||||
retval = -1;
|
||||
} else {
|
||||
if(strcmp(md5sum, alpm_pkg_get_md5sum(pkg)) == 0) {
|
||||
_alpm_log(PM_LOG_DEBUG, "md5sums for package %s-%s match\n",
|
||||
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
||||
} else {
|
||||
_alpm_log(PM_LOG_ERROR, _("md5sums do not match for package %s-%s\n"),
|
||||
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
||||
pm_errno = PM_ERR_PKG_INVALID;
|
||||
retval = -1;
|
||||
}
|
||||
}
|
||||
|
||||
FREE(fpath);
|
||||
FREE(md5sum);
|
||||
|
||||
return(retval);
|
||||
}
|
||||
|
||||
/** Compare versions.
|
||||
* @param ver1 first version
|
||||
* @param ver2 secont version
|
||||
* @return postive, 0 or negative if ver1 is less, equal or more
|
||||
* than ver2, respectively.
|
||||
*/
|
||||
int SYMEXPORT alpm_pkg_vercmp(const char *ver1, const char *ver2)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
return(_alpm_versioncmp(ver1, ver2));
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
@@ -162,18 +107,8 @@ const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
|
||||
ASSERT(handle != NULL, return(NULL));
|
||||
ASSERT(pkg != NULL, return(NULL));
|
||||
|
||||
if(!strlen(pkg->filename)) {
|
||||
/* construct the file name, it's not in the desc file */
|
||||
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
|
||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
|
||||
}
|
||||
if(pkg->arch && strlen(pkg->arch) > 0) {
|
||||
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s-%s" PKGEXT,
|
||||
pkg->name, pkg->version, pkg->arch);
|
||||
} else {
|
||||
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s" PKGEXT,
|
||||
pkg->name, pkg->version);
|
||||
}
|
||||
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
|
||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
|
||||
}
|
||||
|
||||
return pkg->filename;
|
||||
@@ -181,29 +116,13 @@ const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
|
||||
|
||||
const char SYMEXPORT *alpm_pkg_get_name(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(handle != NULL, return(NULL));
|
||||
ASSERT(pkg != NULL, return(NULL));
|
||||
|
||||
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_BASE)) {
|
||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_BASE);
|
||||
}
|
||||
return pkg->name;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_pkg_get_version(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(handle != NULL, return(NULL));
|
||||
ASSERT(pkg != NULL, return(NULL));
|
||||
|
||||
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_BASE)) {
|
||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_BASE);
|
||||
}
|
||||
return pkg->version;
|
||||
}
|
||||
|
||||
@@ -305,7 +224,7 @@ const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)
|
||||
return pkg->arch;
|
||||
}
|
||||
|
||||
unsigned long SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
|
||||
off_t SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -319,7 +238,7 @@ unsigned long SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
|
||||
return pkg->size;
|
||||
}
|
||||
|
||||
unsigned long SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)
|
||||
off_t SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
@@ -375,6 +294,20 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)
|
||||
return pkg->groups;
|
||||
}
|
||||
|
||||
unsigned short SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(handle != NULL, return(-1));
|
||||
ASSERT(pkg != NULL, return(-1));
|
||||
|
||||
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
|
||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
|
||||
}
|
||||
return pkg->force;
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
@@ -519,7 +452,7 @@ void SYMEXPORT *alpm_pkg_changelog_open(pmpkg_t *pkg)
|
||||
int ret = ARCHIVE_OK;
|
||||
|
||||
if((archive = archive_read_new()) == NULL) {
|
||||
RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL);
|
||||
RET_ERR(PM_ERR_LIBARCHIVE, NULL);
|
||||
}
|
||||
|
||||
archive_read_support_compression_all(archive);
|
||||
@@ -617,12 +550,10 @@ unsigned short SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)
|
||||
* @brief Compute the packages requiring a given package.
|
||||
* @param pkg a package
|
||||
* @return the list of packages requiring pkg
|
||||
*
|
||||
* A depends on B through n depends <=> A listed in B's requiredby n times
|
||||
* n == 0 or 1 in almost all cases */
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
|
||||
{
|
||||
const alpm_list_t *i, *j;
|
||||
const alpm_list_t *i;
|
||||
alpm_list_t *reqs = NULL;
|
||||
|
||||
pmdb_t *localdb = alpm_option_get_localdb();
|
||||
@@ -631,123 +562,188 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
|
||||
continue;
|
||||
}
|
||||
pmpkg_t *cachepkg = i->data;
|
||||
const char *cachepkgname = alpm_pkg_get_name(cachepkg);
|
||||
|
||||
for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) {
|
||||
pmdepend_t *dep = j->data;
|
||||
|
||||
if(alpm_depcmp(pkg, dep)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'\n",
|
||||
cachepkgname, pkg->name);
|
||||
reqs = alpm_list_add(reqs, strdup(cachepkgname));
|
||||
}
|
||||
if(_alpm_dep_edge(cachepkg, pkg)) {
|
||||
const char *cachepkgname = alpm_pkg_get_name(cachepkg);
|
||||
reqs = alpm_list_add(reqs, strdup(cachepkgname));
|
||||
}
|
||||
}
|
||||
return(reqs);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/* this function was taken from rpm 4.0.4 and rewritten */
|
||||
int _alpm_versioncmp(const char *a, const char *b)
|
||||
/** Compare two version strings and determine which one is 'newer'.
|
||||
* Returns a value comparable to the way strcmp works. Returns 1
|
||||
* if a is newer than b, 0 if a and b are the same version, or -1
|
||||
* if b is newer than a.
|
||||
*
|
||||
* This function has been adopted from the rpmvercmp function located
|
||||
* at lib/rpmvercmp.c, and was most recently updated against rpm
|
||||
* version 4.4.2.3. Small modifications have been made to make it more
|
||||
* consistent with the libalpm coding style.
|
||||
*
|
||||
* Keep in mind that the pkgrel is only compared if it is available
|
||||
* on both versions handed to this function. For example, comparing
|
||||
* 1.5-1 and 1.5 will yield 0; comparing 1.5-1 and 1.5-2 will yield
|
||||
* -1 as expected. This is mainly for supporting versioned dependencies
|
||||
* that do not include the pkgrel.
|
||||
*/
|
||||
int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b)
|
||||
{
|
||||
char str1[64], str2[64];
|
||||
char oldch1, oldch2;
|
||||
char *str1, *str2;
|
||||
char *ptr1, *ptr2;
|
||||
char *one, *two;
|
||||
char *rel1 = NULL, *rel2 = NULL;
|
||||
char oldch1, oldch2;
|
||||
int is1num, is2num;
|
||||
int rc;
|
||||
int isnum;
|
||||
int ret = 0;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(!strcmp(a,b)) {
|
||||
return(0);
|
||||
/* libalpm added code. ensure our strings are not null */
|
||||
if(!a) {
|
||||
if(!b) return(0);
|
||||
return(-1);
|
||||
}
|
||||
if(!b) return(1);
|
||||
|
||||
strncpy(str1, a, 64);
|
||||
str1[63] = 0;
|
||||
strncpy(str2, b, 64);
|
||||
str2[63] = 0;
|
||||
/* easy comparison to see if versions are identical */
|
||||
if(strcmp(a, b) == 0) return(0);
|
||||
|
||||
/* lose the release number */
|
||||
for(one = str1; *one && *one != '-'; one++);
|
||||
if(one) {
|
||||
*one = '\0';
|
||||
rel1 = ++one;
|
||||
}
|
||||
for(two = str2; *two && *two != '-'; two++);
|
||||
if(two) {
|
||||
*two = '\0';
|
||||
rel2 = ++two;
|
||||
}
|
||||
str1 = strdup(a);
|
||||
str2 = strdup(b);
|
||||
|
||||
one = str1;
|
||||
two = str2;
|
||||
|
||||
while(*one || *two) {
|
||||
/* loop through each version segment of str1 and str2 and compare them */
|
||||
while(*one && *two) {
|
||||
while(*one && !isalnum((int)*one)) one++;
|
||||
while(*two && !isalnum((int)*two)) two++;
|
||||
|
||||
/* If we ran to the end of either, we are finished with the loop */
|
||||
if(!(*one && *two)) break;
|
||||
|
||||
ptr1 = one;
|
||||
ptr2 = two;
|
||||
|
||||
/* find the next segment for each string */
|
||||
/* grab first completely alpha or completely numeric segment */
|
||||
/* leave one and two pointing to the start of the alpha or numeric */
|
||||
/* segment and walk ptr1 and ptr2 to end of segment */
|
||||
if(isdigit((int)*ptr1)) {
|
||||
is1num = 1;
|
||||
while(*ptr1 && isdigit((int)*ptr1)) ptr1++;
|
||||
} else {
|
||||
is1num = 0;
|
||||
while(*ptr1 && isalpha((int)*ptr1)) ptr1++;
|
||||
}
|
||||
if(isdigit((int)*ptr2)) {
|
||||
is2num = 1;
|
||||
while(*ptr2 && isdigit((int)*ptr2)) ptr2++;
|
||||
isnum = 1;
|
||||
} else {
|
||||
is2num = 0;
|
||||
while(*ptr1 && isalpha((int)*ptr1)) ptr1++;
|
||||
while(*ptr2 && isalpha((int)*ptr2)) ptr2++;
|
||||
isnum = 0;
|
||||
}
|
||||
|
||||
/* save character at the end of the alpha or numeric segment */
|
||||
/* so that they can be restored after the comparison */
|
||||
oldch1 = *ptr1;
|
||||
*ptr1 = '\0';
|
||||
oldch2 = *ptr2;
|
||||
*ptr2 = '\0';
|
||||
|
||||
/* see if we ran out of segments on one string */
|
||||
if(one == ptr1 && two != ptr2) {
|
||||
return(is2num ? -1 : 1);
|
||||
}
|
||||
if(one != ptr1 && two == ptr2) {
|
||||
return(is1num ? 1 : -1);
|
||||
/* this cannot happen, as we previously tested to make sure that */
|
||||
/* the first string has a non-null segment */
|
||||
if (one == ptr1) {
|
||||
ret = -1; /* arbitrary */
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* see if we have a type mismatch (ie, one is alpha and one is digits) */
|
||||
if(is1num && !is2num) return(1);
|
||||
if(!is1num && is2num) return(-1);
|
||||
/* take care of the case where the two version segments are */
|
||||
/* different types: one numeric, the other alpha (i.e. empty) */
|
||||
/* numeric segments are always newer than alpha segments */
|
||||
/* XXX See patch #60884 (and details) from bugzilla #50977. */
|
||||
if (two == ptr2) {
|
||||
ret = isnum ? 1 : -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(is1num) while(*one == '0') one++;
|
||||
if(is2num) while(*two == '0') two++;
|
||||
if (isnum) {
|
||||
/* this used to be done by converting the digit segments */
|
||||
/* to ints using atoi() - it's changed because long */
|
||||
/* digit segments can overflow an int - this should fix that. */
|
||||
|
||||
rc = strverscmp(one, two);
|
||||
if(rc) return(rc);
|
||||
/* throw away any leading zeros - it's a number, right? */
|
||||
while (*one == '0') one++;
|
||||
while (*two == '0') two++;
|
||||
|
||||
/* whichever number has more digits wins */
|
||||
if (strlen(one) > strlen(two)) {
|
||||
ret = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
if (strlen(two) > strlen(one)) {
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
/* strcmp will return which one is greater - even if the two */
|
||||
/* segments are alpha or if they are numeric. don't return */
|
||||
/* if they are equal because there might be more segments to */
|
||||
/* compare */
|
||||
rc = strcmp(one, two);
|
||||
if (rc) {
|
||||
ret = rc < 1 ? -1 : 1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* restore character that was replaced by null above */
|
||||
*ptr1 = oldch1;
|
||||
*ptr2 = oldch2;
|
||||
one = ptr1;
|
||||
*ptr2 = oldch2;
|
||||
two = ptr2;
|
||||
|
||||
/* libalpm added code. check if version strings have hit the pkgrel
|
||||
* portion. depending on which strings have hit, take correct action.
|
||||
* this is all based on the premise that we only have one dash in
|
||||
* the version string, and it separates pkgver from pkgrel. */
|
||||
if(*ptr1 == '-' && *ptr2 == '-') {
|
||||
/* no-op, continue comparing since we are equivalent throughout */
|
||||
} else if(*ptr1 == '-') {
|
||||
/* ptr1 has hit the pkgrel and ptr2 has not. continue version
|
||||
* comparison after stripping the pkgrel from ptr1. */
|
||||
*ptr1 = '\0';
|
||||
} else if(*ptr2 == '-') {
|
||||
/* ptr2 has hit the pkgrel and ptr1 has not. continue version
|
||||
* comparison after stripping the pkgrel from ptr2. */
|
||||
*ptr2 = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
if((!*one) && (!*two)) {
|
||||
/* compare release numbers */
|
||||
if(rel1 && rel2 && strlen(rel1) && strlen(rel2)) return(_alpm_versioncmp(rel1, rel2));
|
||||
return(0);
|
||||
/* this catches the case where all numeric and alpha segments have */
|
||||
/* compared identically but the segment separating characters were */
|
||||
/* different */
|
||||
if ((!*one) && (!*two)) {
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
return(*one ? 1 : -1);
|
||||
/* the final showdown. we never want a remaining alpha string to
|
||||
* beat an empty string. the logic is a bit weird, but:
|
||||
* - if one is empty and two is not an alpha, two is newer.
|
||||
* - if one is an alpha, two is newer.
|
||||
* - otherwise one is newer.
|
||||
* */
|
||||
if ( ( !*one && !isalpha((int)*two) )
|
||||
|| isalpha((int)*one) ) {
|
||||
ret = -1;
|
||||
} else {
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
free(str1);
|
||||
free(str2);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
pmpkg_t *_alpm_pkg_new(const char *name, const char *version)
|
||||
pmpkg_t *_alpm_pkg_new(void)
|
||||
{
|
||||
pmpkg_t* pkg;
|
||||
|
||||
@@ -755,47 +751,55 @@ pmpkg_t *_alpm_pkg_new(const char *name, const char *version)
|
||||
|
||||
CALLOC(pkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
if(name && name[0] != 0) {
|
||||
strncpy(pkg->name, name, PKG_NAME_LEN);
|
||||
} else {
|
||||
pkg->name[0] = '\0';
|
||||
}
|
||||
if(version && version[0] != 0) {
|
||||
strncpy(pkg->version, version, PKG_VERSION_LEN);
|
||||
} else {
|
||||
pkg->version[0] = '\0';
|
||||
}
|
||||
|
||||
return(pkg);
|
||||
}
|
||||
|
||||
pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)
|
||||
{
|
||||
pmpkg_t* newpkg;
|
||||
pmpkg_t *newpkg;
|
||||
alpm_list_t *i;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
CALLOC(newpkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
memcpy(newpkg, pkg, sizeof(pmpkg_t));
|
||||
newpkg->licenses = alpm_list_strdup(alpm_pkg_get_licenses(pkg));
|
||||
newpkg->conflicts = alpm_list_strdup(alpm_pkg_get_conflicts(pkg));
|
||||
newpkg->files = alpm_list_strdup(alpm_pkg_get_files(pkg));
|
||||
newpkg->backup = alpm_list_strdup(alpm_pkg_get_backup(pkg));
|
||||
newpkg->depends = alpm_list_copy_data(alpm_pkg_get_depends(pkg),
|
||||
sizeof(pmdepend_t));
|
||||
newpkg->optdepends = alpm_list_strdup(alpm_pkg_get_optdepends(pkg));
|
||||
newpkg->groups = alpm_list_strdup(alpm_pkg_get_groups(pkg));
|
||||
newpkg->provides = alpm_list_strdup(alpm_pkg_get_provides(pkg));
|
||||
newpkg->replaces = alpm_list_strdup(alpm_pkg_get_replaces(pkg));
|
||||
newpkg->deltas = alpm_list_copy_data(alpm_pkg_get_deltas(pkg),
|
||||
sizeof(pmdelta_t));
|
||||
STRDUP(newpkg->filename, pkg->filename, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
STRDUP(newpkg->name, pkg->name, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
STRDUP(newpkg->version, pkg->version, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
STRDUP(newpkg->desc, pkg->desc, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
STRDUP(newpkg->url, pkg->url, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
newpkg->builddate = pkg->builddate;
|
||||
newpkg->installdate = pkg->installdate;
|
||||
STRDUP(newpkg->packager, pkg->packager, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
STRDUP(newpkg->md5sum, pkg->md5sum, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
STRDUP(newpkg->arch, pkg->arch, RET_ERR(PM_ERR_MEMORY, newpkg));
|
||||
newpkg->size = pkg->size;
|
||||
newpkg->isize = pkg->isize;
|
||||
newpkg->scriptlet = pkg->scriptlet;
|
||||
newpkg->force = pkg->force;
|
||||
newpkg->reason = pkg->reason;
|
||||
|
||||
newpkg->licenses = alpm_list_strdup(pkg->licenses);
|
||||
newpkg->replaces = alpm_list_strdup(pkg->replaces);
|
||||
newpkg->groups = alpm_list_strdup(pkg->groups);
|
||||
newpkg->files = alpm_list_strdup(pkg->files);
|
||||
newpkg->backup = alpm_list_strdup(pkg->backup);
|
||||
for(i = pkg->depends; i; i = alpm_list_next(i)) {
|
||||
newpkg->depends = alpm_list_add(newpkg->depends, _alpm_dep_dup(i->data));
|
||||
}
|
||||
newpkg->optdepends = alpm_list_strdup(pkg->optdepends);
|
||||
newpkg->conflicts = alpm_list_strdup(pkg->conflicts);
|
||||
newpkg->provides = alpm_list_strdup(pkg->provides);
|
||||
newpkg->deltas = alpm_list_copy_data(pkg->deltas, sizeof(pmdelta_t));
|
||||
|
||||
/* internal */
|
||||
newpkg->origin = pkg->origin;
|
||||
if(newpkg->origin == PKG_FROM_FILE) {
|
||||
newpkg->origin_data.file = strdup(pkg->origin_data.file);
|
||||
} else {
|
||||
newpkg->origin_data.db = pkg->origin_data.db;
|
||||
}
|
||||
newpkg->infolevel = pkg->infolevel;
|
||||
|
||||
return(newpkg);
|
||||
}
|
||||
@@ -808,48 +812,46 @@ void _alpm_pkg_free(pmpkg_t *pkg)
|
||||
return;
|
||||
}
|
||||
|
||||
FREE(pkg->filename);
|
||||
FREE(pkg->name);
|
||||
FREE(pkg->version);
|
||||
FREE(pkg->desc);
|
||||
FREE(pkg->url);
|
||||
FREE(pkg->packager);
|
||||
FREE(pkg->md5sum);
|
||||
FREE(pkg->arch);
|
||||
FREELIST(pkg->licenses);
|
||||
FREELIST(pkg->replaces);
|
||||
FREELIST(pkg->groups);
|
||||
FREELIST(pkg->files);
|
||||
FREELIST(pkg->backup);
|
||||
FREELIST(pkg->depends);
|
||||
alpm_list_free_inner(pkg->depends, (alpm_list_fn_free)_alpm_dep_free);
|
||||
alpm_list_free(pkg->depends);
|
||||
FREELIST(pkg->optdepends);
|
||||
FREELIST(pkg->conflicts);
|
||||
FREELIST(pkg->groups);
|
||||
FREELIST(pkg->provides);
|
||||
FREELIST(pkg->replaces);
|
||||
FREELIST(pkg->deltas);
|
||||
alpm_list_free_inner(pkg->deltas, (alpm_list_fn_free)_alpm_delta_free);
|
||||
alpm_list_free(pkg->deltas);
|
||||
alpm_list_free(pkg->delta_path);
|
||||
|
||||
if(pkg->origin == PKG_FROM_FILE) {
|
||||
FREE(pkg->origin_data.file);
|
||||
}
|
||||
FREE(pkg);
|
||||
}
|
||||
|
||||
/* Is pkgB an upgrade for pkgA ? */
|
||||
int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
|
||||
/* Is spkg an upgrade for locapkg? */
|
||||
int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)
|
||||
{
|
||||
int cmp = 0;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(pkg->origin == PKG_FROM_CACHE) {
|
||||
/* ensure we have the /desc file, which contains the 'force' option */
|
||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
|
||||
}
|
||||
cmp = alpm_pkg_vercmp(alpm_pkg_get_version(spkg),
|
||||
alpm_pkg_get_version(localpkg));
|
||||
|
||||
/* compare versions and see if we need to upgrade */
|
||||
cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), alpm_pkg_get_version(local_pkg));
|
||||
|
||||
if(cmp != 0 && pkg->force) {
|
||||
if(cmp < 0 && alpm_pkg_has_force(spkg)) {
|
||||
cmp = 1;
|
||||
_alpm_log(PM_LOG_WARNING, _("%s: forcing upgrade to version %s\n"),
|
||||
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
||||
} else if(cmp < 0) {
|
||||
/* local version is newer */
|
||||
pmdb_t *db = pkg->origin_data.db;
|
||||
_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
|
||||
alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg),
|
||||
alpm_db_get_name(db), alpm_pkg_get_version(pkg));
|
||||
cmp = 0;
|
||||
}
|
||||
|
||||
return(cmp);
|
||||
@@ -859,269 +861,15 @@ int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
|
||||
*/
|
||||
int _alpm_pkg_cmp(const void *p1, const void *p2)
|
||||
{
|
||||
pmpkg_t *pk1 = (pmpkg_t *)p1;
|
||||
pmpkg_t *pk2 = (pmpkg_t *)p2;
|
||||
|
||||
return(strcmp(alpm_pkg_get_name(pk1), alpm_pkg_get_name(pk2)));
|
||||
}
|
||||
|
||||
/* Parses the package description file for the current package
|
||||
* TODO: this should ALL be in a backend interface (be_files), we should
|
||||
* be dealing with the abstracted concepts only in this file
|
||||
* Returns: 0 on success, 1 on error
|
||||
*
|
||||
*/
|
||||
static int parse_descfile(const char *descfile, pmpkg_t *info)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
char line[PATH_MAX];
|
||||
char *ptr = NULL;
|
||||
char *key = NULL;
|
||||
int linenum = 0;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if((fp = fopen(descfile, "r")) == NULL) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), descfile, strerror(errno));
|
||||
return(-1);
|
||||
}
|
||||
|
||||
while(!feof(fp)) {
|
||||
fgets(line, PATH_MAX, fp);
|
||||
linenum++;
|
||||
_alpm_strtrim(line);
|
||||
if(strlen(line) == 0 || line[0] == '#') {
|
||||
continue;
|
||||
}
|
||||
ptr = line;
|
||||
key = strsep(&ptr, "=");
|
||||
if(key == NULL || ptr == NULL) {
|
||||
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
|
||||
info->name[0] != '\0' ? info->name : "error", linenum);
|
||||
} else {
|
||||
_alpm_strtrim(key);
|
||||
_alpm_strtrim(ptr);
|
||||
if(!strcmp(key, "pkgname")) {
|
||||
strncpy(info->name, ptr, sizeof(info->name));
|
||||
} else if(!strcmp(key, "pkgver")) {
|
||||
strncpy(info->version, ptr, sizeof(info->version));
|
||||
} else if(!strcmp(key, "pkgdesc")) {
|
||||
strncpy(info->desc, ptr, sizeof(info->desc));
|
||||
} else if(!strcmp(key, "group")) {
|
||||
info->groups = alpm_list_add(info->groups, strdup(ptr));
|
||||
} else if(!strcmp(key, "url")) {
|
||||
strncpy(info->url, ptr, sizeof(info->url));
|
||||
} else if(!strcmp(key, "license")) {
|
||||
info->licenses = alpm_list_add(info->licenses, strdup(ptr));
|
||||
} else if(!strcmp(key, "builddate")) {
|
||||
char first = tolower(ptr[0]);
|
||||
if(first > 'a' && first < 'z') {
|
||||
struct tm tmp_tm = {0}; //initialize to null incase of failure
|
||||
setlocale(LC_TIME, "C");
|
||||
strptime(ptr, "%a %b %e %H:%M:%S %Y", &tmp_tm);
|
||||
info->builddate = mktime(&tmp_tm);
|
||||
setlocale(LC_TIME, "");
|
||||
} else {
|
||||
info->builddate = atol(ptr);
|
||||
}
|
||||
} else if(!strcmp(key, "packager")) {
|
||||
strncpy(info->packager, ptr, sizeof(info->packager));
|
||||
} else if(!strcmp(key, "arch")) {
|
||||
strncpy(info->arch, ptr, sizeof(info->arch));
|
||||
} else if(!strcmp(key, "size")) {
|
||||
/* size in the raw package is uncompressed (installed) size */
|
||||
info->isize = atol(ptr);
|
||||
} else if(!strcmp(key, "depend")) {
|
||||
pmdepend_t *dep = alpm_splitdep(ptr);
|
||||
info->depends = alpm_list_add(info->depends, dep);
|
||||
} else if(!strcmp(key, "optdepend")) {
|
||||
info->optdepends = alpm_list_add(info->optdepends, strdup(ptr));
|
||||
} else if(!strcmp(key, "conflict")) {
|
||||
info->conflicts = alpm_list_add(info->conflicts, strdup(ptr));
|
||||
} else if(!strcmp(key, "replaces")) {
|
||||
info->replaces = alpm_list_add(info->replaces, strdup(ptr));
|
||||
} else if(!strcmp(key, "provides")) {
|
||||
info->provides = alpm_list_add(info->provides, strdup(ptr));
|
||||
} else if(!strcmp(key, "backup")) {
|
||||
info->backup = alpm_list_add(info->backup, strdup(ptr));
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
|
||||
info->name[0] != '\0' ? info->name : "error", linenum);
|
||||
}
|
||||
}
|
||||
line[0] = '\0';
|
||||
}
|
||||
fclose(fp);
|
||||
unlink(descfile);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load a package and create the corresponding pmpkg_t struct.
|
||||
* @param pkgfile path to the package file
|
||||
* @param full whether to stop the load after metadata is read or continue
|
||||
* through the full archive
|
||||
* @return An information filled pmpkg_t struct
|
||||
*/
|
||||
pmpkg_t *_alpm_pkg_load(const char *pkgfile, unsigned short full)
|
||||
{
|
||||
int ret = ARCHIVE_OK;
|
||||
int config = 0;
|
||||
struct archive *archive;
|
||||
struct archive_entry *entry;
|
||||
pmpkg_t *info = NULL;
|
||||
char *descfile = NULL;
|
||||
int fd = -1;
|
||||
struct stat st;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(pkgfile == NULL || strlen(pkgfile) == 0) {
|
||||
RET_ERR(PM_ERR_WRONG_ARGS, NULL);
|
||||
}
|
||||
|
||||
if((archive = archive_read_new()) == NULL) {
|
||||
RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL);
|
||||
}
|
||||
|
||||
archive_read_support_compression_all(archive);
|
||||
archive_read_support_format_all(archive);
|
||||
|
||||
if (archive_read_open_filename(archive, pkgfile,
|
||||
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
|
||||
RET_ERR(PM_ERR_PKG_OPEN, NULL);
|
||||
}
|
||||
|
||||
info = _alpm_pkg_new(NULL, NULL);
|
||||
if(info == NULL) {
|
||||
archive_read_finish(archive);
|
||||
RET_ERR(PM_ERR_MEMORY, NULL);
|
||||
}
|
||||
|
||||
if(stat(pkgfile, &st) == 0) {
|
||||
info->size = st.st_size;
|
||||
}
|
||||
|
||||
/* TODO there is no reason to make temp files to read
|
||||
* from a libarchive archive, it can be done by reading
|
||||
* directly from the archive
|
||||
* See: archive_read_data_into_buffer
|
||||
* requires changes 'parse_descfile' as well
|
||||
* */
|
||||
|
||||
/* If full is false, only read through the archive until we find our needed
|
||||
* metadata. If it is true, read through the entire archive, which serves
|
||||
* as a verfication of integrity and allows us to create the filelist. */
|
||||
while((ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
|
||||
const char *entry_name = archive_entry_pathname(entry);
|
||||
|
||||
/* NOTE: we used to look for .FILELIST, but it is easier (and safer) for
|
||||
* us to just generate this on our own. */
|
||||
if(strcmp(entry_name, ".PKGINFO") == 0) {
|
||||
/* extract this file into /tmp. it has info for us */
|
||||
descfile = strdup("/tmp/alpm_XXXXXX");
|
||||
fd = mkstemp(descfile);
|
||||
if(archive_read_data_into_fd(archive, fd) != ARCHIVE_OK) {
|
||||
_alpm_log(PM_LOG_ERROR, _("error extracting package description file to %s\n"),
|
||||
descfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
/* parse the info file */
|
||||
if(parse_descfile(descfile, info) == -1) {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not parse package description file in %s\n"),
|
||||
pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
if(!strlen(info->name)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("missing package name in %s\n"), pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
if(!strlen(info->version)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("missing package version in %s\n"), pkgfile);
|
||||
goto pkg_invalid;
|
||||
}
|
||||
config = 1;
|
||||
unlink(descfile);
|
||||
FREE(descfile);
|
||||
close(fd);
|
||||
continue;
|
||||
} else if(strcmp(entry_name, ".INSTALL") == 0) {
|
||||
info->scriptlet = 1;
|
||||
} else if(*entry_name == '.') {
|
||||
/* for now, ignore all files starting with '.' that haven't
|
||||
* already been handled (for future possibilities) */
|
||||
} else {
|
||||
/* Keep track of all files for filelist generation */
|
||||
info->files = alpm_list_add(info->files, strdup(entry_name));
|
||||
}
|
||||
|
||||
if(archive_read_data_skip(archive)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
|
||||
pkgfile, archive_error_string(archive));
|
||||
pm_errno = PM_ERR_LIBARCHIVE_ERROR;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* if we are not doing a full read, see if we have all we need */
|
||||
if(!full && config) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occured */
|
||||
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
|
||||
pkgfile, archive_error_string(archive));
|
||||
pm_errno = PM_ERR_LIBARCHIVE_ERROR;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if(!config) {
|
||||
_alpm_log(PM_LOG_ERROR, _("missing package metadata in %s\n"), pkgfile);
|
||||
goto error;
|
||||
}
|
||||
|
||||
archive_read_finish(archive);
|
||||
|
||||
/* internal fields for package struct */
|
||||
info->origin = PKG_FROM_FILE;
|
||||
info->origin_data.file = strdup(pkgfile);
|
||||
|
||||
if(full) {
|
||||
/* "checking for conflicts" requires a sorted list, so we ensure that here */
|
||||
_alpm_log(PM_LOG_DEBUG, "sorting package filelist for %s\n", pkgfile);
|
||||
info->files = alpm_list_msort(info->files, alpm_list_count(info->files),
|
||||
_alpm_str_cmp);
|
||||
info->infolevel = INFRQ_ALL;
|
||||
} else {
|
||||
/* get rid of any partial filelist we may have collected, as it is invalid */
|
||||
FREELIST(info->files);
|
||||
info->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_DEPENDS;
|
||||
}
|
||||
|
||||
return(info);
|
||||
|
||||
pkg_invalid:
|
||||
pm_errno = PM_ERR_PKG_INVALID;
|
||||
if(descfile) {
|
||||
unlink(descfile);
|
||||
FREE(descfile);
|
||||
}
|
||||
if(fd != -1) {
|
||||
close(fd);
|
||||
}
|
||||
error:
|
||||
_alpm_pkg_free(info);
|
||||
archive_read_finish(archive);
|
||||
|
||||
return(NULL);
|
||||
pmpkg_t *pkg1 = (pmpkg_t *)p1;
|
||||
pmpkg_t *pkg2 = (pmpkg_t *)p2;
|
||||
return(strcmp(alpm_pkg_get_name(pkg1), alpm_pkg_get_name(pkg2)));
|
||||
}
|
||||
|
||||
/* Test for existence of a package in a alpm_list_t*
|
||||
* of pmpkg_t*
|
||||
*/
|
||||
pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack)
|
||||
pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle)
|
||||
{
|
||||
alpm_list_t *lp;
|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
#ifndef _ALPM_PACKAGE_H
|
||||
#define _ALPM_PACKAGE_H
|
||||
|
||||
#include <time.h>
|
||||
#include <sys/types.h> /* off_t */
|
||||
#include <time.h> /* time_t */
|
||||
|
||||
#include "alpm.h"
|
||||
#include "db.h"
|
||||
@@ -33,32 +34,20 @@ typedef enum _pmpkgfrom_t {
|
||||
PKG_FROM_FILE
|
||||
} pmpkgfrom_t;
|
||||
|
||||
/* Packages */
|
||||
#define PKG_FILENAME_LEN 512
|
||||
#define PKG_NAME_LEN 256
|
||||
#define PKG_VERSION_LEN 64
|
||||
#define PKG_FULLNAME_LEN (PKG_NAME_LEN + PKG_VERSION_LEN)
|
||||
#define PKG_DESC_LEN 512
|
||||
#define PKG_URL_LEN 256
|
||||
#define PKG_DATE_LEN 32
|
||||
#define PKG_TYPE_LEN 32
|
||||
#define PKG_PACKAGER_LEN 64
|
||||
#define PKG_MD5SUM_LEN 33
|
||||
#define PKG_ARCH_LEN 32
|
||||
|
||||
struct __pmpkg_t {
|
||||
char filename[PKG_FILENAME_LEN];
|
||||
char name[PKG_NAME_LEN];
|
||||
char version[PKG_VERSION_LEN];
|
||||
char desc[PKG_DESC_LEN];
|
||||
char url[PKG_URL_LEN];
|
||||
char *filename;
|
||||
char *name;
|
||||
char *version;
|
||||
char *desc;
|
||||
char *url;
|
||||
time_t builddate;
|
||||
time_t installdate;
|
||||
char packager[PKG_PACKAGER_LEN];
|
||||
char md5sum[PKG_MD5SUM_LEN];
|
||||
char arch[PKG_ARCH_LEN];
|
||||
unsigned long size;
|
||||
unsigned long isize;
|
||||
char *packager;
|
||||
char *md5sum;
|
||||
char *arch;
|
||||
off_t size;
|
||||
off_t isize;
|
||||
off_t download_size;
|
||||
unsigned short scriptlet;
|
||||
unsigned short force;
|
||||
pmpkgreason_t reason;
|
||||
@@ -72,6 +61,7 @@ struct __pmpkg_t {
|
||||
alpm_list_t *conflicts;
|
||||
alpm_list_t *provides;
|
||||
alpm_list_t *deltas;
|
||||
alpm_list_t *delta_path;
|
||||
/* internal */
|
||||
pmpkgfrom_t origin;
|
||||
/* Replaced 'void *data' with this union as follows:
|
||||
@@ -85,14 +75,12 @@ struct __pmpkg_t {
|
||||
pmdbinfrq_t infolevel;
|
||||
};
|
||||
|
||||
int _alpm_versioncmp(const char *a, const char *b);
|
||||
pmpkg_t* _alpm_pkg_new(const char *name, const char *version);
|
||||
pmpkg_t* _alpm_pkg_new(void);
|
||||
pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg);
|
||||
void _alpm_pkg_free(pmpkg_t *pkg);
|
||||
int _alpm_pkg_cmp(const void *p1, const void *p2);
|
||||
int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg);
|
||||
pmpkg_t *_alpm_pkg_load(const char *pkgfile, unsigned short full);
|
||||
pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack);
|
||||
int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg);
|
||||
pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle);
|
||||
int _alpm_pkg_should_ignore(pmpkg_t *pkg);
|
||||
|
||||
#endif /* _ALPM_PACKAGE_H */
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
# Set of available languages.
|
||||
cs_CZ
|
||||
cs
|
||||
de
|
||||
en_GB
|
||||
es
|
||||
fr
|
||||
hu
|
||||
it
|
||||
pl_PL
|
||||
pl
|
||||
pt_BR
|
||||
ru_RU
|
||||
ru
|
||||
tr
|
||||
uk
|
||||
zh_CN
|
||||
|
||||
@@ -8,9 +8,9 @@ subdir = po
|
||||
top_builddir = ../../../
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = \
|
||||
--keyword=_ --flag=_:1:pass-c-format \
|
||||
--keyword=N_ --flag=N_:1:pass-c-format
|
||||
XGETTEXT_OPTIONS = --no-location \
|
||||
--keyword=_ --flag=_:1:c-format \
|
||||
--keyword=N_ --flag=N_:1:c-format
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
|
||||
@@ -1,23 +1,26 @@
|
||||
# List of source files with translatable strings
|
||||
# If a file is commented out, it is because it shouldn't have any
|
||||
# translatable strings
|
||||
|
||||
lib/libalpm/add.c
|
||||
lib/libalpm/alpm.c
|
||||
lib/libalpm/alpm_list.c
|
||||
#lib/libalpm/alpm_list.c
|
||||
lib/libalpm/backup.c
|
||||
lib/libalpm/be_files.c
|
||||
lib/libalpm/be_package.c
|
||||
lib/libalpm/cache.c
|
||||
lib/libalpm/conflict.c
|
||||
lib/libalpm/db.c
|
||||
lib/libalpm/delta.c
|
||||
lib/libalpm/deps.c
|
||||
lib/libalpm/dload.c
|
||||
lib/libalpm/error.c
|
||||
lib/libalpm/group.c
|
||||
lib/libalpm/handle.c
|
||||
lib/libalpm/log.c
|
||||
lib/libalpm/md5.c
|
||||
#lib/libalpm/md5.c
|
||||
lib/libalpm/package.c
|
||||
lib/libalpm/remove.c
|
||||
lib/libalpm/server.c
|
||||
lib/libalpm/sync.c
|
||||
lib/libalpm/trans.c
|
||||
lib/libalpm/util.c
|
||||
|
||||
@@ -1,676 +1,558 @@
|
||||
# translation of cs_CZ.po to Čeština
|
||||
# translation of cs.po to Čeština
|
||||
# Copyright (C) YEAR Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Vojtěch Gondžala <vogo@seznam.cz>, 2007.
|
||||
# Vojtěch Gondžala <vojtech.gondzala@gmail.com>, 2007, 2008, 2009.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: cs_CZ\n"
|
||||
"Project-Id-Version: cs\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
|
||||
"PO-Revision-Date: 2007-12-21 14:26+0100\n"
|
||||
"Last-Translator: Vojtěch Gondžala <vogo@seznam.cz>\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: 2009-01-04 21:59+0100\n"
|
||||
"Last-Translator: Vojtěch Gondžala <vojtech.gondzala@gmail.com>\n"
|
||||
"Language-Team: Čeština\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: KBabel 1.11.4\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#: lib/libalpm/add.c:88
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "v seznamu cílů nahrazuji starší verzi %s-%s za %s\n"
|
||||
msgstr "v seznamu cílů nahrazena starší verze %s-%s za %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:97
|
||||
#, c-format
|
||||
msgid "newer version %s-%s is in the target list -- skipping\n"
|
||||
msgstr "v seznamu cílů je novější veze %s-%s -- přeskakuji\n"
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr "vynechává se %s-%s, protože v seznamu cílů je novější veze %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:168
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr "v seznamu cílů byly nalezeny konfliktní balíčky\n"
|
||||
|
||||
#: lib/libalpm/add.c:169
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr "nemůžete instalovat dva konfliktní balíčky současně\n"
|
||||
msgstr "nelze instalovat dva konfliktní balíčky současně\n"
|
||||
|
||||
#: lib/libalpm/add.c:172
|
||||
msgid "replacing packages with -A and -U is not supported yet\n"
|
||||
msgstr "nahrazování balíčků pomocí -A a -U není nyní podporováno\n"
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "nahrazování balíčků pomocí -U není nyní podporováno\n"
|
||||
|
||||
#: lib/libalpm/add.c:173
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "balíčky můžete nahradit ručně použitím -Rd a -U\n"
|
||||
msgstr "balíčky lze nahradit ručně použitím -Rd a -U\n"
|
||||
|
||||
#: lib/libalpm/add.c:365
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
"přístupová práva adresáře v %s se neshodují\n"
|
||||
"přístupová práva adresáře %s se neshodují\n"
|
||||
"souborový systém: %o balíček: %o\n"
|
||||
|
||||
#: lib/libalpm/add.c:392
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "rozbalení: symbolický odkaz %s neodkazuje na adresář\n"
|
||||
|
||||
#: lib/libalpm/add.c:399
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "rozbalení: nepřepisuji adresář souborem %s\n"
|
||||
msgstr "rozbalení: adresář nebyl přepsán souborem %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "nelze rozbalit %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:505
|
||||
#, c-format
|
||||
msgid "could not rename %s (%s)\n"
|
||||
msgstr "nelze přejmenovat %s (%s)\n"
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "nelze přejmenovat %s na %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "nelze zkopírovat dočasný soubor do %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s uložen jako %s\n"
|
||||
msgstr "%s byl uložen jako %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:556
|
||||
#, c-format
|
||||
msgid "could not install %s as %s: %s\n"
|
||||
msgstr "nelze nainstalovat %s jako %s: %s\n"
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "%s nelze nainstalovat jako %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:559
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s nainstalován jako %s\n"
|
||||
msgstr "%s byl nainstalován jako %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:576
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "rozbaluji %s jako %s.pacnew\n"
|
||||
msgstr "%s byl rozbalen jako %s.pacnew\n"
|
||||
|
||||
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "nelze určit aktuální pracovní adresář\n"
|
||||
|
||||
#: lib/libalpm/add.c:765
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "nastal problém při aktualizaci %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:770
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "nastal problém při instalaci %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:785
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "nelze aktualizovat záznam databáze %s-%s\n"
|
||||
|
||||
#: lib/libalpm/add.c:793
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "nelze přidat položku '%s' do keše\n"
|
||||
msgstr "nelze přidat položku '%s' do cache\n"
|
||||
|
||||
#: lib/libalpm/be_files.c:223
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "chybný název záznamu v databázi '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_files.c:275
|
||||
#, c-format
|
||||
msgid "loading package data for %s : level=%d\n"
|
||||
msgstr "získávám informace o balíčku %s : úroveň=%d\n"
|
||||
|
||||
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
|
||||
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
|
||||
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
|
||||
#: lib/libalpm/package.c:787
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "nelze otevřít soubor %s: %s\n"
|
||||
|
||||
#: lib/libalpm/cache.c:62
|
||||
#, c-format
|
||||
msgid "adding '%s' to package cache for db '%s'\n"
|
||||
msgstr "přidávám '%s' do keše balíčků pro databázi '%s'\n"
|
||||
|
||||
#: lib/libalpm/db.c:285
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "nelze odstranit záznam v databázi %s%s\n"
|
||||
|
||||
#: lib/libalpm/db.c:553
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
|
||||
|
||||
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "cesta k databázi nebyla určena\n"
|
||||
|
||||
#: lib/libalpm/deps.c:173
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "zjištěna cyklická závislost:\n"
|
||||
|
||||
#: lib/libalpm/deps.c:175
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s bude odstraněn po %s, na kterém závisí\n"
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "chybný název záznamu v databázi '%s'\n"
|
||||
|
||||
#: lib/libalpm/deps.c:177
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s bude nainstalován před %s, na kterém závisí\n"
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "poškozený záznam v databázi '%s'\n"
|
||||
|
||||
#: lib/libalpm/deps.c:573
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "nemohu získat \"%s\", závislost \"%s\"\n"
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "nelze otevřít soubor %s: %s\n"
|
||||
|
||||
#: lib/libalpm/error.c:43
|
||||
msgid "out of memory!"
|
||||
msgstr "nedostatek paměti!"
|
||||
|
||||
#: lib/libalpm/error.c:45
|
||||
msgid "unexpected system error"
|
||||
msgstr "neočekávaná systémová chyba"
|
||||
|
||||
#: lib/libalpm/error.c:47
|
||||
msgid "insufficient privileges"
|
||||
msgstr "nedostatečná oprávnění"
|
||||
|
||||
#: lib/libalpm/error.c:49
|
||||
msgid "could not find or read file"
|
||||
msgstr "nelze najít nebo číst soubor"
|
||||
|
||||
#: lib/libalpm/error.c:51
|
||||
msgid "could not find or read directory"
|
||||
msgstr "nelze najít nebo číst adresář"
|
||||
|
||||
#: lib/libalpm/error.c:53
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "předán chybný nebo NULL argument"
|
||||
|
||||
#: lib/libalpm/error.c:56
|
||||
msgid "library not initialized"
|
||||
msgstr "knihovna nebyla inicializována"
|
||||
|
||||
#: lib/libalpm/error.c:58
|
||||
msgid "library already initialized"
|
||||
msgstr "knihovna inicializována"
|
||||
|
||||
#: lib/libalpm/error.c:60
|
||||
msgid "unable to lock database"
|
||||
msgstr "nelze zamknout databázi"
|
||||
|
||||
#: lib/libalpm/error.c:63
|
||||
msgid "could not open database"
|
||||
msgstr "nelze otevřít databázi"
|
||||
|
||||
#: lib/libalpm/error.c:65
|
||||
msgid "could not create database"
|
||||
msgstr "nelze vytvořit databázi"
|
||||
|
||||
#: lib/libalpm/error.c:67
|
||||
msgid "database not initialized"
|
||||
msgstr "databáze nebyla inicializována"
|
||||
|
||||
#: lib/libalpm/error.c:69
|
||||
msgid "database already registered"
|
||||
msgstr "databáze zaregistrována"
|
||||
|
||||
#: lib/libalpm/error.c:71
|
||||
msgid "could not find database"
|
||||
msgstr "nelze nalézt databázi"
|
||||
|
||||
#: lib/libalpm/error.c:73
|
||||
msgid "could not update database"
|
||||
msgstr "nelze aktualizovat databázi"
|
||||
|
||||
#: lib/libalpm/error.c:75
|
||||
msgid "could not remove database entry"
|
||||
msgstr "nelze odstranit položku databáze"
|
||||
|
||||
#: lib/libalpm/error.c:78
|
||||
msgid "invalid url for server"
|
||||
msgstr "nesprávná url pro server"
|
||||
|
||||
#: lib/libalpm/error.c:85
|
||||
msgid "could not set parameter"
|
||||
msgstr "nelze nastavit parametr"
|
||||
|
||||
#: lib/libalpm/error.c:88
|
||||
msgid "transaction already initialized"
|
||||
msgstr "transakce inicializována"
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
msgid "transaction not initialized"
|
||||
msgstr "transakce neinicializována"
|
||||
|
||||
#: lib/libalpm/error.c:92
|
||||
msgid "duplicate target"
|
||||
msgstr "duplicitní cíl"
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
msgid "transaction not prepared"
|
||||
msgstr "transakce nepřipravena"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
msgid "transaction aborted"
|
||||
msgstr "transakce zrušena"
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "operace není kompatibilní s typem transakce"
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
msgid "could not commit transaction"
|
||||
msgstr "nelze provést transakci"
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
msgid "could not download all files"
|
||||
msgstr "nelze stáhnout všechny soubory"
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
msgid "could not find or read package"
|
||||
msgstr "nelze nalézt nebo přečíst balíček"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "neplatný nebo poškozený balíček"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
msgid "cannot open package file"
|
||||
msgstr "nelze otevřít soubor balíčku"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
msgid "cannot load package data"
|
||||
msgstr "nelze načíst data z balíčku"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
msgid "package already installed"
|
||||
msgstr "balíček je již nainstalován"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "balíček není nainstalovaný nebo má nižší verzi"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "nelze odstranit všechny soubory balíčku"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
msgid "package name is not valid"
|
||||
msgstr "jméno balíčku není platné"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
msgid "corrupted package"
|
||||
msgstr "poškozený balíček"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
msgid "no such repository"
|
||||
msgstr "není žádný takový repositář"
|
||||
|
||||
#: lib/libalpm/error.c:128
|
||||
msgid "corrupted delta"
|
||||
msgstr "poškozený rozdíl"
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
msgid "delta patch failed"
|
||||
msgstr "rozdílová záplata selhala"
|
||||
|
||||
#: lib/libalpm/error.c:133
|
||||
msgid "group not found"
|
||||
msgstr "skupina nenalezena"
|
||||
|
||||
#: lib/libalpm/error.c:136
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "nelze vyřešit závislosti"
|
||||
|
||||
#: lib/libalpm/error.c:138
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "konfliktní závislosti"
|
||||
|
||||
#: lib/libalpm/error.c:140
|
||||
msgid "conflicting files"
|
||||
msgstr "konfliktní soubory"
|
||||
|
||||
#: lib/libalpm/error.c:143
|
||||
msgid "user aborted the operation"
|
||||
msgstr "uživatel zrušil operaci"
|
||||
|
||||
#: lib/libalpm/error.c:145
|
||||
msgid "internal error"
|
||||
msgstr "interní chyba"
|
||||
|
||||
#: lib/libalpm/error.c:147
|
||||
msgid "libarchive error"
|
||||
msgstr "chyba knihovny libarchive"
|
||||
|
||||
#: lib/libalpm/error.c:150
|
||||
msgid "not confirmed"
|
||||
msgstr "nepotvrzeno"
|
||||
|
||||
#: lib/libalpm/error.c:152
|
||||
msgid "invalid regular expression"
|
||||
msgstr "nesprávný regulární výraz"
|
||||
|
||||
#: lib/libalpm/error.c:155
|
||||
msgid "connection to remote host failed"
|
||||
msgstr "spojení ke vzdálenému hostiteli selhalo"
|
||||
|
||||
#: lib/libalpm/error.c:158
|
||||
msgid "unexpected error"
|
||||
msgstr "neočekávaná chyba"
|
||||
|
||||
#: lib/libalpm/package.c:124
|
||||
#, c-format
|
||||
msgid "could not get md5sum for package %s-%s\n"
|
||||
msgstr "nelze zjistit md5 kontrolní součet balíčku %s-%s\n"
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "databáze %s je nekonzistentní: nesouhlasí jméno balíčku %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:133
|
||||
#, c-format
|
||||
msgid "md5sums do not match for package %s-%s\n"
|
||||
msgstr "md5 kontrolní součet balíčku %s-%s nesouhlasí\n"
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "databáze %s je nekonzistentní: nesouhlasí verze balíčku %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:737
|
||||
#, c-format
|
||||
msgid "%s: forcing upgrade to version %s\n"
|
||||
msgstr "%s: vynucená aktualizace na verzi %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:742
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: lokální (%s) je novější než %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/package.c:750
|
||||
#, c-format
|
||||
msgid "%s-%s: delaying upgrade of package (%s)\n"
|
||||
msgstr "%s-%s: rozdílová aktualizace balíčku (%s)\n"
|
||||
|
||||
#: lib/libalpm/package.c:931
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "nelze získat soubor s popisem balíčku z %s\n"
|
||||
msgstr "nelze zpracovat soubor s popisem balíčku v %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:936
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "chybí jméno balíčku v %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:940
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "chybí veze balíčku v %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:970
|
||||
#, c-format
|
||||
msgid "could not remove tempfile %s\n"
|
||||
msgstr "nelze odstranit dočasný soubor %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "chyba při čtení balíčku %s: %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1005
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "chybí metadata balíčku v %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1012
|
||||
#, c-format
|
||||
msgid "missing package filelist in %s, generating one\n"
|
||||
msgstr "chybí seznam souborů balíčku v %s, generuji jej\n"
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
|
||||
|
||||
#: lib/libalpm/remove.c:121
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "nelze nalézt %s v databázi -- přeskakuji\n"
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "cesta k databázi není definována\n"
|
||||
|
||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "nelze odstranit soubor '%s': %s\n"
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "zjištěna cyklická závislost:\n"
|
||||
|
||||
#: lib/libalpm/remove.c:337
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "nelze odstranit záznam databáze %s-%s\n"
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s bude odstraněn po %s, na kterém závisí\n"
|
||||
|
||||
#: lib/libalpm/remove.c:342
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "nelze odstranit položku '%s' z keše\n"
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s bude nainstalován před %s, na kterém závisí\n"
|
||||
|
||||
#: lib/libalpm/server.c:56
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid, ignoring\n"
|
||||
msgstr "url '%s' je chybná, ignoruji\n"
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "byl vybrán nahrazující balíček (%s poskytuje %s)\n"
|
||||
|
||||
#: lib/libalpm/server.c:60
|
||||
msgid "url scheme not specified, assuming http\n"
|
||||
msgstr "schéma url nedefinováno, předpokládám http\n"
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "nelze vyřešit \"%s\", závislost \"%s\"\n"
|
||||
|
||||
#: lib/libalpm/server.c:241
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "URL '%s' je chybná\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "schéma URL nedefinováno, předpokládá se HTTP\n"
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "disk"
|
||||
|
||||
#: lib/libalpm/server.c:245
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "selhalo získávání souboru '%s' z %s: %s\n"
|
||||
msgstr "selhalo získání souboru '%s' z %s: %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:275
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "nelze navázat stahování, začínám znovu\n"
|
||||
msgstr "nelze navázat stahování, začíná se znovu\n"
|
||||
|
||||
#: lib/libalpm/server.c:288
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "nelze zapisovat do souboru '%s'\n"
|
||||
|
||||
#: lib/libalpm/server.c:307
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "chyba při stahování '%s': %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:319
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "chyba při zápisu do souboru '%s': %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:387
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "nelze změnit adresář na %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:394
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "spouštím XferCommand: větvení selhalo!\n"
|
||||
msgstr "spouští se XferCommand: větvení selhalo!\n"
|
||||
|
||||
#: lib/libalpm/server.c:445
|
||||
msgid "URL does not contain a file for download\n"
|
||||
msgstr "URL neobsahuje stahovaný soubor\n"
|
||||
|
||||
#: lib/libalpm/server.c:458
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "selhalo stahování %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:135
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "nedostatek paměti!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "neočekávaná systémová chyba"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "nedostatečná oprávnění"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "nelze nalézt nebo číst soubor"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "nelze nalézt nebo číst adresář"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "předán chybný nebo NULL argument"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "knihovna nebyla inicializována"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "knihovna inicializována"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "nelze zamknout databázi"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "nelze otevřít databázi"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "nelze vytvořit databázi"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "databáze nebyla inicializována"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "databáze zaregistrována"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "nelze nalézt databázi"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "nelze aktualizovat databázi"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "nelze odstranit záznam v databázi"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "nesprávná URL pro server"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "transakce inicializována"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "transakce neinicializována"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "duplicitní cíl"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "transakce není připravena"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "transakce byla zrušena"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "operace není kompatibilní s typem transakce"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "nelze provést transakci"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "nelze stáhnout všechny soubory"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "nelze nalézt nebo přečíst balíček"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "neplatný nebo poškozený balíček"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "nelze otevřít soubor balíčku"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "nelze načíst data z balíčku"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "balíček není nainstalovaný nebo má nižší verzi"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "nelze odstranit všechny soubory balíčku"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "jméno souboru balíčku není platné"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "takový repositář není nastaven"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "neplatný nebo poškozený delta rozdíl"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "aplikace delta rozdílu selhala"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "skupina nebyla nalezena"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "nelze vyřešit závislosti"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "konfliktní závislosti"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "konfliktní soubory"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "uživatel zrušil operaci"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "interní chyba"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "nepotvrzeno"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "nesprávný regulární výraz"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "chyba knihovny libarchive"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "chyba knihovny pro stahování souborů"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr "chyba volání externího programu pro stahování souborů"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "neočekávaná chyba"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "nelze nalézt %s v databázi -- vynechat\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "nelze odstranit soubor '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "nelze odstranit záznam databáze %s-%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "nelze odstranit položku '%s' z cache\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: ignoruji aktualizaci balíčku (bude nahrazen %s-%s)\n"
|
||||
msgstr "%s-%s: ignoruje se aktualizace balíčku (měl být nahrazen %s-%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: lokální verze (%s) je novější než v %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:250
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: ignoruji aktualizaci balíčku (%s => %s)\n"
|
||||
msgstr "%s: ignoruje se aktualizace balíčku (%s => %s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:320
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "repositář '%s' nenalezen\n"
|
||||
msgstr "repositář '%s' nebyl nalezen\n"
|
||||
|
||||
#: lib/libalpm/sync.c:354
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s je aktuální -- přeskakuji\n"
|
||||
msgstr "%s-%s je aktuální -- vynechat\n"
|
||||
|
||||
#: lib/libalpm/sync.c:358
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s je aktuální -- přeinstalovávám\n"
|
||||
msgstr "%s-%s je aktuální -- přeinstalovat\n"
|
||||
|
||||
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "ponížení verze balíčku %s (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "zjištěn konflikt nerozlišitelných balíčků\n"
|
||||
|
||||
#: lib/libalpm/sync.c:628
|
||||
#, c-format
|
||||
msgid "malloc failure: could not allocate %zd bytes\n"
|
||||
msgstr "selhala alokace paměti: nelze alokovat %zd bytů\n"
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "'%s' odstraněn ze seznamu cílů, protože je konfliktní s '%s'\n"
|
||||
|
||||
#: lib/libalpm/sync.c:825
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "příkaz: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
|
||||
#, c-format
|
||||
msgid "can't get md5 checksum for file %s\n"
|
||||
msgstr "nelze zjistit md5 kontrolní součet pro soubor %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:910
|
||||
#, c-format
|
||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
|
||||
msgstr "soubor %s byl poškozen (nesouhlasí MD5 kontrolní součet)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1056
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "selhalo stažení některých souborů z %s\n"
|
||||
msgstr "selhalo získání některých souborů z %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1137
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "nelze vytvořit transakci pro odstranění\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1143
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "nelze inicializovat transakci pro odstranění\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1165
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "nelze připravit transakci pro odstranění\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1171
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "nelze provést transakci pro odstranění\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1182
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "nelze vytvořit transakci\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1187
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "nelze inicializovat transakci\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1214
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "nelze připravit transakci\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1219
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "nelze provést transakci\n"
|
||||
|
||||
#: lib/libalpm/trans.c:214
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "nelze odstranit zamykací soubor %s\n"
|
||||
|
||||
#: lib/libalpm/trans.c:483
|
||||
#, c-format
|
||||
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
|
||||
msgstr "V kořenovém adresáři není /bin/sh (%s), ruším provádění skriptů\n"
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr "V rodičovském prostředí chybí /bin/sh, ruší se provádění skriptů\n"
|
||||
|
||||
#: lib/libalpm/trans.c:494
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "nelze vytvořit dočasný adresář\n"
|
||||
|
||||
#: lib/libalpm/trans.c:536
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "nelze zkopírovat dočasný soubor do %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "nelze změnit adresář na %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:554
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "nelze spustit nový proces (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:564
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "nelze změnit kořenový adresář (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:569
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "nelze změnit adresář na / (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:578
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "volání popen selhalo (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:597
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "volání waitpid selhalo (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:606
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "správné spuštění skriptu selhalo\n"
|
||||
msgstr "skript se nepodařilo spustit správně\n"
|
||||
|
||||
#: lib/libalpm/trans.c:615
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "nelze odstranit dočasný adresář %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:204
|
||||
#, c-format
|
||||
msgid "failed to make path '%s' : %s\n"
|
||||
msgstr "selhalo vytvoření cesty '%s': %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:389
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "nelze otevřít %s: %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:573
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "neexistuje keš %s, vytvářím...\n"
|
||||
msgstr "neexistuje cache %s, vytváří se...\n"
|
||||
|
||||
#: lib/libalpm/util.c:593
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "nelze vytvořit keš balíčků, používám /tmp\n"
|
||||
|
||||
#: lib/libalpm/util.c:643
|
||||
#, c-format
|
||||
msgid "md5: %s can't be opened\n"
|
||||
msgstr "md5: %s nemohl být otevřen\n"
|
||||
|
||||
#: lib/libalpm/util.c:645
|
||||
#, c-format
|
||||
msgid "md5: %s can't be read\n"
|
||||
msgstr "md5: %s nemohl být přečten\n"
|
||||
|
||||
msgstr "nelze vytvořit cache balíčků, používá se /tmp\n"
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,8 +5,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Pacman package manager 3.0.1\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2007-12-21 11:06+0100\n"
|
||||
"PO-Revision-Date: 2007-12-22 22:29+0100\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: 2008-08-23 22:51+0200\n"
|
||||
"Last-Translator: Xavier <shiningxc@gmail.com>\n"
|
||||
"Language-Team: solsTiCe d'Hiver <solstice.dhiver@laposte.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -15,33 +15,34 @@ msgstr ""
|
||||
"X-Poedit-Language: French\n"
|
||||
"X-Poedit-Country: FRANCE\n"
|
||||
|
||||
#: lib/libalpm/add.c:86
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "remplacement de l'ancienne version %s-%s par %s dans la liste des cibles\n"
|
||||
msgstr ""
|
||||
"remplacement de l'ancienne version %s-%s par %s dans la liste des cibles\n"
|
||||
|
||||
#: lib/libalpm/add.c:95
|
||||
#, c-format
|
||||
msgid "newer version %s-%s is in the target list -- skipping\n"
|
||||
msgstr "une version plus récente %s-%s est dans la liste des cibles -- paquet ignoré\n"
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr ""
|
||||
"ignore le paquet %s-%s car une version plus récente %s est dans la liste des "
|
||||
"cibles\n"
|
||||
|
||||
#: lib/libalpm/add.c:166
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr "Des paquets en conflit ont été trouvés dans la liste des cibles\n"
|
||||
msgstr "des paquets en conflit ont été trouvés dans la liste des cibles\n"
|
||||
|
||||
#: lib/libalpm/add.c:167
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr "vous ne pouvez pas installer deux paquets en conflit en même temps\n"
|
||||
|
||||
#: lib/libalpm/add.c:170
|
||||
msgid "replacing packages with -A and -U is not supported yet\n"
|
||||
msgstr "remplacer un paquet avec -A ou -U n'est pas encore possible\n"
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "remplacer un paquet avec -U n'est pas encore possible\n"
|
||||
|
||||
#: lib/libalpm/add.c:171
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "vous pouvez remplacer les paquets manuellement en utilisant -Rd et -U\n"
|
||||
msgstr ""
|
||||
"vous pouvez remplacer les paquets manuellement en utilisant -Rd et -U\n"
|
||||
|
||||
#: lib/libalpm/add.c:363
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
@@ -50,646 +51,513 @@ msgstr ""
|
||||
"Les permissions pour le répertoire %s sont différentes\n"
|
||||
"système de fichier: %o paquet : %o\n"
|
||||
|
||||
#: lib/libalpm/add.c:390
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "extraction: le lien %s ne pointe pas vers un répertoire\n"
|
||||
|
||||
#: lib/libalpm/add.c:397
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "extraction: n'écrase pas le répertoire par le fichier %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:452
|
||||
#: lib/libalpm/add.c:596
|
||||
#: lib/libalpm/util.c:421
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "l'extraction de %s a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:503
|
||||
#, c-format
|
||||
msgid "could not rename %s (%s)\n"
|
||||
msgstr "renommer %s a échoué (%s)\n"
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "impossible de renommer %s en %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:510
|
||||
#: lib/libalpm/add.c:530
|
||||
#: lib/libalpm/trans.c:506
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "la copie du fichier temporaire vers %s a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:515
|
||||
#: lib/libalpm/remove.c:232
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s enregistré en tant que %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:554
|
||||
#, c-format
|
||||
msgid "could not install %s as %s: %s\n"
|
||||
msgstr "l'installation de %s en tant que %s a échoué: (%s)\n"
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "l'installation de %s en tant que %s a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:557
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s installé en tant que %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:574
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "extraction de %s comme %s.pacnew\n"
|
||||
|
||||
# j'ai traduit chaque fois "could not" par "a échoué"
|
||||
#: lib/libalpm/add.c:709
|
||||
#: lib/libalpm/trans.c:524
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "déterminer le répertoire courant a échoué\n"
|
||||
|
||||
#: lib/libalpm/add.c:763
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "des erreurs sont survenues pendant la mise à jour de %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:768
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "des erreurs sont survenues pendant l'installation de %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:783
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "la mise à jour l'entrée de base de données %s-%s a échoué\n"
|
||||
|
||||
#: lib/libalpm/add.c:791
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "l'ajout au cache de l'entrée '%s' a échoué\n"
|
||||
|
||||
#: lib/libalpm/be_files.c:221
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "nom invalide pour l'entrée de base de données '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_files.c:273
|
||||
#, c-format
|
||||
msgid "loading package data for %s : level=%d\n"
|
||||
msgstr "chargement des données du paquet %s : niveau=%d\n"
|
||||
|
||||
#: lib/libalpm/be_files.c:290
|
||||
#: lib/libalpm/be_files.c:427
|
||||
#: lib/libalpm/be_files.c:450
|
||||
#: lib/libalpm/be_files.c:561
|
||||
#: lib/libalpm/be_files.c:639
|
||||
#: lib/libalpm/be_files.c:667
|
||||
#: lib/libalpm/package.c:894
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "l'ouverture du fichier %s a échoué: %s\n"
|
||||
|
||||
#: lib/libalpm/cache.c:60
|
||||
#, c-format
|
||||
msgid "adding '%s' to package cache for db '%s'\n"
|
||||
msgstr "ajout de '%s' au cache de paquets pour la base de données '%s'\n"
|
||||
|
||||
#: lib/libalpm/db.c:283
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "la suppression de l'entrée de base de données %s%s a échoué\n"
|
||||
|
||||
#: lib/libalpm/db.c:551
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "tentative de ré-enregistrer la base de données locale\n"
|
||||
|
||||
#: lib/libalpm/db.c:560
|
||||
#: lib/libalpm/db.c:611
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "base de données non initialisée\n"
|
||||
|
||||
#: lib/libalpm/deps.c:171
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "cycle de dépendances détecté:\n"
|
||||
|
||||
#: lib/libalpm/deps.c:173
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s sera supprimé après sa dépendance %s\n"
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "nom invalide pour l'entrée de base de données '%s'\n"
|
||||
|
||||
#: lib/libalpm/deps.c:175
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s sera installé avant sa dépendance %s\n"
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "l'entrée '%s' de la base de données est corrompue\n"
|
||||
|
||||
#: lib/libalpm/deps.c:584
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "impossible de résoudre \"%s\", une dépendance de \"%s\"\n"
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "l'ouverture du fichier %s a échoué: %s\n"
|
||||
|
||||
#: lib/libalpm/error.c:41
|
||||
msgid "out of memory!"
|
||||
msgstr "dépassement de mémoire!"
|
||||
|
||||
#: lib/libalpm/error.c:43
|
||||
msgid "unexpected system error"
|
||||
msgstr "erreur système non prévue"
|
||||
|
||||
#: lib/libalpm/error.c:45
|
||||
msgid "insufficient privileges"
|
||||
msgstr "autorisation insuffisante"
|
||||
|
||||
#: lib/libalpm/error.c:47
|
||||
msgid "could not find or read file"
|
||||
msgstr "trouver ou lire le fichier a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:49
|
||||
msgid "could not find or read directory"
|
||||
msgstr "trouver ou lire le répertoire a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:51
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "un argument erroné ou nul a été fourni"
|
||||
|
||||
#: lib/libalpm/error.c:54
|
||||
msgid "library not initialized"
|
||||
msgstr "librairie non initialisée"
|
||||
|
||||
#: lib/libalpm/error.c:56
|
||||
msgid "library already initialized"
|
||||
msgstr "librairie déjà initialisée"
|
||||
|
||||
#: lib/libalpm/error.c:58
|
||||
msgid "unable to lock database"
|
||||
msgstr "verrouillage de la base de données impossible"
|
||||
|
||||
#: lib/libalpm/error.c:61
|
||||
msgid "could not open database"
|
||||
msgstr "l'ouverture de la base de données a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:63
|
||||
msgid "could not create database"
|
||||
msgstr "la création de la base de données a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:65
|
||||
msgid "database not initialized"
|
||||
msgstr "base de données non initialisée"
|
||||
|
||||
#: lib/libalpm/error.c:67
|
||||
msgid "database already registered"
|
||||
msgstr "base de données déjà enregistrée"
|
||||
|
||||
#: lib/libalpm/error.c:69
|
||||
msgid "could not find database"
|
||||
msgstr "trouver la base de données a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:71
|
||||
msgid "could not update database"
|
||||
msgstr "la mise à jour de la base de données a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:73
|
||||
msgid "could not remove database entry"
|
||||
msgstr "la suppression de l'entrée de base de données a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:76
|
||||
msgid "invalid url for server"
|
||||
msgstr "URL invalide pour le serveur"
|
||||
|
||||
#: lib/libalpm/error.c:83
|
||||
msgid "could not set parameter"
|
||||
msgstr "définir le paramètre a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:86
|
||||
msgid "transaction already initialized"
|
||||
msgstr "transaction déjà initialisée"
|
||||
|
||||
#: lib/libalpm/error.c:88
|
||||
#: lib/libalpm/error.c:92
|
||||
msgid "transaction not initialized"
|
||||
msgstr "transaction non initialisée"
|
||||
|
||||
#: lib/libalpm/error.c:90
|
||||
msgid "duplicate target"
|
||||
msgstr "cible répétée"
|
||||
|
||||
#: lib/libalpm/error.c:94
|
||||
msgid "transaction not prepared"
|
||||
msgstr "transaction non préparée"
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
msgid "transaction aborted"
|
||||
msgstr "transaction annulée"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "opération incompatible avec le type de transaction"
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
msgid "could not commit transaction"
|
||||
msgstr "appliquer la transaction a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
msgid "could not download all files"
|
||||
msgstr "tous les fichiers n'ont pas pu être téléchargés"
|
||||
|
||||
#: lib/libalpm/error.c:105
|
||||
msgid "could not find or read package"
|
||||
msgstr "trouver ou de lire le paquet a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "paquet invalide ou corrompu"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
msgid "cannot open package file"
|
||||
msgstr "ouverture du fichier paquet impossible"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
msgid "cannot load package data"
|
||||
msgstr "chargement des données du paquet impossible"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
msgid "package already installed"
|
||||
msgstr "paquet déjà installé"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "paquet non installé ou version plus ancienne"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "suppression de certains fichiers du paquet impossible"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
msgid "package name is not valid"
|
||||
msgstr "nom de paquet invalide"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
msgid "corrupted package"
|
||||
msgstr "paquet corrompu"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
msgid "no such repository"
|
||||
msgstr "ce dépôt n'existe pas"
|
||||
|
||||
#: lib/libalpm/error.c:126
|
||||
msgid "corrupted delta"
|
||||
msgstr "delta corrompu"
|
||||
|
||||
#: lib/libalpm/error.c:128
|
||||
msgid "delta patch failed"
|
||||
msgstr "l'application du delta a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:131
|
||||
msgid "group not found"
|
||||
msgstr "groupe non trouvé"
|
||||
|
||||
#: lib/libalpm/error.c:134
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "la satisfaction des dépendances a échoué"
|
||||
|
||||
#: lib/libalpm/error.c:136
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "conflit de dépendances"
|
||||
|
||||
#: lib/libalpm/error.c:138
|
||||
msgid "conflicting files"
|
||||
msgstr "conflit de fichiers"
|
||||
|
||||
#: lib/libalpm/error.c:141
|
||||
msgid "user aborted the operation"
|
||||
msgstr "opération annulée par l'utilisateur"
|
||||
|
||||
#: lib/libalpm/error.c:143
|
||||
msgid "internal error"
|
||||
msgstr "erreur interne"
|
||||
|
||||
#: lib/libalpm/error.c:145
|
||||
msgid "libarchive error"
|
||||
msgstr "erreur de libarchive"
|
||||
|
||||
#: lib/libalpm/error.c:148
|
||||
msgid "not confirmed"
|
||||
msgstr "non confirmé"
|
||||
|
||||
#: lib/libalpm/error.c:150
|
||||
msgid "invalid regular expression"
|
||||
msgstr "expression régulière incorrecte"
|
||||
|
||||
#: lib/libalpm/error.c:153
|
||||
msgid "connection to remote host failed"
|
||||
msgstr "échec de connexion à l'hôte distant "
|
||||
|
||||
#: lib/libalpm/error.c:156
|
||||
msgid "unexpected error"
|
||||
msgstr "erreur non prévue"
|
||||
|
||||
#: lib/libalpm/package.c:122
|
||||
#, c-format
|
||||
msgid "could not get md5sum for package %s-%s\n"
|
||||
msgstr "l'obtention du hache md5 pour le paquet %s-%s a échoué\n"
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "Le dépôt %s est inconsistant: noms différents pour le paquet %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:131
|
||||
#, c-format
|
||||
msgid "md5sums do not match for package %s-%s\n"
|
||||
msgstr "les 'haches' md5 ne correspondent pas pour le paquet %s-%s\n"
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "Le dépôt %s est inconsistant: versions différentes pour le paquet %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:844
|
||||
#, c-format
|
||||
msgid "%s: forcing upgrade to version %s\n"
|
||||
msgstr "%s: force la mise à jour à la version %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:849
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: la version locale (%s) est plus récente que %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/package.c:857
|
||||
#, c-format
|
||||
msgid "%s-%s: delaying upgrade of package (%s)\n"
|
||||
msgstr "%s-%s: retarde la mise à jour du paquet (%s)\n"
|
||||
|
||||
#: lib/libalpm/package.c:1036
|
||||
#, c-format
|
||||
msgid "error extracting package description file to %s\n"
|
||||
msgstr "l'extraction du fichier de description vers %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/package.c:1042
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "l'analyse du fichier de description a échoué dans %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1047
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "nom de paquet manquant dans %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1051
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "version de paquet manquante dans %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1081
|
||||
#, c-format
|
||||
msgid "could not remove tempfile %s\n"
|
||||
msgstr "la suppression du fichier temporaire %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/package.c:1096
|
||||
#: lib/libalpm/package.c:1109
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "erreur lors de la lecture du paquet %s: %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1116
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "méta-données du paquet manquantes dans %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:1123
|
||||
#, c-format
|
||||
msgid "missing package filelist in %s, generating one\n"
|
||||
msgstr "liste de fichiers absente du paquet %s, création\n"
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "tentative de ré-enregistrer la base de données locale\n"
|
||||
|
||||
#: lib/libalpm/remove.c:119
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "trouver %s dans la base de données a échoué -- ignoré\n"
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "base de données non initialisée\n"
|
||||
|
||||
#: lib/libalpm/remove.c:170
|
||||
#: lib/libalpm/remove.c:241
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "suppression du fichier '%s' impossible: %s\n"
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "cycle de dépendances détecté:\n"
|
||||
|
||||
#: lib/libalpm/remove.c:335
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "la suppression de l'entrée de base de données %s-%s a échoué\n"
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s sera supprimé après sa dépendance %s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:340
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "la suppression du cache de l'entrée '%s' a échoué\n"
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s sera installé avant sa dépendance %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:54
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid, ignoring\n"
|
||||
msgstr "l'url '%s' est invalide, ignorée\n"
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "Une provision a été sélectionnée (%s fournit %s)\n"
|
||||
|
||||
#: lib/libalpm/server.c:58
|
||||
msgid "url scheme not specified, assuming http\n"
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "impossible de résoudre \"%s\", une dépendance de \"%s\"\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "l'url '%s' est invalide\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "Le protocole n'a pas été spécifié dans l'url, assume http\n"
|
||||
|
||||
#: lib/libalpm/server.c:239
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "disque"
|
||||
|
||||
#: lib/libalpm/server.c:243
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "échec de récupération du fichier '%s' depuis %s : %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:273
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "le téléchargement ne peut pas être repris, relance\n"
|
||||
|
||||
#: lib/libalpm/server.c:286
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "écriture dans le fichier '%s' impossible\n"
|
||||
|
||||
#: lib/libalpm/server.c:305
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "erreur lors du téléchargement de '%s': %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:317
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "écriture dans le fichier '%s' impossible: %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:385
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "changer de répertoire vers %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/server.c:392
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "lancement de XferCommand: le fork a échoué!\n"
|
||||
|
||||
#: lib/libalpm/server.c:443
|
||||
msgid "URL does not contain a file for download\n"
|
||||
msgstr "l'URL ne contient pas un fichier à télécharger\n"
|
||||
|
||||
#: lib/libalpm/server.c:456
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "le fichier %s n'a pas pu être téléchargé\n"
|
||||
|
||||
#: lib/libalpm/sync.c:133
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "dépassement de mémoire!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "erreur système non prévue"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "autorisation insuffisante"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "trouver ou lire le fichier a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "trouver ou lire le répertoire a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "un argument erroné ou nul a été fourni"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "librairie non initialisée"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "librairie déjà initialisée"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "verrouillage de la base de données impossible"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "l'ouverture de la base de données a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "la création de la base de données a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "base de données non initialisée"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "base de données déjà enregistrée"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "trouver la base de données a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "la mise à jour de la base de données a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "la suppression de l'entrée de base de données a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "URL invalide pour le serveur"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "transaction déjà initialisée"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "transaction non initialisée"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "cible répétée"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "transaction non préparée"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "transaction annulée"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "opération incompatible avec le type de transaction"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "appliquer la transaction a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "tous les fichiers n'ont pas pu être téléchargés"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "trouver ou de lire le paquet a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "paquet invalide ou corrompu"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "ouverture du fichier paquet impossible"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "chargement des données du paquet impossible"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "paquet non installé ou version plus ancienne"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "suppression de certains fichiers du paquet impossible"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "nom de paquet invalide"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "ce dépôt n'existe pas"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "delta invalide ou corrompu"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "l'application du delta a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "groupe non trouvé"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "la satisfaction des dépendances a échoué"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "conflit de dépendances"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "conflit de fichiers"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "opération annulée par l'utilisateur"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "erreur interne"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "non confirmé"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "expression régulière incorrecte"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "erreur de libarchive"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "erreur de la bibliothèque de téléchargement"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr "erreur en invoquant le client externe de téléchargement"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "erreur non prévue"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "trouver %s dans la base de données a échoué -- ignoré\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "suppression du fichier '%s' impossible: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "la suppression de l'entrée de base de données %s-%s a échoué\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "la suppression du cache de l'entrée '%s' a échoué\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: ignore la mise à jour du paquet (à remplacer par %s-%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:248
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: la version locale (%s) est plus récente que %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: ignore la mise à jour du paquet (%s => %s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:318
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "dépôt '%s' non trouvé\n"
|
||||
|
||||
#: lib/libalpm/sync.c:352
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s est à jour -- ignoré\n"
|
||||
|
||||
#: lib/libalpm/sync.c:356
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s est à jour -- réinstalle\n"
|
||||
|
||||
#: lib/libalpm/sync.c:611
|
||||
#: lib/libalpm/sync.c:616
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "retourne à la version antérieure du paquet %s (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "un conflit de paquets impossible à résoudre a été détecté\n"
|
||||
|
||||
#: lib/libalpm/sync.c:626
|
||||
#, c-format
|
||||
msgid "malloc failure: could not allocate %zd bytes\n"
|
||||
msgstr "erreur malloc: n'a pas pu allouer %zd bytes\n"
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "supprime '%s' de la liste de cible car il est en conflit avec '%s'\n"
|
||||
|
||||
#: lib/libalpm/sync.c:823
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "commande: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:886
|
||||
#: lib/libalpm/sync.c:894
|
||||
#, c-format
|
||||
msgid "can't get md5 checksum for file %s\n"
|
||||
msgstr "ne peut obtenir le 'hach' md5 pour le paquet %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:908
|
||||
#, c-format
|
||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
|
||||
msgstr "l'archive %s était corrompue (mauvaise somme MD5)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1054
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "échec de récupération de certains fichiers depuis %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1135
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "la création de la transaction de suppression a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1141
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "l'initialisation de la transaction de suppression a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1163
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "la préparation de la transaction de suppression a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1169
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "appliquer la transaction de suppression a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1180
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "la création de la transaction a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1185
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "l'initialisation de la transaction a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1212
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "la préparation de la transaction a échoué\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1217
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "appliquer la transaction a échoué\n"
|
||||
|
||||
#: lib/libalpm/trans.c:212
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "la suppression du fichier de verrouillage %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/trans.c:481
|
||||
#, c-format
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr "Pas de /bin/sh dans l'environnement parent, interruption du scriptlet\n"
|
||||
msgstr ""
|
||||
"Pas de /bin/sh dans l'environnement parent, interruption du scriptlet\n"
|
||||
|
||||
#: lib/libalpm/trans.c:492
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "la création du répertoire temporaire a échoué\n"
|
||||
|
||||
#: lib/libalpm/trans.c:531
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "la copie du fichier temporaire vers %s a échoué (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "changer de répertoire vers %s a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:549
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "la génération d'un nouveau processus a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:559
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "changer le répertoire racine a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:564
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "changer de répertoire vers / a échoué (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:573
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "call to popen failed (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:592
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "call to waitpid failed (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:601
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "le scriptlet n'a pas pu être exécuté correctement\n"
|
||||
|
||||
#: lib/libalpm/trans.c:610
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "la suppression du répertoire temporaire %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/util.c:202
|
||||
#, c-format
|
||||
msgid "failed to make path '%s' : %s\n"
|
||||
msgstr "échec de la création du chemin '%s' : %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:387
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "l'ouverture de %s: %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/util.c:572
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "le cache %s n'existe pas, création...\n"
|
||||
|
||||
#: lib/libalpm/util.c:592
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "n'a pas pu créer le cache de paquets, /tmp sera utilisé à la place\n"
|
||||
|
||||
#: lib/libalpm/util.c:642
|
||||
#, c-format
|
||||
msgid "md5: %s can't be opened\n"
|
||||
msgstr "md5: l'ouverture de %s a échoué\n"
|
||||
|
||||
#: lib/libalpm/util.c:644
|
||||
#, c-format
|
||||
msgid "md5: %s can't be read\n"
|
||||
msgstr "md5: la lecture de %s a échoué\n"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,658 +16,540 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: lib/libalpm/add.c:88
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:97
|
||||
#, c-format
|
||||
msgid "newer version %s-%s is in the target list -- skipping\n"
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:168
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:169
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:172
|
||||
msgid "replacing packages with -A and -U is not supported yet\n"
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:173
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:365
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:392
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:399
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:505
|
||||
#, c-format
|
||||
msgid "could not rename %s (%s)\n"
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:556
|
||||
#, c-format
|
||||
msgid "could not install %s as %s: %s\n"
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:559
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:576
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:765
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:770
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:785
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:793
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_files.c:223
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_files.c:275
|
||||
#, c-format
|
||||
msgid "loading package data for %s : level=%d\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
|
||||
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
|
||||
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
|
||||
#: lib/libalpm/package.c:787
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/cache.c:62
|
||||
#, c-format
|
||||
msgid "adding '%s' to package cache for db '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:285
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:553
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
|
||||
msgid "database path is undefined\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:173
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:175
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:177
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:573
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:43
|
||||
msgid "out of memory!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:45
|
||||
msgid "unexpected system error"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:47
|
||||
msgid "insufficient privileges"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:49
|
||||
msgid "could not find or read file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:51
|
||||
msgid "could not find or read directory"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:53
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:56
|
||||
msgid "library not initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:58
|
||||
msgid "library already initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:60
|
||||
msgid "unable to lock database"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:63
|
||||
msgid "could not open database"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:65
|
||||
msgid "could not create database"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:67
|
||||
msgid "database not initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:69
|
||||
msgid "database already registered"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:71
|
||||
msgid "could not find database"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:73
|
||||
msgid "could not update database"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:75
|
||||
msgid "could not remove database entry"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:78
|
||||
msgid "invalid url for server"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:85
|
||||
msgid "could not set parameter"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:88
|
||||
msgid "transaction already initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
msgid "transaction not initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:92
|
||||
msgid "duplicate target"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
msgid "transaction not prepared"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
msgid "transaction aborted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
msgid "could not commit transaction"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
msgid "could not download all files"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
msgid "could not find or read package"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
msgid "cannot open package file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
msgid "cannot load package data"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
msgid "package already installed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
msgid "package name is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
msgid "corrupted package"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
msgid "no such repository"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:128
|
||||
msgid "corrupted delta"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
msgid "delta patch failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:133
|
||||
msgid "group not found"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:136
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:138
|
||||
msgid "conflicting dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:140
|
||||
msgid "conflicting files"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:143
|
||||
msgid "user aborted the operation"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:145
|
||||
msgid "internal error"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:147
|
||||
msgid "libarchive error"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:150
|
||||
msgid "not confirmed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:152
|
||||
msgid "invalid regular expression"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:155
|
||||
msgid "connection to remote host failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:158
|
||||
msgid "unexpected error"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:124
|
||||
#, c-format
|
||||
msgid "could not get md5sum for package %s-%s\n"
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:133
|
||||
#, c-format
|
||||
msgid "md5sums do not match for package %s-%s\n"
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:737
|
||||
#, c-format
|
||||
msgid "%s: forcing upgrade to version %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:742
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:750
|
||||
#, c-format
|
||||
msgid "%s-%s: delaying upgrade of package (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:931
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:936
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:940
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:970
|
||||
#, c-format
|
||||
msgid "could not remove tempfile %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:1005
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:1012
|
||||
#, c-format
|
||||
msgid "missing package filelist in %s, generating one\n"
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:121
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgid "database path is undefined\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:337
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:342
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:56
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid, ignoring\n"
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:60
|
||||
msgid "url scheme not specified, assuming http\n"
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:241
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:245
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:275
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:288
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:307
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:319
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:387
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:394
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:445
|
||||
msgid "URL does not contain a file for download\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:458
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:135
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:250
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:320
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:354
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:358
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:628
|
||||
#, c-format
|
||||
msgid "malloc failure: could not allocate %zd bytes\n"
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:825
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
|
||||
#, c-format
|
||||
msgid "can't get md5 checksum for file %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:910
|
||||
#, c-format
|
||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1056
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1137
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1143
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1165
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1171
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1182
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1187
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1214
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1219
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:214
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:483
|
||||
#, c-format
|
||||
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:494
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:536
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:554
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:564
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:569
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:578
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:597
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:606
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:615
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:204
|
||||
#, c-format
|
||||
msgid "failed to make path '%s' : %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:389
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:573
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:593
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:643
|
||||
#, c-format
|
||||
msgid "md5: %s can't be opened\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:645
|
||||
#, c-format
|
||||
msgid "md5: %s can't be read\n"
|
||||
msgstr ""
|
||||
|
||||
567
lib/libalpm/po/pl.po
Normal file
567
lib/libalpm/po/pl.po
Normal file
@@ -0,0 +1,567 @@
|
||||
# Polish translations for Pacman package manager package
|
||||
# Polskie tłumaczenia dla pakietu Pacman package manager.
|
||||
# Copyright (C) 2007 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the Pacman package manager package.
|
||||
# Mateusz Jędrasik <m.jedrasik@gmail.com>, 2007.
|
||||
# Mateusz Herych <heniekk@gmail.com>, 2008.
|
||||
# #
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Pacman package manager 3.0.1\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: 2009-01-03 16:50+0100\n"
|
||||
"Last-Translator: Mateusz Herych <heniekk@gmail.com>\n"
|
||||
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "zastępowanie starszej wersji %s-%s na %s z listy celów\n"
|
||||
|
||||
#, c-format
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr "pomijam %s-%s ponieważ na liście celów znajduje się nowsza wersja %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr ""
|
||||
"konfliktujące pakiety znalazły się na liście pakietów do zainstalowania\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr ""
|
||||
"nie możesz mieć zainstalowanych dwóch konfliktujących ze sobą pakietów w tym "
|
||||
"samym czasie\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "zastępowanie pakietów za pomocą -U nie jest już wspierane\n"
|
||||
|
||||
# hmm
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "możesz zastąpić pakiety ręcznie, używając opcji -Rd oraz -U\n"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
"Różne prawa dla %s\n"
|
||||
"system plików: %o pakiet: %o\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "rozpakowywanie: dowiązanie symboliczne %s nie kieruje do katalogu\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "rozpakowywanie: nie nadpisuję katalogu plikiem %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "nie udało się rozpakować %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "nie udało się zmienić nazwy %s na %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s zachowane jako %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "nie udało się zainstalować %s jako %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s zainstalowano jako %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "rozpakowywanie %s jako %s.pacnew\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "nie można znaleźć obecnego katalogu\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "wystąpiły błędy podczas aktualizacji %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "wystąpiły błędy podczas instalacji %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "nie udało się zaktualizować pozycji bazy danych %s-%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "nie udało się dodać pozycji '%s' w pliku podręcznym\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "nie udało się usunąć wpisu %s%s z bazy danych\n"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "nieprawidłowa nazwa dla wpisu bazy danych '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "zepsuty wpis w bazie danych '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "nie udało się otworzyć pliku %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "baza danych %s jest sprzeczna: niedopasowana nazwa w pakiecie %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "baza danych %s jest sprzeczna: niedopasowana wersja w pakiecie %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "nie udało się przeczytać opisu pliku w %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "brak nazwy pakietu w %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "brak wersji pakietu w %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "błąd odczytywania pakietu: %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "brak metadanych pakietu w %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "próba ponownej rejestracji 'lokalnej' BD\n"
|
||||
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "ścieżka bazy danych jest niezdefiniowana\n"
|
||||
|
||||
#, c-format
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "wykryto cykl zależności:\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s zostanie usunięta po zależniościach %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s zostanie zainstalowane przed zależnościami %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "dostawca pakietu został wybrany (%s dostarcza %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "nie można rozwiązać \"%s\", zależności od \"%s\"\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "url '%s' jest błędny\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "schemat url nie został sprecyzowany, wybieranie HTTP\n"
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "dysk"
|
||||
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "nie udało się pobrać pliku '%s' z %s : %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "nie można kontynuować pobieranie, zaczynanie od początku\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "nie można zapisywać do pliku '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "błąd podczas pobierania '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "Błąd podczas zapisywania do pliku '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "nie udało się zmienić katalogu na / %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "uruchamianie XferCommand: klonowanie nieudane!\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "nie udało się pobrać %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "brak pamięci!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "niespodziewany błąd systemu"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "niewystarczające przywileje"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "nie udało się znaleźć bądź odczytać pliku"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "nie udało się znaleźć bądź odczytać katalogu"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "Dany został błędny bądź ZEROWY argument"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "biblioteka nie została zainicjowana"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "biblioteka już została zainicjowana"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "nie udało się zablokować bazy danych"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "nie udało się otworzyć bazy danych"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "nie udało się stworzyć bazy danych"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "baza danych nie została zainicjowana"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "baza danych już zarejestrowana"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "nie udało się odnaleźć bazy danych"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "nie udało się zaktualizować bazy danych"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "nie udało się usunąć wpisu do bazy danych"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "nieprawidłowy url dla serwera"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "tranzakcja została już zainicjowana"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "tranzakcja nie została zainicjowana"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "duplikat celu"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "tranzakcja nie została przygotowana"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "tranzakcja zaniechana"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "operacja niekompatybilna z typem tranzakcji"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "nie udało się wykonać tranzakcji"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "nie udało się pobrać wszystkich plików"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "nie udało się znaleźć bądź odczytać pakietu"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "nieprawidłowy bądź uszkodzony pakiet"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "nie udało się otworzyć pliku pakietu"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "nie udało się załadować danych pakietu"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "nie udało się usunąć wszystkich plików pakietu"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "nazwa pakietu jest nieprawidłowa"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "nie ma takiego repozytorium"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "nieprawidłowy bądź uszkodzony pakiet przyrostowy"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "Łatanie pakietem przyrostowym nie powiodło się"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "grupa nie została odnaleziona"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "nie udało się usatysfakcjonować zależności"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "konfliktujące zależności"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "konfliktujące pliki"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "użytkownik zaniechał operacji"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "błąd wewnętrzny"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "nie potwierdzono"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "nieprawidłowe wyrażenie regularne"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "błąd libarchive"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "błąd pobierania biblioteki"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr ""
|
||||
"wystąpił błąd podczas odwoływania się do zewnętrznego programu pobierającego"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "niespodziewany błąd"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "nie udało się odnaleźć %s w bazie danych -- pomijanie\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "nie udało się usunąć pliku '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "nie udało się usunąć wpisu %s-%s z bazy danych\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "nie udało się usunąć wpisu '%s' z pamięci podręcznej\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr ""
|
||||
"%s-%s: ignorowanie aktualizowania pakietu (do zastąpienia przez %s-%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: local (%s) jest nowsze niż %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: ignorowanie aktualizacji pakietu (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "repozytorium '%s' nie zostało znalezione\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s jest w najnowszej wersji -- pomijanie\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s jest w najnowszej wersji -- ponowne instalowanie\n"
|
||||
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "dezaktualizowanie pakietu %s (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "odkryto nierozwiązywalne konflikty pakietów\n"
|
||||
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "usuwanie '%s' z listy celów ponieważ konfliktuje z '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "komenda: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "nie udało się pobrać niektórych plików z %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "nie udało się utworzyć tranzakcji usuwania\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "nie udało się zainicjować tranzakcji usuwania\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "nie udało się przygotować tranzakcji usuwania\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "nie udało się wykonać tranzakcji usuwania\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "nie udało się stworzyć tranzakcji\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "nie udało się zainicjować tranzakcji\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "nie udało się przygotować tranzakcji\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "nie udało się wykonać tranzakcji\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "nie udało się usunąć pliku blokującego %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr "Brak /bin/sh w środowisku, przerywanie wykonywania skryptu\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "nie udało się stworzyć katalogu tymczasowego\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "nie udało się skopiować pliku tymczasowego do %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "nie udało się zmienić katalogu na %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "nie udało się odwidlić nowego procesu (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "nie udało się zmienić katalogu głównego (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "nie udało się zmienić katalogu na / (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "zawołanie do popen nieudane (%s)"
|
||||
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "zawołanie do waitpid nieudane (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "skrypt nie mógł zostać poprawnie wykonany\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "nie udało się usunąć katalogu tymczasowego %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "nie udało się otworzyć %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "brak pamięci podręcznej dla %s, tworzenie...\n"
|
||||
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr ""
|
||||
"nie udało się stworzyć pamięci podręcznej pakietu, używanie /tmp w zamian\n"
|
||||
@@ -1,745 +0,0 @@
|
||||
# Polish translations for Pacman package manager package
|
||||
# Polskie tłumaczenia dla pakietu Pacman package manager.
|
||||
# Copyright (C) 2007 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the Pacman package manager package.
|
||||
# Mateusz Jędrasik <m.jedrasik@gmail.com>, 2007.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Pacman package manager 3.0.1\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
|
||||
"PO-Revision-Date: 2007-04-12 04:23+0200\n"
|
||||
"Last-Translator: Mateusz Jędrasik <m.jedrasik@gmail.com>\n"
|
||||
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: lib/libalpm/add.c:88
|
||||
#, fuzzy, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "zastępowanie starszej wersji %s-%s na %s z listy celów"
|
||||
|
||||
#: lib/libalpm/add.c:97
|
||||
#, fuzzy, c-format
|
||||
msgid "newer version %s-%s is in the target list -- skipping\n"
|
||||
msgstr "nowsza wersja %s-%s znajduje się w liście celów -- pomijam"
|
||||
|
||||
#: lib/libalpm/add.c:168
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:169
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:172
|
||||
#, fuzzy
|
||||
msgid "replacing packages with -A and -U is not supported yet\n"
|
||||
msgstr "zastępowanie pakietów z -A i -U nie jest jeszcze wspierane"
|
||||
|
||||
#: lib/libalpm/add.c:173
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:365
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:392
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:399
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
|
||||
#, fuzzy, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "nie udało się rozpakować %s (%s)"
|
||||
|
||||
#: lib/libalpm/add.c:505
|
||||
#, fuzzy, c-format
|
||||
msgid "could not rename %s (%s)\n"
|
||||
msgstr "nie udało się zmienić nazwy %s (%s)"
|
||||
|
||||
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
|
||||
#, fuzzy, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "nie udało się skopiować pliku tymczasowego do %s (%s)"
|
||||
|
||||
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
|
||||
#, fuzzy, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s zachowane jako %s"
|
||||
|
||||
#: lib/libalpm/add.c:556
|
||||
#, fuzzy, c-format
|
||||
msgid "could not install %s as %s: %s\n"
|
||||
msgstr "nie udało się zainstalować %s jako %s: %s"
|
||||
|
||||
#: lib/libalpm/add.c:559
|
||||
#, fuzzy, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s zainstalowano jako %s"
|
||||
|
||||
#: lib/libalpm/add.c:576
|
||||
#, fuzzy, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "rozpakowywanie %s jako %s.pacnew"
|
||||
|
||||
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
|
||||
#, fuzzy
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "nie można znaleźć obecnego katalogu"
|
||||
|
||||
#: lib/libalpm/add.c:765
|
||||
#, fuzzy, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "wystąpiły błędy podczas %s %s"
|
||||
|
||||
#: lib/libalpm/add.c:770
|
||||
#, fuzzy, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "wystąpiły błędy podczas %s %s"
|
||||
|
||||
#: lib/libalpm/add.c:785
|
||||
#, fuzzy, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "nie udało się zaktualizować pozycji bazy danych %s-%s"
|
||||
|
||||
#: lib/libalpm/add.c:793
|
||||
#, fuzzy, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "nie udało się dodać pozycji '%s' w pliku podręcznym"
|
||||
|
||||
#: lib/libalpm/be_files.c:223
|
||||
#, fuzzy, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "nieprawidłowa nazwa dla wpisu bazy danych '%s'"
|
||||
|
||||
#: lib/libalpm/be_files.c:275
|
||||
#, fuzzy, c-format
|
||||
msgid "loading package data for %s : level=%d\n"
|
||||
msgstr "ładowanie danych pakietu dla %s : poziom=%d"
|
||||
|
||||
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
|
||||
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
|
||||
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
|
||||
#: lib/libalpm/package.c:787
|
||||
#, fuzzy, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "nie udało się otworzyć pliku %s: %s"
|
||||
|
||||
#: lib/libalpm/cache.c:62
|
||||
#, fuzzy, c-format
|
||||
msgid "adding '%s' to package cache for db '%s'\n"
|
||||
msgstr "dodawanie '%s' do pamięci podręcznej pakietów dla bd '%s'"
|
||||
|
||||
#: lib/libalpm/db.c:285
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "nie udało się usunąć wpisu %s%s z bazy danych"
|
||||
|
||||
#: lib/libalpm/db.c:553
|
||||
#, fuzzy
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "próba ponownej rejestracji 'lokalnej' BD"
|
||||
|
||||
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
|
||||
#, fuzzy
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "baza danych nie została zainicjowana"
|
||||
|
||||
#: lib/libalpm/deps.c:173
|
||||
#, fuzzy
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "wykryto cykl zależności: %s"
|
||||
|
||||
#: lib/libalpm/deps.c:175
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:177
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:573
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "nie udało się rozwiązać zależności dla \"%s\""
|
||||
|
||||
#: lib/libalpm/error.c:43
|
||||
msgid "out of memory!"
|
||||
msgstr "brak pamięci!"
|
||||
|
||||
#: lib/libalpm/error.c:45
|
||||
msgid "unexpected system error"
|
||||
msgstr "niespodziewany błąd systemu"
|
||||
|
||||
#: lib/libalpm/error.c:47
|
||||
msgid "insufficient privileges"
|
||||
msgstr "niewystarczające przywileje"
|
||||
|
||||
#: lib/libalpm/error.c:49
|
||||
msgid "could not find or read file"
|
||||
msgstr "nie udało się znaleźć bądź odczytać pliku"
|
||||
|
||||
#: lib/libalpm/error.c:51
|
||||
#, fuzzy
|
||||
msgid "could not find or read directory"
|
||||
msgstr "nie udało się znaleźć bądź odczytać pliku"
|
||||
|
||||
#: lib/libalpm/error.c:53
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "błędny bądź ZEROWY argument dany"
|
||||
|
||||
#: lib/libalpm/error.c:56
|
||||
msgid "library not initialized"
|
||||
msgstr "biblioteka nie została zainicjowana"
|
||||
|
||||
#: lib/libalpm/error.c:58
|
||||
msgid "library already initialized"
|
||||
msgstr "biblioteka już zainicjowana"
|
||||
|
||||
#: lib/libalpm/error.c:60
|
||||
msgid "unable to lock database"
|
||||
msgstr "nie udało się zablokować bazy danych"
|
||||
|
||||
#: lib/libalpm/error.c:63
|
||||
msgid "could not open database"
|
||||
msgstr "nie udało się otworzyć bazy danych"
|
||||
|
||||
#: lib/libalpm/error.c:65
|
||||
msgid "could not create database"
|
||||
msgstr "nie udało się stworzyć bazy danych"
|
||||
|
||||
#: lib/libalpm/error.c:67
|
||||
msgid "database not initialized"
|
||||
msgstr "baza danych nie została zainicjowana"
|
||||
|
||||
#: lib/libalpm/error.c:69
|
||||
msgid "database already registered"
|
||||
msgstr "baza danych już zarejestrowana"
|
||||
|
||||
#: lib/libalpm/error.c:71
|
||||
msgid "could not find database"
|
||||
msgstr "nie udało się odnaleźc bazy danych"
|
||||
|
||||
#: lib/libalpm/error.c:73
|
||||
msgid "could not update database"
|
||||
msgstr "nie udało się zaktualizować bazy danych"
|
||||
|
||||
#: lib/libalpm/error.c:75
|
||||
msgid "could not remove database entry"
|
||||
msgstr "nie udało się usunąć wpisu do bazy danych"
|
||||
|
||||
#: lib/libalpm/error.c:78
|
||||
msgid "invalid url for server"
|
||||
msgstr "nieprawidłowy url dla serwera"
|
||||
|
||||
#: lib/libalpm/error.c:85
|
||||
msgid "could not set parameter"
|
||||
msgstr "nie udało się ustawić parametru"
|
||||
|
||||
#: lib/libalpm/error.c:88
|
||||
msgid "transaction already initialized"
|
||||
msgstr "tranzakcja już zainicjowana"
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
msgid "transaction not initialized"
|
||||
msgstr "tranzakcja nie została zainicjowana"
|
||||
|
||||
#: lib/libalpm/error.c:92
|
||||
msgid "duplicate target"
|
||||
msgstr "duplikat celu"
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
msgid "transaction not prepared"
|
||||
msgstr "tranzakcja nie została przygotowana"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
msgid "transaction aborted"
|
||||
msgstr "tranzakcja zaniechana"
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "operacja niekompatybilna z typem tranzakcji"
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
msgid "could not commit transaction"
|
||||
msgstr "nie udało się wykonać tranzakcji"
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
msgid "could not download all files"
|
||||
msgstr "nie udało się pobrać wszystkich plików"
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
msgid "could not find or read package"
|
||||
msgstr "nie udało się znaleźć bądź odczytać pakietu"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "nieprawidłowy bądź skorumpowany pakiet"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
msgid "cannot open package file"
|
||||
msgstr "nie udało się otworzyć pliku pakietu"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
msgid "cannot load package data"
|
||||
msgstr "nie udało się załadować danych pakietu"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
msgid "package already installed"
|
||||
msgstr "pakiet już zainstalowany"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "nie udało się usunąć wszystkich plików pakietu"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
msgid "package name is not valid"
|
||||
msgstr "nieprawidłowa nazwa pakietu"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
msgid "corrupted package"
|
||||
msgstr "skorumpowany pakiet"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
msgid "no such repository"
|
||||
msgstr "nie ma takiego repozytorium"
|
||||
|
||||
#: lib/libalpm/error.c:128
|
||||
#, fuzzy
|
||||
msgid "corrupted delta"
|
||||
msgstr "skorumpowany pakiet"
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
msgid "delta patch failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:133
|
||||
msgid "group not found"
|
||||
msgstr "grupa nie została odnaleziona"
|
||||
|
||||
#: lib/libalpm/error.c:136
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "nie udało się usatysfakcjonować zależności"
|
||||
|
||||
#: lib/libalpm/error.c:138
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "konfliktujące zależności"
|
||||
|
||||
#: lib/libalpm/error.c:140
|
||||
msgid "conflicting files"
|
||||
msgstr "konfliktujące pliki"
|
||||
|
||||
#: lib/libalpm/error.c:143
|
||||
msgid "user aborted the operation"
|
||||
msgstr "użytkownik zaniechał operacji"
|
||||
|
||||
#: lib/libalpm/error.c:145
|
||||
msgid "internal error"
|
||||
msgstr "błąd wewnętrzny"
|
||||
|
||||
#: lib/libalpm/error.c:147
|
||||
msgid "libarchive error"
|
||||
msgstr "błąd libarchive"
|
||||
|
||||
#: lib/libalpm/error.c:150
|
||||
msgid "not confirmed"
|
||||
msgstr "nie potwierdzono"
|
||||
|
||||
#: lib/libalpm/error.c:152
|
||||
msgid "invalid regular expression"
|
||||
msgstr "nieprawidłowe wyrażenie regularne"
|
||||
|
||||
#: lib/libalpm/error.c:155
|
||||
msgid "connection to remote host failed"
|
||||
msgstr "połączenie ze zdalnym hostem nieudane"
|
||||
|
||||
#: lib/libalpm/error.c:158
|
||||
msgid "unexpected error"
|
||||
msgstr "niespodziewany błąd"
|
||||
|
||||
#: lib/libalpm/package.c:124
|
||||
#, fuzzy, c-format
|
||||
msgid "could not get md5sum for package %s-%s\n"
|
||||
msgstr "nie udało się otrzymać sumy md5 dla pakietu %s-%s"
|
||||
|
||||
#: lib/libalpm/package.c:133
|
||||
#, fuzzy, c-format
|
||||
msgid "md5sums do not match for package %s-%s\n"
|
||||
msgstr "sumy kontrolne md5 dla pakietu %s-%s nie zgadzają się"
|
||||
|
||||
#: lib/libalpm/package.c:737
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: forcing upgrade to version %s\n"
|
||||
msgstr "%s: wymuszanie aktualizacji do wersji %s"
|
||||
|
||||
#: lib/libalpm/package.c:742
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: local (%s) jest nowsze niż %s (%s)"
|
||||
|
||||
#: lib/libalpm/package.c:750
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s: delaying upgrade of package (%s)\n"
|
||||
msgstr "%s-%s: opóźnianie aktualizacji pakietu (%s)"
|
||||
|
||||
#: lib/libalpm/package.c:931
|
||||
#, fuzzy, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "nie udało się przeczytać pliku opisu"
|
||||
|
||||
#: lib/libalpm/package.c:936
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "brak nazwy pakietu w %s"
|
||||
|
||||
#: lib/libalpm/package.c:940
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "brak wersji pakietu w %s"
|
||||
|
||||
#: lib/libalpm/package.c:970
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove tempfile %s\n"
|
||||
msgstr "nie udało się usunąć pliku tymczasowego %s"
|
||||
|
||||
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
|
||||
#, fuzzy, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "błąd odczytywania pakietu: %s"
|
||||
|
||||
#: lib/libalpm/package.c:1005
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "brak metadanych pakietu"
|
||||
|
||||
#: lib/libalpm/package.c:1012
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package filelist in %s, generating one\n"
|
||||
msgstr "brak listy plików pakietu w %s, generowanie"
|
||||
|
||||
#: lib/libalpm/remove.c:121
|
||||
#, fuzzy, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "nie udało się odnaleźć %s w bazie danych -- pomijanie"
|
||||
|
||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "nie udało się usunąć pliku '%s': %s"
|
||||
|
||||
#: lib/libalpm/remove.c:337
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "nie udało się usunąć wpisu %s-%s z bazy danych"
|
||||
|
||||
#: lib/libalpm/remove.c:342
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "nie udało się usunąć wpisu '%s' z pamięci podręcznej"
|
||||
|
||||
#: lib/libalpm/server.c:56
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid, ignoring\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:60
|
||||
msgid "url scheme not specified, assuming http\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:241
|
||||
msgid "disk"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:245
|
||||
#, fuzzy, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "nie udało się pobrać niektórych plików z %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:275
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:288
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "nie udało się usunąć pliku '%s': %s"
|
||||
|
||||
#: lib/libalpm/server.c:307
|
||||
#, fuzzy, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "błąd odczytywania pakietu: %s"
|
||||
|
||||
#: lib/libalpm/server.c:319
|
||||
#, fuzzy, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "nie udało się usunąć pliku '%s': %s"
|
||||
|
||||
#: lib/libalpm/server.c:387
|
||||
#, fuzzy, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "nie udało się zmienić katalogu na / (%s)"
|
||||
|
||||
#: lib/libalpm/server.c:394
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:445
|
||||
msgid "URL does not contain a file for download\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:458
|
||||
#, fuzzy, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "nie udało się pobrać wszystkich plików"
|
||||
|
||||
#: lib/libalpm/sync.c:135
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: ignorowanie aktualizowania pakietu (do zastąpienia przez %s-%s)"
|
||||
|
||||
#: lib/libalpm/sync.c:250
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s-%s: ignorowanie aktualizacji pakietu (%s)"
|
||||
|
||||
#: lib/libalpm/sync.c:320
|
||||
#, fuzzy, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "repozytorium '%s' nie zostało znalezione"
|
||||
|
||||
#: lib/libalpm/sync.c:354
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s jest w najnowszej wersji -- pomijanie"
|
||||
|
||||
#: lib/libalpm/sync.c:358
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s jest w najnowszej wersji -- pomijanie"
|
||||
|
||||
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
|
||||
#, fuzzy
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "odkryto nierozwiązywalne konflikty pakietów"
|
||||
|
||||
#: lib/libalpm/sync.c:628
|
||||
#, fuzzy, c-format
|
||||
msgid "malloc failure: could not allocate %zd bytes\n"
|
||||
msgstr "błąd malloc: nie udało się zaalokować %d bajtów"
|
||||
|
||||
#: lib/libalpm/sync.c:825
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
|
||||
#, fuzzy, c-format
|
||||
msgid "can't get md5 checksum for file %s\n"
|
||||
msgstr "nie udało się otrzymać sum kontrolnych md5 lub sha1 dla pakietu %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:910
|
||||
#, fuzzy, c-format
|
||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
|
||||
msgstr "archiwum %s było skorumpowane (błąd sumy kontrolnej MD5 lub SHA1)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1056
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "nie udało się pobrać niektórych plików z %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1137
|
||||
#, fuzzy
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "nie udało się utworzyć tranzakcji usuwania"
|
||||
|
||||
#: lib/libalpm/sync.c:1143
|
||||
#, fuzzy
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "nie udało się zainicjować tranzakcji usuwania"
|
||||
|
||||
#: lib/libalpm/sync.c:1165
|
||||
#, fuzzy
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "nie udało się przygotować tranzakcji usuwania"
|
||||
|
||||
#: lib/libalpm/sync.c:1171
|
||||
#, fuzzy
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "nie udało się wykonać tranzakcji usuwania"
|
||||
|
||||
#: lib/libalpm/sync.c:1182
|
||||
#, fuzzy
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "nie udało się stworzyć tranzakcji"
|
||||
|
||||
#: lib/libalpm/sync.c:1187
|
||||
#, fuzzy
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "nie udało się zainicjować tranzakcji"
|
||||
|
||||
#: lib/libalpm/sync.c:1214
|
||||
#, fuzzy
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "nie udało się przygotować tranzakcji"
|
||||
|
||||
#: lib/libalpm/sync.c:1219
|
||||
#, fuzzy
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "nie udało się wykonać tranzakcji"
|
||||
|
||||
#: lib/libalpm/trans.c:214
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "nie udało się usunąć pliku blokującego %s"
|
||||
|
||||
#: lib/libalpm/trans.c:483
|
||||
#, c-format
|
||||
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:494
|
||||
#, fuzzy
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "nie udało się stworzyć katalogu tymczasowego"
|
||||
|
||||
#: lib/libalpm/trans.c:536
|
||||
#, fuzzy, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "nie udało się zmienić katalogu na %s (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:554
|
||||
#, fuzzy, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "nie udało się odwidlić nowego procesu (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:564
|
||||
#, fuzzy, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "nie udało się zmienić katalogu głównego (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:569
|
||||
#, fuzzy, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "nie udało się zmienić katalogu na / (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:578
|
||||
#, fuzzy, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "zawołanie do waitpid nieudane (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:597
|
||||
#, fuzzy, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "zawołanie do waitpid nieudane (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:606
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:615
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "nie udało się usunąć katalogu tymczasowego %s"
|
||||
|
||||
#: lib/libalpm/util.c:204
|
||||
#, fuzzy, c-format
|
||||
msgid "failed to make path '%s' : %s\n"
|
||||
msgstr "nie udało się stworzyć ścieżki '%s' : %s"
|
||||
|
||||
#: lib/libalpm/util.c:389
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "nie udało się otworzyć %s: %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:573
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "brak pamięci podręcznej dla %s, tworzenie...\n"
|
||||
|
||||
#: lib/libalpm/util.c:593
|
||||
#, fuzzy
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr ""
|
||||
"nie udało się stworzenie pamięci podręcznej pakietu, używanie /tmp w zamian\n"
|
||||
|
||||
#: lib/libalpm/util.c:643
|
||||
#, fuzzy, c-format
|
||||
msgid "md5: %s can't be opened\n"
|
||||
msgstr "%s nie może być otwarte\n"
|
||||
|
||||
#: lib/libalpm/util.c:645
|
||||
#, fuzzy, c-format
|
||||
msgid "md5: %s can't be read\n"
|
||||
msgstr "%s nie może być otwarte\n"
|
||||
|
||||
#~ msgid "please remove '%s' first, using -Rd"
|
||||
#~ msgstr "proszę usunąć pierw '%s', korzystając z -Rd"
|
||||
|
||||
#~ msgid "could not extract %s (%s)"
|
||||
#~ msgstr "nie udało się rozpakować %s (%s)"
|
||||
|
||||
#~ msgid "could not update provision '%s' from '%s'"
|
||||
#~ msgstr "nie udało się zaktualizować zasobu '%s' z '%s'"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s: description file is missing"
|
||||
#~ msgstr "%s: błąd składni w pliku opisu linia %d"
|
||||
|
||||
#~ msgid "malloc failed: could not allocate %d bytes"
|
||||
#~ msgstr "błąd malloc: nie udało się zaalokować %d bajtów"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)"
|
||||
#~ msgstr ""
|
||||
#~ "nie udało się rozwiązać zależności dla \"%s\" (\"%s\" nie znajduje się w "
|
||||
#~ "zbiorze pakietów)"
|
||||
|
||||
#~ msgid "cannot canonicalize specified root path '%s'"
|
||||
#~ msgstr "nie udało się skanonizować podanej ścieżki docelowej '%s'"
|
||||
|
||||
#~ msgid "could not get sha1sum for package %s-%s"
|
||||
#~ msgstr "nie udało się otrzymać sumy sha1 dla pakietu %s-%s"
|
||||
|
||||
#~ msgid "sha1sums do not match for package %s-%s"
|
||||
#~ msgstr "sumy kontrolne sha1 dla pakietu %s-%s nie zgadzają się"
|
||||
|
||||
#~ msgid "cannot remove file %s: %s"
|
||||
#~ msgstr "nie udało się usunąć pliku %s: %s"
|
||||
|
||||
#~ msgid "sha1: %s can't be opened\n"
|
||||
#~ msgstr "sha1: %s nie może zostać otwarty\n"
|
||||
|
||||
#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n"
|
||||
#~ msgstr "archiwum %s jest skorumpowane (błąd sumy kontrolnej MD5 lub SHA1)\n"
|
||||
|
||||
#~ msgid "could not update requiredby for database entry %s-%s"
|
||||
#~ msgstr ""
|
||||
#~ "nie udało się zaktualizować requiredby dla wpisu %s-%s w bazie danych"
|
||||
|
||||
#~ msgid "could not update new database entry %s-%s"
|
||||
#~ msgstr "nie udało się zaktualizować nowego wpisu %s-%s w bazie danych"
|
||||
|
||||
#~ msgid "could not update 'requiredby' database entry %s-%s"
|
||||
#~ msgstr ""
|
||||
#~ "nie udało się zaktualizować wpisu do bazy danych 'requiredby' dla %s-%s"
|
||||
File diff suppressed because it is too large
Load Diff
563
lib/libalpm/po/ru.po
Normal file
563
lib/libalpm/po/ru.po
Normal file
@@ -0,0 +1,563 @@
|
||||
# Russian translations for Pacman package manager package.
|
||||
# Copyright (C) 2007 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the Pacman package manager package.
|
||||
# <4rayven@gmail.com>, 2007. <serg.partizan@gmail.com> 2008
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Pacman package manager 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: 2009-01-03 15:55+0300\n"
|
||||
"Last-Translator: Sergey Tereschenko <serg.partizan@gmail.com>\n"
|
||||
"Language-Team: Russian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "заменяется устаревшая версия %s-%s на %s в списке целей\n"
|
||||
|
||||
#, c-format
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr "пропускается %s-%s, поскольку новая версия %s в списке целей\n"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr "в списке целей найдены конфликтующие пакеты\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr "вы не можете установить два конфликтующих пакета одновременно\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "замещение пакетов с использованием опций -A и -U еще не реализовано\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "вы можете заменить пакеты вручную, используя -Rd и -U\n"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
"права доступа различаются у директории %s\n"
|
||||
"файловая система: %o пакет: %o\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "извлечение: символическая ссылка %s не указывает на директорию\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "извлечение: не перезаписываю директорию файлом %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "не могу извлечь %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "не могу переименовать %s в %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s сохранен как %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "не могу установить %s как %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s установлен как %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "извлекаю %s как %s.pacnew\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "не могу определить текущую рабочую директорию\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "обнаружена проблема во время обновления %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "обнаружена проблема во время установки %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "не могу обновить в базе данных запись %s-%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "не могу добавить запись '%s' в кэш\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "не могу удалить из базы данных запись %s%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "неправильное имя для записи базы данных '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "повреждённая запись в базе данных '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "не могу открыть файл %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr ""
|
||||
"противоречивая информация в базе данных %s: не совпадает имя пакета %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr ""
|
||||
"противоречивая информация в базе данных %s: не совпадает версия пакета %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "не могу проанализировать файл с описанием пакета в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "пропущено имя пакета в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "пропущена версия пакета в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "ошибка при чтении пакета %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "отсутствуют метаданные пакета в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "попытка перерегистрировать локальную базу данных\n"
|
||||
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "путь к базе данных не определён\n"
|
||||
|
||||
#, c-format
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "обнаружена циклическая зависимость:\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s будет удалён после %s, как зависимость\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s будет установлен перед %s, как зависимость\n"
|
||||
|
||||
#, c-format
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "выбран пакет %s, предоставляющий %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "не удается разрешить \"%s\", зависимость \"%s\"\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "ссылка '%s' недействительна\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "схема ссылки не определена, подразумевается HTTP\n"
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "диск"
|
||||
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "не удалось получить файл '%s' из %s : %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "не удалось продолжить закачку, начинаю заново\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "не могу записать в файл '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "ошибка загрузки '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "не могу записать в файл '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "не могу изменить директорию на %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "запуск XferCommand: неудача\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "не могу загрузить %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "недостаточно памяти!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "неожиданная ошибка"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "недостаточно привилегий"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "не могу найти или прочитать файл"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "не удается найти или прочитать директорию"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "неправильный или нулевой аргумент"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "библиотека не инициализирована"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "библиотека уже инициализирована"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "не удается заблокировать базу данных"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "не удается открыть базу данных"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "не удается создать базу данных"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "база данных не инициализирована"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "база данных уже зарегистрирована"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "не удается найти базу данных"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "не удается обновить базу данных"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "не удается удалить запись в базе данных"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "неверный url"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "запрос уже инициализирован"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "запрос не инициализирован"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "повторение целей"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "запрос не подготовлен"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "запрос отменён"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "операция не совместима с типом запроса"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "не могу совершить запрос"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "не могу загрузить все файлы"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "не удается найти или прочитать пакет"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "пакет неправильный или поврежден"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "не удается открыть файл пакета"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "не удается загрузить данные пакета"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "пакет не установлен или ранней версии"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "не могу удалить все файлы пакета"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "неверное имя файла пакета"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "нет такого репозитория"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "ошибка или повреждение в дельта-файле"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "не удалось применить дельта-патч"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "группа не найдена"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "не удается удовлетворить зависимости"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "конфликтующие зависимости"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "конфликтующие файлы"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "пользователь прервал операцию"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "внутренняя ошибка"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "не подтверждено"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "неверное регулярное выражение"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "ошибка в libarchive"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "ошибка в download library"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr "ошибка вызова внешнего менеджера загрузки"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "непредвиденная ошибка"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "не могу найти %s в базе данных -- пропускаю\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "не могу удалить файл '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "не могу удалить из базы данных запись %s-%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "не могу удалить запись '%s' из кэша\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: игнорирую обновление пакета (он будет заменен на %s-%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: установленная версия (%s) новее, чем в %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: игнорирую обновление пакета (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "репозиторий '%s' не найден\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s не устарел -- пропускаю\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s не устарел -- переустанавливаю\n"
|
||||
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "откат версии пакета %s (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "обнаружен неразрешимый конфликт пакетов\n"
|
||||
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "удаляю '%s' из списка целей, поскольку он конфликтует с '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "команда: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "не удалось получить некоторые файлы с %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "не удалось создать запрос на удаление\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "не удалось инициализировать запрос на удаление\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "не удалось подготовить запрос на удаление\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "не удалось совершить запрос на удаление\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "не удалось создать запрос\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "не удалось инициализировать запрос\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "не удалось подготовить запрос\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "не удалось совершить запрос\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "не могу удалить lock-файл %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr "Нету /bin/sh в родительском окружении, отмена скрипта\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "не удалось создать временную директорию\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "не могу скопировать временный файл в %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "не удалось изменить директорию на %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "не не удалось создать новый процесс (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "не удалось изменить корневую директорию (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "не удалось изменить директорию на / (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "вызов popen не удался (%s)"
|
||||
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "вызов waitpid не удался (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "не удалось корректно выполнить скрипт\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "не могу удалить tmpdir %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "не удалось откруть %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "кэш %s не существует, создаю...\n"
|
||||
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "не могу создать кэш пакетов, будет использован /tmp\n"
|
||||
|
||||
#~ msgid "could not create directory %s: %s\n"
|
||||
#~ msgstr "не удалось создать директорию %s: (%s)\n"
|
||||
@@ -1,707 +0,0 @@
|
||||
# Russian translations for Pacman package manager package.
|
||||
# Copyright (C) 2007 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the Pacman package manager package.
|
||||
# <4rayven@gmail.com>, 2007.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Pacman package manager 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
|
||||
"PO-Revision-Date: 2007-03-16 02:52+1000\n"
|
||||
"Last-Translator: Vladimir Bayrakovskiy <4rayven@gmail.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: lib/libalpm/add.c:88
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:97
|
||||
#, fuzzy, c-format
|
||||
msgid "newer version %s-%s is in the target list -- skipping\n"
|
||||
msgstr "%s-%s не устарел -- пропускаю"
|
||||
|
||||
#: lib/libalpm/add.c:168
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:169
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:172
|
||||
#, fuzzy
|
||||
msgid "replacing packages with -A and -U is not supported yet\n"
|
||||
msgstr "замещение пакетов с использованием опций -A и -U еще не реализовано"
|
||||
|
||||
#: lib/libalpm/add.c:173
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:365
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:392
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:399
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
|
||||
#, fuzzy, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "не могу извлечь %s (%s)"
|
||||
|
||||
#: lib/libalpm/add.c:505
|
||||
#, fuzzy, c-format
|
||||
msgid "could not rename %s (%s)\n"
|
||||
msgstr "не могу переименовать %s (%s)"
|
||||
|
||||
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
|
||||
#, fuzzy, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "не могу скопировать временный файл в %s (%s)"
|
||||
|
||||
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
|
||||
#, fuzzy, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s сохранен как %s"
|
||||
|
||||
#: lib/libalpm/add.c:556
|
||||
#, fuzzy, c-format
|
||||
msgid "could not install %s as %s: %s\n"
|
||||
msgstr "не могу установить %s как %s: %s"
|
||||
|
||||
#: lib/libalpm/add.c:559
|
||||
#, fuzzy, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s установлен как %s"
|
||||
|
||||
#: lib/libalpm/add.c:576
|
||||
#, fuzzy, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "извлекаю %s как %s.pacnew"
|
||||
|
||||
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
|
||||
#, fuzzy
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "не могу определить текущую рабочую директорию"
|
||||
|
||||
#: lib/libalpm/add.c:765
|
||||
#, fuzzy, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "во время %s %s произошли ошибки"
|
||||
|
||||
#: lib/libalpm/add.c:770
|
||||
#, fuzzy, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "во время %s %s произошли ошибки"
|
||||
|
||||
#: lib/libalpm/add.c:785
|
||||
#, fuzzy, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "не могу обновить в базе данных запись %s-%s"
|
||||
|
||||
#: lib/libalpm/add.c:793
|
||||
#, fuzzy, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "не могу добавить запись '%s' в кэш"
|
||||
|
||||
#: lib/libalpm/be_files.c:223
|
||||
#, fuzzy, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "не могу удалить из базы данных запись %s%s"
|
||||
|
||||
#: lib/libalpm/be_files.c:275
|
||||
#, fuzzy, c-format
|
||||
msgid "loading package data for %s : level=%d\n"
|
||||
msgstr "загружаю данные пакета %s : уровень=%d"
|
||||
|
||||
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
|
||||
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
|
||||
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
|
||||
#: lib/libalpm/package.c:787
|
||||
#, fuzzy, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "не могу скопировать временный файл в %s (%s)"
|
||||
|
||||
#: lib/libalpm/cache.c:62
|
||||
#, c-format
|
||||
msgid "adding '%s' to package cache for db '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:285
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "не могу удалить из базы данных запись %s%s"
|
||||
|
||||
#: lib/libalpm/db.c:553
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
|
||||
#, fuzzy
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "база данных не инициализирована"
|
||||
|
||||
#: lib/libalpm/deps.c:173
|
||||
#, fuzzy
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "обнаружена циклическая зависимость: %s"
|
||||
|
||||
#: lib/libalpm/deps.c:175
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:177
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/deps.c:573
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "не удается удовлетворить зависимости для \"%s\""
|
||||
|
||||
#: lib/libalpm/error.c:43
|
||||
msgid "out of memory!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:45
|
||||
msgid "unexpected system error"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:47
|
||||
msgid "insufficient privileges"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:49
|
||||
msgid "could not find or read file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:51
|
||||
#, fuzzy
|
||||
msgid "could not find or read directory"
|
||||
msgstr "не удается найти или прочитать пакет"
|
||||
|
||||
#: lib/libalpm/error.c:53
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:56
|
||||
msgid "library not initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:58
|
||||
msgid "library already initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:60
|
||||
msgid "unable to lock database"
|
||||
msgstr "не удается заблокировать базу данных"
|
||||
|
||||
#: lib/libalpm/error.c:63
|
||||
msgid "could not open database"
|
||||
msgstr "не удается открыть базу данных"
|
||||
|
||||
#: lib/libalpm/error.c:65
|
||||
msgid "could not create database"
|
||||
msgstr "не удается создать базу данных"
|
||||
|
||||
#: lib/libalpm/error.c:67
|
||||
msgid "database not initialized"
|
||||
msgstr "база данных не инициализирована"
|
||||
|
||||
#: lib/libalpm/error.c:69
|
||||
msgid "database already registered"
|
||||
msgstr "база данных уже зарегистрирована"
|
||||
|
||||
#: lib/libalpm/error.c:71
|
||||
msgid "could not find database"
|
||||
msgstr "не удается найти базу данных"
|
||||
|
||||
#: lib/libalpm/error.c:73
|
||||
msgid "could not update database"
|
||||
msgstr "не удается обновить базу данных"
|
||||
|
||||
#: lib/libalpm/error.c:75
|
||||
msgid "could not remove database entry"
|
||||
msgstr "не удается удалить запись в базе данных"
|
||||
|
||||
#: lib/libalpm/error.c:78
|
||||
msgid "invalid url for server"
|
||||
msgstr "неверный url"
|
||||
|
||||
#: lib/libalpm/error.c:85
|
||||
msgid "could not set parameter"
|
||||
msgstr "ну могу установить параметр"
|
||||
|
||||
#: lib/libalpm/error.c:88
|
||||
msgid "transaction already initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
msgid "transaction not initialized"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:92
|
||||
msgid "duplicate target"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
msgid "transaction not prepared"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
msgid "transaction aborted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
msgid "could not commit transaction"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
msgid "could not download all files"
|
||||
msgstr "не могу загрузить все файлы"
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
msgid "could not find or read package"
|
||||
msgstr "не удается найти или прочитать пакет"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "пакет неправильный или поврежден"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
msgid "cannot open package file"
|
||||
msgstr "не удается открыть файл пакета"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
msgid "cannot load package data"
|
||||
msgstr "не удается загрузить данные пакета"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
msgid "package already installed"
|
||||
msgstr "пакет уже установлен"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "не могу удалить все файлы пакета"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
msgid "package name is not valid"
|
||||
msgstr "неверное имя пакета"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
msgid "corrupted package"
|
||||
msgstr "пакет поврежден"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
msgid "no such repository"
|
||||
msgstr "нет такого репозитория"
|
||||
|
||||
#: lib/libalpm/error.c:128
|
||||
#, fuzzy
|
||||
msgid "corrupted delta"
|
||||
msgstr "пакет поврежден"
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
msgid "delta patch failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:133
|
||||
msgid "group not found"
|
||||
msgstr "группа не найдена"
|
||||
|
||||
#: lib/libalpm/error.c:136
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "не удается удовлетворить зависимости"
|
||||
|
||||
#: lib/libalpm/error.c:138
|
||||
msgid "conflicting dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:140
|
||||
msgid "conflicting files"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:143
|
||||
msgid "user aborted the operation"
|
||||
msgstr "пользователь прервал операцию"
|
||||
|
||||
#: lib/libalpm/error.c:145
|
||||
msgid "internal error"
|
||||
msgstr "внутренняя ошибка"
|
||||
|
||||
#: lib/libalpm/error.c:147
|
||||
msgid "libarchive error"
|
||||
msgstr "ошибка в libarchive"
|
||||
|
||||
#: lib/libalpm/error.c:150
|
||||
msgid "not confirmed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:152
|
||||
msgid "invalid regular expression"
|
||||
msgstr "неверное регулярное выражение"
|
||||
|
||||
#: lib/libalpm/error.c:155
|
||||
msgid "connection to remote host failed"
|
||||
msgstr "не удалось подключиться к удаленному хосту"
|
||||
|
||||
#: lib/libalpm/error.c:158
|
||||
msgid "unexpected error"
|
||||
msgstr "непредвиденная ошибка"
|
||||
|
||||
#: lib/libalpm/package.c:124
|
||||
#, fuzzy, c-format
|
||||
msgid "could not get md5sum for package %s-%s\n"
|
||||
msgstr "не могу получить контрольную сумму md5sum для пакета %s-%s"
|
||||
|
||||
#: lib/libalpm/package.c:133
|
||||
#, fuzzy, c-format
|
||||
msgid "md5sums do not match for package %s-%s\n"
|
||||
msgstr "контрольные суммы md5sum для пакета %s-%s не совпали"
|
||||
|
||||
#: lib/libalpm/package.c:737
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: forcing upgrade to version %s\n"
|
||||
msgstr "%s: принудительно обновляю до версии %s"
|
||||
|
||||
#: lib/libalpm/package.c:742
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: установленная версия (%s) новее, чем в %s (%s)"
|
||||
|
||||
#: lib/libalpm/package.c:750
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s: delaying upgrade of package (%s)\n"
|
||||
msgstr "%s: принудительно обновляю до версии %s"
|
||||
|
||||
#: lib/libalpm/package.c:931
|
||||
#, fuzzy, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "не могу удалить временный файл %s"
|
||||
|
||||
#: lib/libalpm/package.c:936
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "отсутствует список файлов пакета в %s, генерирую его"
|
||||
|
||||
#: lib/libalpm/package.c:940
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "отсутствует список файлов пакета в %s, генерирую его"
|
||||
|
||||
#: lib/libalpm/package.c:970
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove tempfile %s\n"
|
||||
msgstr "не могу удалить временный файл %s"
|
||||
|
||||
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
|
||||
#, fuzzy, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "ошибка при чтении пакета: %s"
|
||||
|
||||
#: lib/libalpm/package.c:1005
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "отсутствует список файлов пакета в %s, генерирую его"
|
||||
|
||||
#: lib/libalpm/package.c:1012
|
||||
#, fuzzy, c-format
|
||||
msgid "missing package filelist in %s, generating one\n"
|
||||
msgstr "отсутствует список файлов пакета в %s, генерирую его"
|
||||
|
||||
#: lib/libalpm/remove.c:121
|
||||
#, fuzzy, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "не могу найти %s в базе данных -- пропускаю"
|
||||
|
||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "не могу удалить файл '%s': %s"
|
||||
|
||||
#: lib/libalpm/remove.c:337
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "не могу удалить из базы данных запись %s%s"
|
||||
|
||||
#: lib/libalpm/remove.c:342
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "не могу добавить запись '%s' в кэш"
|
||||
|
||||
#: lib/libalpm/server.c:56
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid, ignoring\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:60
|
||||
msgid "url scheme not specified, assuming http\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:241
|
||||
msgid "disk"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:245
|
||||
#, fuzzy, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "не удалось получить некоторые файлы с %s\n"
|
||||
|
||||
#: lib/libalpm/server.c:275
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:288
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "не могу удалить файл '%s': %s"
|
||||
|
||||
#: lib/libalpm/server.c:307
|
||||
#, fuzzy, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "ошибка при чтении пакета: %s"
|
||||
|
||||
#: lib/libalpm/server.c:319
|
||||
#, fuzzy, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "не могу удалить файл '%s': %s"
|
||||
|
||||
#: lib/libalpm/server.c:387
|
||||
#, fuzzy, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "не могу извлечь %s (%s)"
|
||||
|
||||
#: lib/libalpm/server.c:394
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:445
|
||||
msgid "URL does not contain a file for download\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/server.c:458
|
||||
#, fuzzy, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "не могу загрузить все файлы"
|
||||
|
||||
#: lib/libalpm/sync.c:135
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)"
|
||||
|
||||
#: lib/libalpm/sync.c:250
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)"
|
||||
|
||||
#: lib/libalpm/sync.c:320
|
||||
#, fuzzy, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "репозиторий '%s' не найден"
|
||||
|
||||
#: lib/libalpm/sync.c:354
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s не устарел -- пропускаю"
|
||||
|
||||
#: lib/libalpm/sync.c:358
|
||||
#, fuzzy, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s не устарел -- пропускаю"
|
||||
|
||||
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
|
||||
#, fuzzy
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "обнаружен неразрешимый конфликт пакетов"
|
||||
|
||||
#: lib/libalpm/sync.c:628
|
||||
#, c-format
|
||||
msgid "malloc failure: could not allocate %zd bytes\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:825
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
|
||||
#, fuzzy, c-format
|
||||
msgid "can't get md5 checksum for file %s\n"
|
||||
msgstr "не удалось получить md5 или sha1 контрольную сумму для пакета %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:910
|
||||
#, fuzzy, c-format
|
||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
|
||||
msgstr "архив %s был поврежден (не сходится MD5 или SHA1 контрольная сумма)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1056
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "не удалось получить некоторые файлы с %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1137
|
||||
#, fuzzy
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "не удается создать базу данных"
|
||||
|
||||
#: lib/libalpm/sync.c:1143
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1165
|
||||
#, fuzzy
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "не удается создать базу данных"
|
||||
|
||||
#: lib/libalpm/sync.c:1171
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1182
|
||||
#, fuzzy
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "не удается создать базу данных"
|
||||
|
||||
#: lib/libalpm/sync.c:1187
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1214
|
||||
#, fuzzy
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "не удается создать базу данных"
|
||||
|
||||
#: lib/libalpm/sync.c:1219
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:214
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "не могу удалить lock-файл %s"
|
||||
|
||||
#: lib/libalpm/trans.c:483
|
||||
#, c-format
|
||||
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:494
|
||||
#, fuzzy
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "не могу определить текущую рабочую директорию"
|
||||
|
||||
#: lib/libalpm/trans.c:536
|
||||
#, fuzzy, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "не могу извлечь %s (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:554
|
||||
#, fuzzy, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "не могу переименовать %s (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:564
|
||||
#, fuzzy, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "не могу определить текущую рабочую директорию"
|
||||
|
||||
#: lib/libalpm/trans.c:569
|
||||
#, fuzzy, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "не могу извлечь %s (%s)"
|
||||
|
||||
#: lib/libalpm/trans.c:578
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:597
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:606
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/trans.c:615
|
||||
#, fuzzy, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "не могу удалить временный файл %s"
|
||||
|
||||
#: lib/libalpm/util.c:204
|
||||
#, c-format
|
||||
msgid "failed to make path '%s' : %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:389
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:573
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "кэш %s не существует, создаю...\n"
|
||||
|
||||
#: lib/libalpm/util.c:593
|
||||
#, fuzzy
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "не могу создать кэш пакета, будет использован /tmp\n"
|
||||
|
||||
#: lib/libalpm/util.c:643
|
||||
#, c-format
|
||||
msgid "md5: %s can't be opened\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:645
|
||||
#, c-format
|
||||
msgid "md5: %s can't be read\n"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "please remove '%s' first, using -Rd"
|
||||
#~ msgstr "пожалуйста, уделите сначала '%s' используя -Rd"
|
||||
|
||||
#~ msgid "could not extract %s (%s)"
|
||||
#~ msgstr "не могу извлечь %s (%s)"
|
||||
|
||||
#~ msgid "could not update provision '%s' from '%s'"
|
||||
#~ msgstr "не могу обновить '%s' из '%s'"
|
||||
|
||||
#~ msgid "could not get sha1sum for package %s-%s"
|
||||
#~ msgstr "не могу получить контрольную сумму sha1sum для пакета %s-%s"
|
||||
|
||||
#~ msgid "sha1sums do not match for package %s-%s"
|
||||
#~ msgstr "контрольные суммы sha1sum для пакета %s-%s не совпали"
|
||||
|
||||
#~ msgid "cannot remove file %s: %s"
|
||||
#~ msgstr "не могу удалить файл %s: %s"
|
||||
|
||||
#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n"
|
||||
#~ msgstr "архив %s поврежден (не сходится MD5 или SHA1 контрольная сумма)\n"
|
||||
557
lib/libalpm/po/tr.po
Normal file
557
lib/libalpm/po/tr.po
Normal file
@@ -0,0 +1,557 @@
|
||||
# Turkish translation for libalpm.
|
||||
# Copyright (C) 2008 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
# Samed BEYRİBEY <ras0ir@eventualis.org>, 2008.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 3.1.4-1\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: 2009-01-03 16:20+0200\n"
|
||||
"Last-Translator: Samed Beyribey <ras0ir@eventualis.org>\n"
|
||||
"Language-Team: Turkish Arch Linux Users <tr@archlinuxtr.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "eski sürüm %s-%s hedef listesindeki %s ile değiştiriliyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr "%s-%s yeni sürüm %s hedef listesinde olduğundan atlanıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr "hedef listesinde çakışan paketler bulundu\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr "çakışan iki paketi aynı anda kuramazsınız\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "-A ve -U kullanarak paket değiştirme henüz desteklenmemektedir\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "paketleri -Rd ve -U kullanarak değiştirebilirsiniz\n"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
"%s paketi üzerinde dizin izinleri farklı\n"
|
||||
"dosya sistemi: %o paket: %o\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "aç: %s sembolik bağı dizine yöneltilmemiş\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "aç: dizin %s dosyası ile baştan yazılmıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "%s açılamadı (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "%s dosyasının ismi %s olarak değiştirilemiyor (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s, %s olarak kaydedildi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "%s, %s olarak kurulamadı: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s, %s olarak kuruldu\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "%s dosyası %s.pacnew olarak açılıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "üzerinde çalışılan dizin algılanamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "%s güncellenirken bir sorun meydana geldi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "%s yüklenirken bir sorun meydana geldi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "%s-%s veritabanı kaydı güncellenemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "'%s' kaydı tampona eklenemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "%s%s veritabanı kaydı kaldırılamıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "veritabanı kaydı için geçersiz isim '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "bozuk veritabanı kaydı '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "%s dosyası açılamadı: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "%s veritabanı tutarsız: %s paketinde isim uyuşmazlığı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "%s veritabanı tutarsız: %s paketinde sürüm uyuşmazlığı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "%s içerisindeki paket açıklama dosyası ayrıştırılamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "%s içerisinde paket adı bulunmuyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "%s içerisinde paket sürümü bulunmuyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "%s paketi okunurken hata meydana geldi: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "%s içerisinde eksik paket bilgisi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "'yerel' veritabanı tekrar kaydedilmeye çalışılıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "veritabanı yolu belirtilmemiş\n"
|
||||
|
||||
#, c-format
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "dolaylı bağımlılıklar bulundu:\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s paketi %s bağımlılığından sonra kaldırılacak\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s paketi %s bağımlılığından önce kurulacak\n"
|
||||
|
||||
#, c-format
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "sağlayan paket seçildi ( %s %s'i sağlıyor)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "\"%s\" paketi \"%s\" paketinin bağımlılığı olarak çözümlenemiyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "'%s' adresi geçersiz\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "adres şeması belirtilmemiş, http kullanılacak\n"
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "disk"
|
||||
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "%3$s hatası nedeniyle '%1$s' dosyası %2$s adresinden alınamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "indirmeye devam edilemiyor, baştan başlanıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "'%s' dosyasına yazılamıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "'%s' indirilirken hata oluştu: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "'%s' dosyasına yazılamıyor: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "%s dizinine geçilemiyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "XferCommand çalıştırılıyor: çatallanma başarısız!\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "%s dosyası indirilemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "bellek yetersiz!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "beklenmedik sistem hatası"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "yetersiz yetki"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "dosya bulunamadı veya okunamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "klasör bulunamadı veya okunamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "eksik ya da geçersiz parametre geçilmiş"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "kütüphane başlatılamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "kütüphane zaten başlatıldı"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "veritabanı kilitlenemiyor"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "veritabanı açılamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "veritabanı oluşturulamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "veritabanı başlatılamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "veritabanı zaten kayıtlı"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "veritabanı bulunamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "veritabanı güncellenemedi"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "veritabanı kaydı kaldırılamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "hatalı sunucu adresi"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "işlem zaten başlatılmış"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "işlem başlatılmamış"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "birden fazla hedef"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "işlem hazırlanamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "işlem iptal edildi"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "operasyon, işlem tipiyle uyumlu değil"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "işlem teslim edilemiyor"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "tüm dosyalar indirilemedi"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "paket bulunamadı veya okunamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "geçersiz veya bozuk paket"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "paket dosyası açılamıyor"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "paket verisi yüklenemiyor"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "paket kurulamadı ya da önceki sürümü kurulu"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "paketle alakalı tüm dosyalar kaldırılamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "paket dosya adı geçerli değil"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "depo bulunmuyor"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "geçersiz ya da bozuk veri"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "fark yaması başarısız oldu"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "grup bulunamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "bağımlılıklar sağlanamadı"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "çelişen bağımlılıklar"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "çelişen dosyalar"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "işlem kullanıcı tarafından durduruldu"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "dahili hata"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "onaylanmadı"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "geçersiz düzenli ifade"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "libarchive hatası"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "kütüphane indirilirken hata oluştu"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr "harici indiriciyi çağırırken hata oluştu"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "beklenmedik hata"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "%s veritabanında bulunamadı -- atlanıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "'%s' dosyası silinemiyor: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "veritabanı kaydı %s-%s silinemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "'%s' kaydı tampondan silinemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: paket güncellemesi göz ardı ediliyor (%s-%s ile değiştirilecek)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: yereldeki paket (%s) %s (%s) paketinden daha güncel\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: paket güncellemesi göz ardı ediliyor (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "'%s' deposu bulunamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s güncel -- atlanıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s güncel -- yeniden kuruluyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "%s paketi eski sürümüne çevriliyor (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "çözülemeyen paket çakışmaları bulundu\n"
|
||||
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "'%s' hedef listesinden '%s' ile çeliştiği için kaldırıldı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "komut: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "%s deposundan bazı dosyalar alınamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "kaldırma işlemi oluşturulamıyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "kaldırma işlemi başlatılamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "kaldırma işlemi hazırlanamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "kaldırma işlemi teslim edilemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "işlem oluşturulamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "işlem başlatılamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "işlem hazırlanamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "işlem teslim edilemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "kilit dosyası %s silinemedi\n"
|
||||
|
||||
#, c-format
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr "Bir üst ortamda /bin/sh bulunamadı, betik iptal ediliyor\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "geçici dizin oluşturulamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "geçici dosya %s üzerine kopyalanamadı (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "%s dizinine geçilemedi (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "yeni bir süreç çatallanamadı (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "kök dizini değiştirilemedi (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "/ dizinine gidilemedi (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "popen çağrısı başarısız (%s)"
|
||||
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "waitpid çağrısı başarısız (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "betik düzgün çalıştırılamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "geçici dizin %s kaldırılamadı\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "%s açılamadı: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "%s tamponu bulunmuyor, oluşturuluyor...\n"
|
||||
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "paket tamponu oluşturulamadı, /tmp kullanılacak\n"
|
||||
|
||||
560
lib/libalpm/po/uk.po
Normal file
560
lib/libalpm/po/uk.po
Normal file
@@ -0,0 +1,560 @@
|
||||
# Copyright (C) 2008 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the pacman package.
|
||||
# Ivan Kovnatsky <sevenfourk@gmail.com>, 2008.
|
||||
# Roman Kyrylych <roman@archlinux.org>, 2008, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libalpm 3.2.2\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Roman Kyrylych <roman@archlinux.org>\n"
|
||||
"Language-Team: http://archlinux.org.ua\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Ukrainian\n"
|
||||
"X-Poedit-Country: UKRAINE\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "старіша версія %s-%s замінюється на %s в цільовому списку пакунків\n"
|
||||
|
||||
#, c-format
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr ""
|
||||
"%s-%s пропускається, бо в списку цільових пакунків є новіша версія %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr "в списку цільових пакунків були знайдені конфліктуючі пакунки\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr "ви не можете одночасно встановити два пакунки, що конфліктують\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "заміна пакунків за допомогою -U поки-що не підтримується\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "ви можете власноруч замінити пакунки використавши -Rd та -U\n"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
"права каталога відрізняються на\n"
|
||||
"файловій системі %s: %o пакунок: %o\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "розпакування: символьне посилання %s не вказує на каталог\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "розпакування: каталог не було перезаписано файлом %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "неможливо розпакувати %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "неможливо перейменувати %s на %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%s збережено як %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "неможливо встановити %s як %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%s встановлено як %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "розпакування %s як %s.pacnew\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "неможливо отримати поточний робочий каталог\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "з'явилась проблема при поновленні %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "з'явилась проблема при встановленні %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "неможливо поновити запис бази даних %s-%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "неможливо додати запис '%s' у кеш\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "неможливо видалити запис бази даних %s%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "невірне ім'я для запису бази даних '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "пошкоджений запис у базі даних '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "неможливо відкрити файл %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "база даних %s неоднорідна: неспівпадіння назви для пакунка %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "база даних %s неоднорідна: неспівпадіння версій для пакунка %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "неможливо розібрати файл опису пакунка %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "бракує імені пакунку в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "бракує версії пакунку в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "помилка при читанні пакунку %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "бракує метаданих пакунку в %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "спроба перереєструвати базу даних 'local'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "шлях до бази даних не вказано\n"
|
||||
|
||||
#, c-format
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "виявлено цикл залежностей:\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%s буде видалено після його залежності %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s буде встановлено перед його %s залежністю\n"
|
||||
|
||||
#, c-format
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "був вибраний пакунок %s, що забезпечує %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "неможливо розв'язати \"%s\", залежність \"%s\"\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "посилання '%s' невірне\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "протокол посилання не вказано, вважається HTTP\n"
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "диск"
|
||||
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "не вдалося отримати файл '%s' з %s : %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "неможливо продовжити завантаження, починається з початку\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "неможливо писати у файл '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "помилка при завантаженні '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "помилка при запису до файлу '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "неможливо змінити каталог на %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "виконання XferCommand: старт процесу невдалий!\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "не вдалося завантажити %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "не вистачає пам'яті!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "неочікувана системна помилка"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "недостатньо прав"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "неможливо знайти чи прочитати файл"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "неможливо знайти чи прочитати каталог"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "передано невірний аргумент чи NULL"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "бібліотека не ініціалізована"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "бібліотека вже ініціалізована"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "неможливо заблокувати базу даних"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "неможливо відкрити базу даних"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "неможливо створити базу даних"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "база даних не ініціалізована"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "база даних вже зареєстрована"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "неможливо знайти базу даних"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "неможливо поновити базу даних"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "неможливо видалити запис з бази даних"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "невірне посилання чи сервер"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "транзакція вже ініціалізована"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "транзакція не ініціалізована"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "продубльований цільовий пакунок"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "транзакція не підготовлена"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "транзакцію перервано"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "операція несумісна з типом транзакції"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "неможливо здійснити транзакцію"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "неможиво завантажити усі файли"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "неможливо знайти чи прочитати пакунок"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "невірний чи пошкоджений пакунок"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "неможливо відкрити файл пакунку"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "неможливо завантажити дані пакунку"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "пакунок не встановлено, або існує старіша версія"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "неможливо видалити всі файли для пакунку"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "ім'я файлу пакунку невірне"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "немає такого репозиторію"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "невірний чи пошкоджений дельта-патч"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "накладення дельта-патчу невдале"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "група не знадена"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "неможливо забезпечити залежності"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "конфліктуючі залежності"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "конфліктуючі файли"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "користувач перервав операцію"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "внутрішня помилка"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "не підтверджено"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "невірний регулярний вираз"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "помилка libarchive"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "помилка бібліотеки завантаження"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr "помилка виклику зовнішнього завантажувача"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "неочікувана помилка"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "неможливо знайти %s в базі даних -- пропускається\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "неможливо видалити файл '%s': %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "неможливо видалити запис бази даних %s-%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "неможливо видалити запис '%s' з кешу\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%s-%s: ігнорування поновлення пакунку (буде замінено на %s-%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: локальна версія (%s) новіша за %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: ігнорування поновлення пакунку (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "репозиторій '%s' не знайдено\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s не потребує поновлення -- пропускається\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s не потребує поновлення -- перевстановлюється\n"
|
||||
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "пониження версії пакунку %s (%s => %s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "виявлені нерозв'язні конфлікти пакунків\n"
|
||||
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "видалення '%s' з списку пакунків, бо він конфліктує з '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "команда: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "не вдалося отримати деякі файли з %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "неможливо створити транзакцію видалення\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "неможливо почати транзакцію видалення\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "неможливо підготувати транзакцію видалення\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "неможливо здійснити транзакцію видалення\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "неможливо створити транзакцію\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "неможливо почати транзакцію\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "неможливо підготувати транзакцію\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "неможливо здійснити транзакцію\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "неможливо видалити файл блокування %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr ""
|
||||
"В батьківському середовищі немає /bin/sh, переривання скрипту виконання\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "неиожливо створити тимчасовий каталог\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "неможливо скопіювати тимчасовий файл до %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "неможливо змінити каталог на %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "неможливо почати новий процес (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "неможливо змінити кореневий каталог (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "неможливо змінити каталог на / (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "виклик popen невдалий (%s)"
|
||||
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "виклик waitpid невдалий (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "скрипт встановлення не зміг виконатися коректно\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "неможливо видалити тимчасовий каталог %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "неможливо відкрити %s: %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "кеш %s не існує, створюється...\n"
|
||||
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "неможливо створити кеш пакунку, використовуватиметься /tmp\n"
|
||||
558
lib/libalpm/po/zh_CN.po
Normal file
558
lib/libalpm/po/zh_CN.po
Normal file
@@ -0,0 +1,558 @@
|
||||
# Chinese/Simplified translation of Pacman package manager package.
|
||||
# Copyright (C) 2008 Judd Vinet <jvinet@zeroflux.org>
|
||||
# This file is distributed under the same license as the Pacman package manager package.
|
||||
# 甘露(Lu.Gan) <rhythm.gan@gmail.com>, 2008.
|
||||
#
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Pacman package manager 3.2.1\n"
|
||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
|
||||
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
|
||||
"PO-Revision-Date: 2008-10-28 16:20+0900\n"
|
||||
"Last-Translator: Lyman Li <lymanrb@gmail.com>\n"
|
||||
"Language-Team: Chinese/Simplified <i18n-translation@lists.linux.net.cn>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing older version %s-%s by %s in target list\n"
|
||||
msgstr "正在用目标清单中的 %3$s 替换老版本 %1$s-%2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
|
||||
msgstr "跳过 %1$s-%2$s,因为较新版本的 %3$s 在目标清单中\n"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting packages were found in the target list\n"
|
||||
msgstr "目标清单中发现有冲突的软件包\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you cannot install two conflicting packages at the same time\n"
|
||||
msgstr "你不能同时安装有冲突的两个软件包\n"
|
||||
|
||||
#, c-format
|
||||
msgid "replacing packages with -U is not supported yet\n"
|
||||
msgstr "目前尚不支持用 -U 参数替换软件包\n"
|
||||
|
||||
#, c-format
|
||||
msgid "you can replace packages manually using -Rd and -U\n"
|
||||
msgstr "你可以使用 -Rd 及 -U 来手动替换软件包\n"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr ""
|
||||
"目录权限不一致 %1$s\n"
|
||||
"文件系统:%2$o 软件包:%3$o\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: symlink %s does not point to dir\n"
|
||||
msgstr "解压缩:符号链接 %s 没有指向目录\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extract: not overwriting dir with file %s\n"
|
||||
msgstr "解压缩:没有用文件 %s 覆盖目录\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "无法解压缩 %1$s (%2$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "无法将 %1$s 重命名为 %2$s (%3$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s saved as %s\n"
|
||||
msgstr "%1$s 已另存为 %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not install %s as %s (%s)\n"
|
||||
msgstr "无法将 %1$s 安装为 %2$s (%3$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s installed as %s\n"
|
||||
msgstr "%1$s 已安装为 %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "extracting %s as %s.pacnew\n"
|
||||
msgstr "正在解压缩 %1$s 为 %2$s.pacnew\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "无法得到当前的工作目录\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "更新 %s 时出现错误\n"
|
||||
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "安装 %s 时出现错误\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "无法更新数据库记录 %1$s-%2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "无法在缓存中添加记录 '%s' \n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s%s\n"
|
||||
msgstr "无法删除数据库记录 %1$s%2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "数据库记录 '%s' 名字无效\n"
|
||||
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "损坏的数据库记录 '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "无法打开文件 %1$s: %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "%1$s 数据库不一致:名字和软件包中的 %2$s 不一致\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "%1$s 数据库不一致:版本和软件包中的 %2$s 不一致\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "无法解析 %s 中的软件包描述文件\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "%s 中缺少软件包名字\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "%s 中缺少软件包版本号\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "读取软件包 %1$s 发生错误: %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "%s 中缺少软件包元数据\n"
|
||||
|
||||
#, c-format
|
||||
msgid "attempt to re-register the 'local' DB\n"
|
||||
msgstr "尝试重新登记“本地”数据库\n"
|
||||
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "数据库路径未定义\n"
|
||||
|
||||
#, c-format
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "检测到依赖关系环:\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be removed after its %s dependency\n"
|
||||
msgstr "%1$s 将在它 %2$s 的依赖关系之后被删除\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%1$s 将在它 %2$s 的依赖关系之前被安装\n"
|
||||
|
||||
#, c-format
|
||||
msgid "provider package was selected (%s provides %s)\n"
|
||||
msgstr "已选定提供软件包 (%1$s 提供 %2$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "无法解决 \"%1$s\",\"%2$s\" 的一个依赖关系\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "url '%s' 无效\n"
|
||||
|
||||
#, c-format
|
||||
msgid "url scheme not specified, assuming HTTP\n"
|
||||
msgstr "url scheme 未指定,假定为 HTTP\n"
|
||||
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "硬盘"
|
||||
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "无法从 %2$s : %3$s 获取文件 '%1$s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot resume download, starting over\n"
|
||||
msgstr "无法恢复下载,重新开始\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot write to file '%s'\n"
|
||||
msgstr "无法写入文件 '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error downloading '%s': %s\n"
|
||||
msgstr "下载 '%1$s' 时出错: %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "error writing to file '%s': %s\n"
|
||||
msgstr "写入文件 '%1$s' 时出错: %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not chdir to %s\n"
|
||||
msgstr "无法切换目录到 %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "running XferCommand: fork failed!\n"
|
||||
msgstr "正在运行 XferCommand:fork 失败!\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "下载 %s 失败\n"
|
||||
|
||||
#, c-format
|
||||
msgid "out of memory!"
|
||||
msgstr "内存不足!"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected system error"
|
||||
msgstr "未预期的系统错误"
|
||||
|
||||
#, c-format
|
||||
msgid "insufficient privileges"
|
||||
msgstr "权限不充分"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read file"
|
||||
msgstr "无法找到或读取文件"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read directory"
|
||||
msgstr "无法找到或读取目录"
|
||||
|
||||
#, c-format
|
||||
msgid "wrong or NULL argument passed"
|
||||
msgstr "传递了错误的或 NULL 参数"
|
||||
|
||||
#, c-format
|
||||
msgid "library not initialized"
|
||||
msgstr "函数库未初始化"
|
||||
|
||||
#, c-format
|
||||
msgid "library already initialized"
|
||||
msgstr "函数库已初始化"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to lock database"
|
||||
msgstr "无法锁定数据库"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open database"
|
||||
msgstr "无法打开数据库"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create database"
|
||||
msgstr "无法创建数据库"
|
||||
|
||||
#, c-format
|
||||
msgid "database not initialized"
|
||||
msgstr "数据库未初始化"
|
||||
|
||||
#, c-format
|
||||
msgid "database already registered"
|
||||
msgstr "数据库已登记"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find database"
|
||||
msgstr "无法找到数据库"
|
||||
|
||||
#, c-format
|
||||
msgid "could not update database"
|
||||
msgstr "无法更新数据库"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry"
|
||||
msgstr "无法删除数据库记录"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid url for server"
|
||||
msgstr "无效的服务器 url"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction already initialized"
|
||||
msgstr "处理已初始化"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "处理未初始化"
|
||||
|
||||
#, c-format
|
||||
msgid "duplicate target"
|
||||
msgstr "重复的目标"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "处理未准备好"
|
||||
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "处理已放弃"
|
||||
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "操作与处理类型不兼容"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction"
|
||||
msgstr "无法交付处理"
|
||||
|
||||
#, c-format
|
||||
msgid "could not download all files"
|
||||
msgstr "无法下载全部文件"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "无法找到或读取软件包"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "无效的或已损坏的软件包"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "无法打开软件包文件"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot load package data"
|
||||
msgstr "无法加载软件包数据"
|
||||
|
||||
#, c-format
|
||||
msgid "package not installed or lesser version"
|
||||
msgstr "软件包没有安装或版本较低"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "无法为软件包删除全部文件"
|
||||
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "软件包文件名无效"
|
||||
|
||||
#, c-format
|
||||
msgid "no such repository"
|
||||
msgstr "没有该软件库"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid or corrupted delta"
|
||||
msgstr "无效的或已损坏的 delta"
|
||||
|
||||
#, c-format
|
||||
msgid "delta patch failed"
|
||||
msgstr "delta 补丁失败"
|
||||
|
||||
#, c-format
|
||||
msgid "group not found"
|
||||
msgstr "没有找到软件包组"
|
||||
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "无法满足依赖关系"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting dependencies"
|
||||
msgstr "有冲突的依赖关系"
|
||||
|
||||
#, c-format
|
||||
msgid "conflicting files"
|
||||
msgstr "有冲突的文件"
|
||||
|
||||
#, c-format
|
||||
msgid "user aborted the operation"
|
||||
msgstr "用户中断了操作"
|
||||
|
||||
#, c-format
|
||||
msgid "internal error"
|
||||
msgstr "内部错误"
|
||||
|
||||
#, c-format
|
||||
msgid "not confirmed"
|
||||
msgstr "未确认"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid regular expression"
|
||||
msgstr "无效的正则表达式"
|
||||
|
||||
#, c-format
|
||||
msgid "libarchive error"
|
||||
msgstr "libarchive 错误"
|
||||
|
||||
#, c-format
|
||||
msgid "download library error"
|
||||
msgstr "下载函数库出错"
|
||||
|
||||
#, c-format
|
||||
msgid "error invoking external downloader"
|
||||
msgstr "调用外部下载程序时出错"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected error"
|
||||
msgstr "未预期的错误"
|
||||
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "无法在数据库中找到 %s -- 跳过\n"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "无法删除文件 '%1$s': %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "无法删除数据库记录 %1$s-%2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "无法从缓存中删除记录 '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
|
||||
msgstr "%1$s-%2$s:忽略软件包更新(由 %3$s-%4$s 替代)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%1$s:本地(%2$s)比 %3$s 的版本更新 (%4$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%1$s:忽略软件包更新(%2$s => %3$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "repository '%s' not found\n"
|
||||
msgstr "没有找到软件库 '%s'\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%1$s-%2$s 已经为最新 -- 跳过\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%1$s-%2$s 已经为最新 -- 重新安装\n"
|
||||
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "正在降级软件包 %1$s (%2$s => %3$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "检测到未解决的软件包冲突\n"
|
||||
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "正在从目标清单中删除 '%1$s' ,因为它和 '%2$s' 冲突\n"
|
||||
|
||||
#, c-format
|
||||
msgid "command: %s\n"
|
||||
msgstr "命令:%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files from %s\n"
|
||||
msgstr "无法从 %s 获取某些文件\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create removal transaction\n"
|
||||
msgstr "无法生成可撤销处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize the removal transaction\n"
|
||||
msgstr "无法初始化可撤销处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare removal transaction\n"
|
||||
msgstr "无法准备可撤销处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "无法交付可撤销处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create transaction\n"
|
||||
msgstr "无法创建处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not initialize transaction\n"
|
||||
msgstr "无法初始化处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not prepare transaction\n"
|
||||
msgstr "无法准备处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "无法交付处理\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "无法删除锁定文件 %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
|
||||
msgstr "父环境中没有 /bin/sh,正在中断小脚本\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "无法创建临时目录\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "无法复制临时文件到 %1$s (%2$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "无法更改目录到 %1$s (%2$s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "无法 fork 新进程 (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "无法更改根目录 (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not change directory to / (%s)\n"
|
||||
msgstr "无法切换目录到 / (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "call to popen failed (%s)"
|
||||
msgstr "调用 popen 失败 (%s)"
|
||||
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "调用 waitpid 失败 (%s)\n"
|
||||
|
||||
#, c-format
|
||||
msgid "scriptlet failed to execute correctly\n"
|
||||
msgstr "小脚本未能被正确执行\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "无法删除临时目录 %s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "could not open %s: %s\n"
|
||||
msgstr "无法打开 %1$s: %2$s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "没有 %s 缓存存在,正在创建...\n"
|
||||
|
||||
#, c-format
|
||||
msgid "couldn't create package cache, using /tmp instead\n"
|
||||
msgstr "无法创建软件包缓存,正在使用 /tmp 代替\n"
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "alpm_list.h"
|
||||
#include "trans.h"
|
||||
#include "util.h"
|
||||
#include "error.h"
|
||||
#include "log.h"
|
||||
#include "backup.h"
|
||||
#include "package.h"
|
||||
@@ -57,12 +56,11 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
|
||||
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
|
||||
ASSERT(name != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
if(_alpm_pkg_find(name, trans->packages)) {
|
||||
if(_alpm_pkg_find(trans->packages, name)) {
|
||||
RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1);
|
||||
}
|
||||
|
||||
if((info = _alpm_db_scan(db, name)) == NULL) {
|
||||
/* Unimportant - just ignore it if we can't find it */
|
||||
if((info = _alpm_db_get_pkgfromcache(db, name)) == NULL) {
|
||||
_alpm_log(PM_LOG_DEBUG, "could not find %s in database\n", name);
|
||||
RET_ERR(PM_ERR_PKG_NOT_FOUND, -1);
|
||||
}
|
||||
@@ -78,11 +76,68 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
|
||||
}
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "adding %s in the targets list\n", info->name);
|
||||
trans->packages = alpm_list_add(trans->packages, info);
|
||||
trans->packages = alpm_list_add(trans->packages, _alpm_pkg_dup(info));
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void remove_prepare_cascade(pmtrans_t *trans, pmdb_t *db,
|
||||
alpm_list_t *lp)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
while(lp) {
|
||||
alpm_list_t *i;
|
||||
for(i = lp; i; i = i->next) {
|
||||
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
||||
pmpkg_t *info = _alpm_db_get_pkgfromcache(db, miss->target);
|
||||
if(info) {
|
||||
if(!_alpm_pkg_find(trans->packages, alpm_pkg_get_name(info))) {
|
||||
_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n",
|
||||
alpm_pkg_get_name(info));
|
||||
trans->packages = alpm_list_add(trans->packages, _alpm_pkg_dup(info));
|
||||
}
|
||||
} else {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"),
|
||||
miss->target);
|
||||
}
|
||||
}
|
||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||
alpm_list_free(lp);
|
||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void remove_prepare_keep_needed(pmtrans_t *trans, pmdb_t *db,
|
||||
alpm_list_t *lp)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
/* Remove needed packages (which break dependencies) from the target list */
|
||||
while(lp != NULL) {
|
||||
alpm_list_t *i;
|
||||
for(i = lp; i; i = i->next) {
|
||||
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
||||
void *vpkg;
|
||||
pmpkg_t *pkg = _alpm_pkg_find(trans->packages, miss->causingpkg);
|
||||
if(pkg == NULL) {
|
||||
continue;
|
||||
}
|
||||
trans->packages = alpm_list_remove(trans->packages, pkg, _alpm_pkg_cmp,
|
||||
&vpkg);
|
||||
pkg = vpkg;
|
||||
if(pkg) {
|
||||
_alpm_log(PM_LOG_WARNING, "removing %s from the target-list\n",
|
||||
alpm_pkg_get_name(pkg));
|
||||
_alpm_pkg_free(pkg);
|
||||
}
|
||||
}
|
||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||
alpm_list_free(lp);
|
||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
{
|
||||
alpm_list_t *lp;
|
||||
@@ -97,37 +152,30 @@ int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
return(0);
|
||||
}
|
||||
|
||||
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL);
|
||||
if((trans->flags & PM_TRANS_FLAG_RECURSE) && !(trans->flags & PM_TRANS_FLAG_CASCADE)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "finding removable dependencies\n");
|
||||
_alpm_recursedeps(db, trans->packages, trans->flags & PM_TRANS_FLAG_RECURSEALL);
|
||||
}
|
||||
|
||||
if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) {
|
||||
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL);
|
||||
|
||||
_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n");
|
||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||
if(lp != NULL) {
|
||||
|
||||
if(trans->flags & PM_TRANS_FLAG_CASCADE) {
|
||||
while(lp) {
|
||||
alpm_list_t *i;
|
||||
for(i = lp; i; i = i->next) {
|
||||
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
||||
pmpkg_t *info = _alpm_db_scan(db, miss->target);
|
||||
if(info) {
|
||||
if(!_alpm_pkg_find(alpm_pkg_get_name(info), trans->packages)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n",
|
||||
alpm_pkg_get_name(info));
|
||||
trans->packages = alpm_list_add(trans->packages, info);
|
||||
}
|
||||
} else {
|
||||
_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"),
|
||||
miss->target);
|
||||
}
|
||||
}
|
||||
FREELIST(lp);
|
||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||
}
|
||||
remove_prepare_cascade(trans, db, lp);
|
||||
} else if (trans->flags & PM_TRANS_FLAG_UNNEEDED) {
|
||||
/* Remove needed packages (which would break dependencies)
|
||||
* from the target list */
|
||||
remove_prepare_keep_needed(trans, db, lp);
|
||||
} else {
|
||||
if(data) {
|
||||
*data = lp;
|
||||
} else {
|
||||
FREELIST(lp);
|
||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||
alpm_list_free(lp);
|
||||
}
|
||||
RET_ERR(PM_ERR_UNSATISFIED_DEPS, -1);
|
||||
}
|
||||
@@ -136,17 +184,20 @@ int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||
|
||||
/* re-order w.r.t. dependencies */
|
||||
_alpm_log(PM_LOG_DEBUG, "sorting by dependencies\n");
|
||||
lp = _alpm_sortbydeps(trans->packages, PM_TRANS_TYPE_REMOVE);
|
||||
lp = _alpm_sortbydeps(trans->packages, 1);
|
||||
/* free the old alltargs */
|
||||
alpm_list_free(trans->packages);
|
||||
trans->packages = lp;
|
||||
|
||||
if(trans->flags & PM_TRANS_FLAG_RECURSE) {
|
||||
/* -Rcs == -Rc then -Rs */
|
||||
if((trans->flags & PM_TRANS_FLAG_CASCADE) && (trans->flags & PM_TRANS_FLAG_RECURSE)) {
|
||||
_alpm_log(PM_LOG_DEBUG, "finding removable dependencies\n");
|
||||
_alpm_recursedeps(db, trans->packages, 0);
|
||||
_alpm_recursedeps(db, trans->packages, trans->flags & PM_TRANS_FLAG_RECURSEALL);
|
||||
}
|
||||
|
||||
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);
|
||||
if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) {
|
||||
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
@@ -234,6 +285,7 @@ static void unlink_file(pmpkg_t *info, alpm_list_t *lp, pmtrans_t *trans)
|
||||
snprintf(newpath, PATH_MAX, "%s.pacsave", file);
|
||||
rename(file, newpath);
|
||||
_alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), file, newpath);
|
||||
alpm_logaction("warning: %s saved as %s\n", file, newpath);
|
||||
return;
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "transaction is set to NOSAVE, not backing up '%s'\n", file);
|
||||
|
||||
@@ -1,469 +0,0 @@
|
||||
/*
|
||||
* server.c
|
||||
*
|
||||
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <download.h>
|
||||
|
||||
/* libalpm */
|
||||
#include "server.h"
|
||||
#include "alpm_list.h"
|
||||
#include "error.h"
|
||||
#include "log.h"
|
||||
#include "alpm.h"
|
||||
#include "util.h"
|
||||
#include "handle.h"
|
||||
#include "package.h"
|
||||
|
||||
pmserver_t *_alpm_server_new(const char *url)
|
||||
{
|
||||
struct url *u;
|
||||
pmserver_t *server;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
CALLOC(server, 1, sizeof(pmserver_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
u = downloadParseURL(url);
|
||||
if(!u) {
|
||||
_alpm_log(PM_LOG_ERROR, _("url '%s' is invalid, ignoring\n"), url);
|
||||
RET_ERR(PM_ERR_SERVER_BAD_URL, NULL);
|
||||
}
|
||||
if(strlen(u->scheme) == 0) {
|
||||
_alpm_log(PM_LOG_WARNING, _("url scheme not specified, assuming http\n"));
|
||||
strcpy(u->scheme, "http");
|
||||
}
|
||||
|
||||
if(strcmp(u->scheme,"ftp") == 0 && strlen(u->user) == 0) {
|
||||
strcpy(u->user, "anonymous");
|
||||
strcpy(u->pwd, "libalpm@guest");
|
||||
}
|
||||
|
||||
/* remove trailing slashes, just to clean up the rest of the code */
|
||||
for(int i = strlen(u->doc) - 1; u->doc[i] == '/'; --i)
|
||||
u->doc[i] = '\0';
|
||||
|
||||
server->s_url = u;
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
void _alpm_server_free(pmserver_t *server)
|
||||
{
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(server == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* free memory */
|
||||
downloadFreeURL(server->s_url);
|
||||
FREE(server);
|
||||
}
|
||||
|
||||
/* remove filename info from "s_url->doc" and return it */
|
||||
static char *strip_filename(pmserver_t *server)
|
||||
{
|
||||
char *p = NULL, *fname = NULL;
|
||||
if(!server) {
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
p = strrchr(server->s_url->doc, '/');
|
||||
if(p && *(++p)) {
|
||||
fname = strdup(p);
|
||||
_alpm_log(PM_LOG_DEBUG, "stripping '%s' from '%s'\n",
|
||||
fname, server->s_url->doc);
|
||||
*p = 0;
|
||||
}
|
||||
|
||||
/* s_url->doc now contains ONLY path information. return value
|
||||
* if the file information from the original URL */
|
||||
return(fname);
|
||||
}
|
||||
|
||||
/* Return a 'struct url' for this server, for downloading 'filename'. */
|
||||
static struct url *url_for_file(pmserver_t *server, const char *filename)
|
||||
{
|
||||
struct url *ret = NULL;
|
||||
char *doc = NULL;
|
||||
int doclen = 0;
|
||||
|
||||
doclen = strlen(server->s_url->doc) + strlen(filename) + 2;
|
||||
CALLOC(doc, doclen, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
snprintf(doc, doclen, "%s/%s", server->s_url->doc, filename);
|
||||
ret = downloadMakeURL(server->s_url->scheme,
|
||||
server->s_url->host,
|
||||
server->s_url->port,
|
||||
doc,
|
||||
server->s_url->user,
|
||||
server->s_url->pwd);
|
||||
FREE(doc);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Download a list of files from a list of servers
|
||||
* - if one server fails, we try the next one in the list
|
||||
* - if *dl_total is non-NULL, then it will be used as the starting
|
||||
* download amount when TotalDownload is set. It will also be
|
||||
* set to the final download amount for the calling function to use.
|
||||
* - totalsize is the total download size for use when TotalDownload
|
||||
* is set. Use 0 if the total download size is not known.
|
||||
*
|
||||
* RETURN: 0 for successful download, 1 on error
|
||||
*/
|
||||
int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath,
|
||||
alpm_list_t *files, int *dl_total, unsigned long totalsize)
|
||||
{
|
||||
return(_alpm_downloadfiles_forreal(servers, localpath, files, 0, NULL,
|
||||
dl_total, totalsize));
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the real downloadfiles, used directly by sync_synctree() to check
|
||||
* modtimes on remote files.
|
||||
* - if mtime1 is non-NULL, then only download files if they are different
|
||||
* than mtime1.
|
||||
* - if *mtime2 is non-NULL, it will be filled with the mtime of the remote
|
||||
* file.
|
||||
* - if *dl_total is non-NULL, then it will be used as the starting
|
||||
* download amount when TotalDownload is set. It will also be
|
||||
* set to the final download amount for the calling function to use.
|
||||
* - totalsize is the total download size for use when TotalDownload
|
||||
* is set. Use 0 if the total download size is not known.
|
||||
*
|
||||
* RETURN: 0 for successful download
|
||||
* 1 if the mtimes are identical
|
||||
* -1 on error
|
||||
*/
|
||||
int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,
|
||||
alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total,
|
||||
unsigned long totalsize)
|
||||
{
|
||||
int dl_thisfile = 0;
|
||||
alpm_list_t *lp;
|
||||
int done = 0;
|
||||
alpm_list_t *complete = NULL;
|
||||
alpm_list_t *i;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(files == NULL) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
for(i = servers; i && !done; i = i->next) {
|
||||
pmserver_t *server = i->data;
|
||||
|
||||
/* get each file in the list */
|
||||
for(lp = files; lp; lp = lp->next) {
|
||||
struct url *fileurl = NULL;
|
||||
char realfile[PATH_MAX];
|
||||
char output[PATH_MAX];
|
||||
char *fn = (char *)lp->data;
|
||||
char pkgname[PKG_NAME_LEN];
|
||||
|
||||
fileurl = url_for_file(server, fn);
|
||||
if(!fileurl) {
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* pass the raw filename for passing to the callback function */
|
||||
strncpy(pkgname, fn, PKG_NAME_LEN);
|
||||
_alpm_log(PM_LOG_DEBUG, "using '%s' for download progress\n", pkgname);
|
||||
|
||||
snprintf(realfile, PATH_MAX, "%s%s", localpath, fn);
|
||||
snprintf(output, PATH_MAX, "%s%s.part", localpath, fn);
|
||||
|
||||
if(alpm_list_find_str(complete, fn)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!handle->xfercommand || !strcmp(fileurl->scheme, "file")) {
|
||||
FILE *dlf, *localf = NULL;
|
||||
struct url_stat ust;
|
||||
struct stat st;
|
||||
int chk_resume = 0;
|
||||
|
||||
if(stat(output, &st) == 0 && st.st_size > 0) {
|
||||
_alpm_log(PM_LOG_DEBUG, "existing file found, using it\n");
|
||||
fileurl->offset = (off_t)st.st_size;
|
||||
dl_thisfile = st.st_size;
|
||||
if (dl_total != NULL) {
|
||||
*dl_total += st.st_size;
|
||||
}
|
||||
localf = fopen(output, "a");
|
||||
chk_resume = 1;
|
||||
} else {
|
||||
fileurl->offset = (off_t)0;
|
||||
dl_thisfile = 0;
|
||||
}
|
||||
|
||||
/* libdownload does not reset the error code, reset it in
|
||||
* the case of previous errors */
|
||||
downloadLastErrCode = 0;
|
||||
|
||||
/* 10s timeout - TODO make a config option */
|
||||
downloadTimeout = 10000;
|
||||
|
||||
dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));
|
||||
|
||||
if(downloadLastErrCode != 0 || dlf == NULL) {
|
||||
const char *host = _("disk");
|
||||
if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) {
|
||||
host = fileurl->host;
|
||||
}
|
||||
_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
|
||||
fn, host, downloadLastErrString);
|
||||
if(localf != NULL) {
|
||||
fclose(localf);
|
||||
}
|
||||
/* try the next server */
|
||||
downloadFreeURL(fileurl);
|
||||
continue;
|
||||
} else {
|
||||
_alpm_log(PM_LOG_DEBUG, "connected to %s successfully\n", fileurl->host);
|
||||
}
|
||||
|
||||
if(ust.mtime && mtime1 && ust.mtime == mtime1) {
|
||||
_alpm_log(PM_LOG_DEBUG, "mtimes are identical, skipping %s\n", fn);
|
||||
complete = alpm_list_add(complete, fn);
|
||||
if(localf != NULL) {
|
||||
fclose(localf);
|
||||
}
|
||||
if(dlf != NULL) {
|
||||
fclose(dlf);
|
||||
}
|
||||
downloadFreeURL(fileurl);
|
||||
return(1);
|
||||
}
|
||||
|
||||
if(ust.mtime && mtime2) {
|
||||
*mtime2 = ust.mtime;
|
||||
}
|
||||
|
||||
if(chk_resume && fileurl->offset == 0) {
|
||||
_alpm_log(PM_LOG_WARNING, _("cannot resume download, starting over\n"));
|
||||
if(localf != NULL) {
|
||||
fclose(localf);
|
||||
localf = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if(localf == NULL) {
|
||||
_alpm_rmrf(output);
|
||||
fileurl->offset = (off_t)0;
|
||||
dl_thisfile = 0;
|
||||
localf = fopen(output, "w");
|
||||
if(localf == NULL) { /* still null? */
|
||||
_alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'\n"), output);
|
||||
if(dlf != NULL) {
|
||||
fclose(dlf);
|
||||
}
|
||||
downloadFreeURL(fileurl);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Progress 0 - initialize */
|
||||
if(handle->dlcb) {
|
||||
handle->dlcb(pkgname, 0, ust.size, dl_total ? *dl_total : 0,
|
||||
totalsize);
|
||||
}
|
||||
|
||||
int nread = 0;
|
||||
char buffer[PM_DLBUF_LEN];
|
||||
while((nread = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) {
|
||||
if(ferror(dlf)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s\n"),
|
||||
fn, downloadLastErrString);
|
||||
fclose(localf);
|
||||
fclose(dlf);
|
||||
downloadFreeURL(fileurl);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
int nwritten = 0;
|
||||
while(nwritten < nread) {
|
||||
nwritten += fwrite(buffer, 1, (nread - nwritten), localf);
|
||||
if(ferror(localf)) {
|
||||
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
|
||||
realfile, strerror(errno));
|
||||
fclose(localf);
|
||||
fclose(dlf);
|
||||
downloadFreeURL(fileurl);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if(nwritten != nread) {
|
||||
|
||||
}
|
||||
dl_thisfile += nread;
|
||||
if (dl_total != NULL) {
|
||||
*dl_total += nread;
|
||||
}
|
||||
|
||||
if(handle->dlcb) {
|
||||
handle->dlcb(pkgname, dl_thisfile, ust.size,
|
||||
dl_total ? *dl_total : 0, totalsize);
|
||||
}
|
||||
}
|
||||
|
||||
downloadFreeURL(fileurl);
|
||||
fclose(localf);
|
||||
fclose(dlf);
|
||||
rename(output, realfile);
|
||||
complete = alpm_list_add(complete, fn);
|
||||
} else {
|
||||
int ret;
|
||||
int usepart = 0;
|
||||
char *ptr1, *ptr2;
|
||||
char origCmd[PATH_MAX];
|
||||
char parsedCmd[PATH_MAX] = "";
|
||||
char url[PATH_MAX];
|
||||
char cwd[PATH_MAX];
|
||||
|
||||
/* build the full download url */
|
||||
snprintf(url, PATH_MAX, "%s://%s%s", fileurl->scheme,
|
||||
fileurl->host, fileurl->doc);
|
||||
/* we don't need this anymore */
|
||||
downloadFreeURL(fileurl);
|
||||
|
||||
/* replace all occurrences of %o with fn.part */
|
||||
strncpy(origCmd, handle->xfercommand, sizeof(origCmd));
|
||||
ptr1 = origCmd;
|
||||
while((ptr2 = strstr(ptr1, "%o"))) {
|
||||
usepart = 1;
|
||||
ptr2[0] = '\0';
|
||||
strcat(parsedCmd, ptr1);
|
||||
strcat(parsedCmd, output);
|
||||
ptr1 = ptr2 + 2;
|
||||
}
|
||||
strcat(parsedCmd, ptr1);
|
||||
/* replace all occurrences of %u with the download URL */
|
||||
strncpy(origCmd, parsedCmd, sizeof(origCmd));
|
||||
parsedCmd[0] = '\0';
|
||||
ptr1 = origCmd;
|
||||
while((ptr2 = strstr(ptr1, "%u"))) {
|
||||
ptr2[0] = '\0';
|
||||
strcat(parsedCmd, ptr1);
|
||||
strcat(parsedCmd, url);
|
||||
ptr1 = ptr2 + 2;
|
||||
}
|
||||
strcat(parsedCmd, ptr1);
|
||||
/* cwd to the download directory */
|
||||
getcwd(cwd, PATH_MAX);
|
||||
if(chdir(localpath)) {
|
||||
_alpm_log(PM_LOG_WARNING, _("could not chdir to %s\n"), localpath);
|
||||
return(PM_ERR_CONNECT_FAILED);
|
||||
}
|
||||
/* execute the parsed command via /bin/sh -c */
|
||||
_alpm_log(PM_LOG_DEBUG, "running command: %s\n", parsedCmd);
|
||||
ret = system(parsedCmd);
|
||||
if(ret == -1) {
|
||||
_alpm_log(PM_LOG_WARNING, _("running XferCommand: fork failed!\n"));
|
||||
return(PM_ERR_FORK_FAILED);
|
||||
} else if(ret != 0) {
|
||||
/* download failed */
|
||||
_alpm_log(PM_LOG_DEBUG, "XferCommand command returned non-zero status code (%d)\n", ret);
|
||||
} else {
|
||||
/* download was successful */
|
||||
complete = alpm_list_add(complete, fn);
|
||||
if(usepart) {
|
||||
rename(output, realfile);
|
||||
}
|
||||
}
|
||||
chdir(cwd);
|
||||
}
|
||||
}
|
||||
|
||||
if(alpm_list_count(complete) == alpm_list_count(files)) {
|
||||
done = 1;
|
||||
}
|
||||
}
|
||||
alpm_list_free(complete);
|
||||
|
||||
return(done ? 0 : -1);
|
||||
}
|
||||
|
||||
/** Fetch a remote pkg.
|
||||
* @param url URL of the package to download
|
||||
* @return the downloaded filepath on success, NULL on error
|
||||
* @addtogroup alpm_misc
|
||||
*/
|
||||
char SYMEXPORT *alpm_fetch_pkgurl(const char *url)
|
||||
{
|
||||
pmserver_t *server;
|
||||
char *filename, *filepath;
|
||||
const char *cachedir;
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(strstr(url, "://") == NULL) {
|
||||
_alpm_log(PM_LOG_DEBUG, "Invalid URL passed to alpm_fetch_pkgurl\n");
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
server = _alpm_server_new(url);
|
||||
if(!server) {
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/* strip path information from the filename */
|
||||
filename = strip_filename(server);
|
||||
if(!filename) {
|
||||
_alpm_log(PM_LOG_ERROR, _("URL does not contain a file for download\n"));
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/* find a valid cache dir to download to */
|
||||
cachedir = _alpm_filecache_setup();
|
||||
|
||||
/* TODO this seems like needless complexity just to download one file */
|
||||
alpm_list_t *servers = alpm_list_add(NULL, server);
|
||||
alpm_list_t *files = alpm_list_add(NULL, filename);
|
||||
|
||||
/* download the file */
|
||||
if(_alpm_downloadfiles(servers, cachedir, files, NULL, 0)) {
|
||||
_alpm_log(PM_LOG_WARNING, _("failed to download %s\n"), url);
|
||||
return(NULL);
|
||||
}
|
||||
_alpm_log(PM_LOG_DEBUG, "successfully downloaded %s\n", filename);
|
||||
alpm_list_free(files);
|
||||
alpm_list_free(servers);
|
||||
_alpm_server_free(server);
|
||||
|
||||
/* we should be able to find the file the second time around */
|
||||
filepath = _alpm_filecache_find(filename);
|
||||
return(filepath);
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* server.h
|
||||
*
|
||||
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef _ALPM_SERVER_H
|
||||
#define _ALPM_SERVER_H
|
||||
|
||||
#include "alpm_list.h"
|
||||
#include "alpm.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <download.h>
|
||||
|
||||
/* Servers */
|
||||
struct __pmserver_t {
|
||||
/* useless abstraction now? */
|
||||
struct url *s_url;
|
||||
};
|
||||
|
||||
#define PM_DLBUF_LEN (1024 * 10)
|
||||
|
||||
pmserver_t *_alpm_server_new(const char *url);
|
||||
void _alpm_server_free(pmserver_t *server);
|
||||
int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath,
|
||||
alpm_list_t *files, int *dl_total, unsigned long totalsize);
|
||||
int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,
|
||||
alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total,
|
||||
unsigned long totalsize);
|
||||
|
||||
#endif /* _ALPM_SERVER_H */
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
1145
lib/libalpm/sync.c
1145
lib/libalpm/sync.c
File diff suppressed because it is too large
Load Diff
@@ -25,12 +25,12 @@
|
||||
|
||||
/* Sync package */
|
||||
struct __pmsyncpkg_t {
|
||||
pmsynctype_t type;
|
||||
pmpkgreason_t newreason;
|
||||
pmpkg_t *pkg;
|
||||
void *data;
|
||||
alpm_list_t *removes;
|
||||
};
|
||||
|
||||
pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data);
|
||||
pmsyncpkg_t *_alpm_sync_new(pmpkgreason_t newreason, pmpkg_t *spkg, alpm_list_t *removes);
|
||||
void _alpm_sync_free(pmsyncpkg_t *data);
|
||||
|
||||
int _alpm_sync_sysupgrade(pmtrans_t *trans,
|
||||
|
||||
@@ -25,17 +25,16 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* libalpm */
|
||||
#include "trans.h"
|
||||
#include "alpm_list.h"
|
||||
#include "error.h"
|
||||
#include "package.h"
|
||||
#include "util.h"
|
||||
#include "log.h"
|
||||
@@ -205,7 +204,7 @@ int SYMEXPORT alpm_trans_release()
|
||||
|
||||
/* unlock db */
|
||||
if(handle->lckfd != -1) {
|
||||
close(handle->lckfd);
|
||||
while(close(handle->lckfd) == -1 && errno == EINTR);
|
||||
handle->lckfd = -1;
|
||||
}
|
||||
if(_alpm_lckrm()) {
|
||||
@@ -228,7 +227,6 @@ pmtrans_t *_alpm_trans_new()
|
||||
|
||||
CALLOC(trans, 1, sizeof(pmtrans_t), RET_ERR(PM_ERR_MEMORY, NULL));
|
||||
|
||||
trans->targets = NULL;
|
||||
trans->packages = NULL;
|
||||
trans->skip_add = NULL;
|
||||
trans->skip_remove = NULL;
|
||||
@@ -250,7 +248,6 @@ void _alpm_trans_free(pmtrans_t *trans)
|
||||
return;
|
||||
}
|
||||
|
||||
FREELIST(trans->targets);
|
||||
if(trans->type == PM_TRANS_TYPE_SYNC) {
|
||||
alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_sync_free);
|
||||
} else {
|
||||
@@ -307,13 +304,7 @@ int _alpm_trans_addtarget(pmtrans_t *trans, char *target)
|
||||
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
|
||||
ASSERT(target != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
if(alpm_list_find_str(trans->targets, target)) {
|
||||
return(0);
|
||||
//RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1);
|
||||
}
|
||||
|
||||
switch(trans->type) {
|
||||
case PM_TRANS_TYPE_ADD:
|
||||
case PM_TRANS_TYPE_UPGRADE:
|
||||
if(_alpm_add_loadtarget(trans, handle->db_local, target) == -1) {
|
||||
/* pm_errno is set by _alpm_add_loadtarget() */
|
||||
@@ -335,8 +326,6 @@ int _alpm_trans_addtarget(pmtrans_t *trans, char *target)
|
||||
break;
|
||||
}
|
||||
|
||||
trans->targets = alpm_list_add(trans->targets, strdup(target));
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -357,7 +346,6 @@ int _alpm_trans_prepare(pmtrans_t *trans, alpm_list_t **data)
|
||||
}
|
||||
|
||||
switch(trans->type) {
|
||||
case PM_TRANS_TYPE_ADD:
|
||||
case PM_TRANS_TYPE_UPGRADE:
|
||||
if(_alpm_add_prepare(trans, handle->db_local, data) == -1) {
|
||||
/* pm_errno is set by _alpm_add_prepare() */
|
||||
@@ -402,7 +390,6 @@ int _alpm_trans_commit(pmtrans_t *trans, alpm_list_t **data)
|
||||
trans->state = STATE_COMMITING;
|
||||
|
||||
switch(trans->type) {
|
||||
case PM_TRANS_TYPE_ADD:
|
||||
case PM_TRANS_TYPE_UPGRADE:
|
||||
if(_alpm_add_commit(trans, handle->db_local) == -1) {
|
||||
/* pm_errno is set by _alpm_add_commit() */
|
||||
@@ -463,7 +450,6 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
|
||||
char tmpdir[PATH_MAX];
|
||||
char cwd[PATH_MAX];
|
||||
char *scriptpath;
|
||||
struct stat buf;
|
||||
pid_t pid;
|
||||
int clean_tmpdir = 0;
|
||||
int restore_cwd = 0;
|
||||
@@ -471,14 +457,14 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
|
||||
|
||||
ALPM_LOG_FUNC;
|
||||
|
||||
if(stat(installfn, &buf)) {
|
||||
if(access(installfn, R_OK)) {
|
||||
/* not found */
|
||||
_alpm_log(PM_LOG_DEBUG, "scriptlet '%s' not found\n", installfn);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* NOTE: popen will use the PARENT's /bin/sh, not the chroot's */
|
||||
if(stat("/bin/sh", &buf)) {
|
||||
if(access("/bin/sh", X_OK)) {
|
||||
/* not found */
|
||||
_alpm_log(PM_LOG_ERROR, _("No /bin/sh in parent environment, aborting scriptlet\n"));
|
||||
return(0);
|
||||
@@ -486,8 +472,8 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
|
||||
|
||||
/* creates a directory in $root/tmp/ for copying/extracting the scriptlet */
|
||||
snprintf(tmpdir, PATH_MAX, "%stmp/", root);
|
||||
if(stat(tmpdir, &buf)) {
|
||||
_alpm_makepath(tmpdir);
|
||||
if(access(tmpdir, F_OK) != 0) {
|
||||
_alpm_makepath_mode(tmpdir, 01777);
|
||||
}
|
||||
snprintf(tmpdir, PATH_MAX, "%stmp/alpm_XXXXXX", root);
|
||||
if(mkdtemp(tmpdir) == NULL) {
|
||||
@@ -574,8 +560,7 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
|
||||
if(!pipe) {
|
||||
_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)"),
|
||||
strerror(errno));
|
||||
retval = 1;
|
||||
goto cleanup;
|
||||
exit(1);
|
||||
}
|
||||
while(!feof(pipe)) {
|
||||
char line[PATH_MAX];
|
||||
@@ -584,12 +569,13 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
|
||||
alpm_logaction("%s", line);
|
||||
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL);
|
||||
}
|
||||
exit(0);
|
||||
retval = pclose(pipe);
|
||||
exit(WEXITSTATUS(retval));
|
||||
} else {
|
||||
/* this code runs for the parent only (wait on the child) */
|
||||
pid_t retpid;
|
||||
int status;
|
||||
retpid = waitpid(pid, &status, 0);
|
||||
while((retpid = waitpid(pid, &status, 0)) == -1 && errno == EINTR);
|
||||
if(retpid == -1) {
|
||||
_alpm_log(PM_LOG_ERROR, _("call to waitpid failed (%s)\n"),
|
||||
strerror(errno));
|
||||
@@ -636,15 +622,6 @@ unsigned int SYMEXPORT alpm_trans_get_flags()
|
||||
return handle->trans->flags;
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT * alpm_trans_get_targets()
|
||||
{
|
||||
/* Sanity checks */
|
||||
ASSERT(handle != NULL, return(NULL));
|
||||
ASSERT(handle->trans != NULL, return(NULL));
|
||||
|
||||
return handle->trans->targets;
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT * alpm_trans_get_pkgs()
|
||||
{
|
||||
/* Sanity checks */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user