forked from mirrors/pacman
		
	Compare commits
	
		
			743 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					aba58e95ab | ||
| 
						 | 
					e8db103122 | ||
| 
						 | 
					b2dcacb5aa | ||
| 
						 | 
					a5ef0e072a | ||
| 
						 | 
					ac37e92449 | ||
| 
						 | 
					44359218ea | ||
| 
						 | 
					bc83ff76c6 | ||
| 
						 | 
					4eb1469765 | ||
| 
						 | 
					cfc4c24db2 | ||
| 
						 | 
					bf9249e929 | ||
| 
						 | 
					4cadee4f08 | ||
| 
						 | 
					fc29d0c990 | ||
| 
						 | 
					9a0122982c | ||
| 
						 | 
					433c52bb91 | ||
| 
						 | 
					78e92b1d02 | ||
| 
						 | 
					05533b8b11 | ||
| 
						 | 
					00c26338de | ||
| 
						 | 
					684047a764 | ||
| 
						 | 
					e65d82afa1 | ||
| 
						 | 
					734aa1ce59 | ||
| 
						 | 
					4e643a3dd7 | ||
| 
						 | 
					08c535e262 | ||
| 
						 | 
					8fdab1e1f0 | ||
| 
						 | 
					b9c6b41387 | ||
| 
						 | 
					04c31828b6 | ||
| 
						 | 
					44272ca0c8 | ||
| 
						 | 
					3a6ed11428 | ||
| 
						 | 
					9b086d8b9e | ||
| 
						 | 
					fb1936bc19 | ||
| 
						 | 
					2f0fc0decb | ||
| 
						 | 
					5753c12e7b | ||
| 
						 | 
					7f3a20612e | ||
| 
						 | 
					fb97d325a5 | ||
| 
						 | 
					2013d06266 | ||
| 
						 | 
					a8ddc7618f | ||
| 
						 | 
					597118ddd7 | ||
| 
						 | 
					6fa5f2075a | ||
| 
						 | 
					30c4d53ce5 | ||
| 
						 | 
					1d19f0896c | ||
| 
						 | 
					ca6ef852f9 | ||
| 
						 | 
					4b21504ffc | ||
| 
						 | 
					cf669eda9c | ||
| 
						 | 
					1c4596b4be | ||
| 
						 | 
					344ced22c3 | ||
| 
						 | 
					60b6cde637 | ||
| 
						 | 
					5d15bb68f7 | ||
| 
						 | 
					45f90de0eb | ||
| 
						 | 
					bfd6817112 | ||
| 
						 | 
					a3ecbec6b5 | ||
| 
						 | 
					8ebc07744a | ||
| 
						 | 
					2e043aae36 | ||
| 
						 | 
					41a55d4eff | ||
| 
						 | 
					5dc0b80c26 | ||
| 
						 | 
					104daa16a6 | ||
| 
						 | 
					caa0f2205a | ||
| 
						 | 
					68c10690ea | ||
| 
						 | 
					8d7764abae | ||
| 
						 | 
					6092dda177 | ||
| 
						 | 
					e72cce352a | ||
| 
						 | 
					621aa26e26 | ||
| 
						 | 
					b312c820c8 | ||
| 
						 | 
					617e7d512f | ||
| 
						 | 
					c72b4543b6 | ||
| 
						 | 
					be7266155f | ||
| 
						 | 
					a21d1f99b8 | ||
| 
						 | 
					6af163dd79 | ||
| 
						 | 
					a89eae99f6 | ||
| 
						 | 
					6d2930cc5a | ||
| 
						 | 
					21fa09349b | ||
| 
						 | 
					68813ca986 | ||
| 
						 | 
					8c8fa2d82c | ||
| 
						 | 
					8bbaf045b9 | ||
| 
						 | 
					01f9ae63e7 | ||
| 
						 | 
					02acf65ef3 | ||
| 
						 | 
					b3a5535360 | ||
| 
						 | 
					f250b034b4 | ||
| 
						 | 
					ef500b44ce | ||
| 
						 | 
					04d5c4294a | ||
| 
						 | 
					aa579b8438 | ||
| 
						 | 
					19b8b63885 | ||
| 
						 | 
					e61ab1536f | ||
| 
						 | 
					13b281d743 | ||
| 
						 | 
					9af9c0f328 | ||
| 
						 | 
					f4ecc908ec | ||
| 
						 | 
					c520d38451 | ||
| 
						 | 
					1b4135ca5d | ||
| 
						 | 
					6360fe0100 | ||
| 
						 | 
					30e2496775 | ||
| 
						 | 
					35b9dfc380 | ||
| 
						 | 
					c301d6aa25 | ||
| 
						 | 
					0bf340f73c | ||
| 
						 | 
					882bff36ac | ||
| 
						 | 
					f89f7e136b | ||
| 
						 | 
					212ea8a9ed | ||
| 
						 | 
					a812ad4ea4 | ||
| 
						 | 
					1bbb34365c | ||
| 
						 | 
					1d8d932fa6 | ||
| 
						 | 
					783e710839 | ||
| 
						 | 
					c5d9b999c7 | ||
| 
						 | 
					4a582fac2a | ||
| 
						 | 
					86cd72573b | ||
| 
						 | 
					80caeabce0 | ||
| 
						 | 
					250e66e57b | ||
| 
						 | 
					5e32928a42 | ||
| 
						 | 
					de44a0f474 | ||
| 
						 | 
					20017354f7 | ||
| 
						 | 
					a783f3fbf1 | ||
| 
						 | 
					f569c4a042 | ||
| 
						 | 
					ed848b1c54 | ||
| 
						 | 
					c27904661e | ||
| 
						 | 
					10584ec8ea | ||
| 
						 | 
					db3e166503 | ||
| 
						 | 
					d70465decc | ||
| 
						 | 
					4b78852f7e | ||
| 
						 | 
					aefb4e0fa5 | ||
| 
						 | 
					391952600d | ||
| 
						 | 
					634304feae | ||
| 
						 | 
					56fd24ecf8 | ||
| 
						 | 
					77efd51216 | ||
| 
						 | 
					93ca155b48 | ||
| 
						 | 
					101c16b3eb | ||
| 
						 | 
					52d184dae8 | ||
| 
						 | 
					63fc93607b | ||
| 
						 | 
					d15d4f923d | ||
| 
						 | 
					6fb0c5abd7 | ||
| 
						 | 
					20ab91fb79 | ||
| 
						 | 
					afb2f39291 | ||
| 
						 | 
					e37ecbe8a4 | ||
| 
						 | 
					22a4616550 | ||
| 
						 | 
					cb8aee58eb | ||
| 
						 | 
					3cb4eaef4f | ||
| 
						 | 
					f385242f99 | ||
| 
						 | 
					5fcc9ae7f4 | ||
| 
						 | 
					442b91a5dd | ||
| 
						 | 
					deff57ce8b | ||
| 
						 | 
					7370fd595b | ||
| 
						 | 
					4c27a776bd | ||
| 
						 | 
					7a8ba5a978 | ||
| 
						 | 
					7df0d048d1 | ||
| 
						 | 
					0c614c181e | ||
| 
						 | 
					91d43ba4b4 | ||
| 
						 | 
					59b4725bbb | ||
| 
						 | 
					a556bc57fc | ||
| 
						 | 
					bbcf96230a | ||
| 
						 | 
					89685bdb29 | ||
| 
						 | 
					994804f20e | ||
| 
						 | 
					f8bb69c1d2 | ||
| 
						 | 
					9fa18d9a4b | ||
| 
						 | 
					c8beffa790 | ||
| 
						 | 
					9519d22df7 | ||
| 
						 | 
					de97282fbd | ||
| 
						 | 
					36863b968f | ||
| 
						 | 
					687f04ab46 | ||
| 
						 | 
					a864a50bc6 | ||
| 
						 | 
					d8d9ab8c87 | ||
| 
						 | 
					4458f71851 | ||
| 
						 | 
					b4e1365657 | ||
| 
						 | 
					8c09c19139 | ||
| 
						 | 
					f09f82ee59 | ||
| 
						 | 
					b3c67a195f | ||
| 
						 | 
					2268981ebf | ||
| 
						 | 
					9d661240fe | ||
| 
						 | 
					f57f8d3386 | ||
| 
						 | 
					0268550401 | ||
| 
						 | 
					a309a016bf | ||
| 
						 | 
					c8a41b7d6d | ||
| 
						 | 
					c590ac0997 | ||
| 
						 | 
					1c4633ea2c | ||
| 
						 | 
					6c4d702cb1 | ||
| 
						 | 
					e7daa59f84 | ||
| 
						 | 
					e515d89969 | ||
| 
						 | 
					dce7aa8569 | ||
| 
						 | 
					48b209d612 | ||
| 
						 | 
					14c1a4423e | ||
| 
						 | 
					eb1775e485 | ||
| 
						 | 
					04c2b9d4ed | ||
| 
						 | 
					ea84819bbb | ||
| 
						 | 
					34e1413d75 | ||
| 
						 | 
					14230869e6 | ||
| 
						 | 
					eab9684837 | ||
| 
						 | 
					c794661f1e | ||
| 
						 | 
					8929769902 | ||
| 
						 | 
					350c3eb6ec | ||
| 
						 | 
					472e51b975 | ||
| 
						 | 
					fba5771fa4 | ||
| 
						 | 
					5bc23bc05d | ||
| 
						 | 
					3d49d88009 | ||
| 
						 | 
					e946ee7745 | ||
| 
						 | 
					21b8a5418d | ||
| 
						 | 
					708ce1480f | ||
| 
						 | 
					9804911c5f | ||
| 
						 | 
					08034ceb17 | ||
| 
						 | 
					219cb2eaac | ||
| 
						 | 
					a9f030e84c | ||
| 
						 | 
					7a3a718c7a | ||
| 
						 | 
					e3a06961f6 | ||
| 
						 | 
					d7345da5ba | ||
| 
						 | 
					b369f71fd6 | ||
| 
						 | 
					1191303f8b | ||
| 
						 | 
					e9ca40b56e | ||
| 
						 | 
					3d6da93093 | ||
| 
						 | 
					cb7337eb64 | ||
| 
						 | 
					4da70d800a | ||
| 
						 | 
					a888f377a5 | ||
| 
						 | 
					8017b0bb8e | ||
| 
						 | 
					4ec846f5ac | ||
| 
						 | 
					94c2830572 | ||
| 
						 | 
					0501d340cd | ||
| 
						 | 
					c6bcdf4dc7 | ||
| 
						 | 
					9f5e1dc8cd | ||
| 
						 | 
					cebe36c42c | ||
| 
						 | 
					301fe17f57 | ||
| 
						 | 
					6f9539aefb | ||
| 
						 | 
					997a611fa4 | ||
| 
						 | 
					162e77ffdc | ||
| 
						 | 
					a2cbccb8c7 | ||
| 
						 | 
					c850786e43 | ||
| 
						 | 
					3acc265f9d | ||
| 
						 | 
					03a63e01a5 | ||
| 
						 | 
					024012649f | ||
| 
						 | 
					93d47ebbc0 | ||
| 
						 | 
					c2dc05c065 | ||
| 
						 | 
					fb18679a00 | ||
| 
						 | 
					792ee97645 | ||
| 
						 | 
					a30bf868ca | ||
| 
						 | 
					1cc8ad6112 | ||
| 
						 | 
					8f26bb9052 | ||
| 
						 | 
					9a7f68317a | ||
| 
						 | 
					774c252753 | ||
| 
						 | 
					1b7ff7a636 | ||
| 
						 | 
					bb9b19a6c4 | ||
| 
						 | 
					b55f478042 | ||
| 
						 | 
					a73ad4f0e3 | ||
| 
						 | 
					b3169a5687 | ||
| 
						 | 
					e49adbea4c | ||
| 
						 | 
					f8b689d48e | ||
| 
						 | 
					c31fcfd833 | ||
| 
						 | 
					cb03817ee8 | ||
| 
						 | 
					bd2de5cdf6 | ||
| 
						 | 
					2f59996c54 | ||
| 
						 | 
					f4651c49af | ||
| 
						 | 
					751d37e749 | ||
| 
						 | 
					08980fb4bc | ||
| 
						 | 
					cc7f3b705e | ||
| 
						 | 
					89b0a76b3c | ||
| 
						 | 
					bd628274cc | ||
| 
						 | 
					9ae7eb1292 | ||
| 
						 | 
					818fae320f | ||
| 
						 | 
					69be73f68c | ||
| 
						 | 
					78cf32e194 | ||
| 
						 | 
					59776ef306 | ||
| 
						 | 
					b373b1d16b | ||
| 
						 | 
					61c6552862 | ||
| 
						 | 
					a1f7c83dbf | ||
| 
						 | 
					6d8a6aef09 | ||
| 
						 | 
					b99bebc008 | ||
| 
						 | 
					a50b067470 | ||
| 
						 | 
					346139298b | ||
| 
						 | 
					f7192b5958 | ||
| 
						 | 
					9394f229a0 | ||
| 
						 | 
					43f9eb1aa9 | ||
| 
						 | 
					8d4e1e6754 | ||
| 
						 | 
					314b4462d2 | ||
| 
						 | 
					c4b9991258 | ||
| 
						 | 
					2890114600 | ||
| 
						 | 
					8d33dcb81c | ||
| 
						 | 
					cd51abf0c8 | ||
| 
						 | 
					2e431e1cc3 | ||
| 
						 | 
					a63aeed562 | ||
| 
						 | 
					2f5d792725 | ||
| 
						 | 
					1e656c0a6a | ||
| 
						 | 
					50e3dc02bf | ||
| 
						 | 
					d1fec15d81 | ||
| 
						 | 
					d24592cbcd | ||
| 
						 | 
					fa02a71abd | ||
| 
						 | 
					91a013a879 | ||
| 
						 | 
					f1f8f0e1c2 | ||
| 
						 | 
					30851a24ff | ||
| 
						 | 
					f0e1846b51 | ||
| 
						 | 
					d7e502a467 | ||
| 
						 | 
					927ce2b7a5 | ||
| 
						 | 
					ce3d70aa99 | ||
| 
						 | 
					f9be2334f7 | ||
| 
						 | 
					18452a6c51 | ||
| 
						 | 
					da933c223e | ||
| 
						 | 
					242e9e90f4 | ||
| 
						 | 
					95ea6fb3c1 | ||
| 
						 | 
					1c47500ea6 | ||
| 
						 | 
					afac773d19 | ||
| 
						 | 
					8263bd0cc2 | ||
| 
						 | 
					d6f62ba22d | ||
| 
						 | 
					d05882db9e | ||
| 
						 | 
					0701356260 | ||
| 
						 | 
					9dbe5c9d1e | ||
| 
						 | 
					a06d0de104 | ||
| 
						 | 
					24d7c6a372 | ||
| 
						 | 
					ece3d3606a | ||
| 
						 | 
					81853893a5 | ||
| 
						 | 
					eeb3c6868c | ||
| 
						 | 
					cfc52dad98 | ||
| 
						 | 
					49c58ce9db | ||
| 
						 | 
					08b0fb856d | ||
| 
						 | 
					6f38cedd8d | ||
| 
						 | 
					a4100b3847 | ||
| 
						 | 
					14203d77f4 | ||
| 
						 | 
					ec928faad3 | ||
| 
						 | 
					4b183bf9a9 | ||
| 
						 | 
					7e8f1469c4 | ||
| 
						 | 
					68e59ecbaf | ||
| 
						 | 
					91eeee08de | ||
| 
						 | 
					05d23059fd | ||
| 
						 | 
					f56d763547 | ||
| 
						 | 
					8f99f75e6e | ||
| 
						 | 
					4b4ad18348 | ||
| 
						 | 
					b0b5dabf1b | ||
| 
						 | 
					31c7e82a51 | ||
| 
						 | 
					496b687c3d | ||
| 
						 | 
					baf5852555 | ||
| 
						 | 
					8146f6f1c6 | ||
| 
						 | 
					adc4078b87 | ||
| 
						 | 
					7865fb9af4 | ||
| 
						 | 
					3ff7701e89 | ||
| 
						 | 
					b3033a59e9 | ||
| 
						 | 
					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 | ||
| 
						 | 
					f6785dcb89 | ||
| 
						 | 
					38e981fab3 | ||
| 
						 | 
					521de7ceed | ||
| 
						 | 
					4f26701793 | ||
| 
						 | 
					435ec29bc7 | ||
| 
						 | 
					26f4993e1d | ||
| 
						 | 
					2630556bde | ||
| 
						 | 
					112caad838 | ||
| 
						 | 
					3e133524a5 | ||
| 
						 | 
					ccc1c73152 | 
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
*.py  diff=python
 | 
			
		||||
							
								
								
									
										2
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -11,6 +11,6 @@ James Rosten <seinfeld90@gmail.com>
 | 
			
		||||
Roman Kyrylych <Roman.Kyrylych@gmail.com>
 | 
			
		||||
Andrew Fyfe <andrew@neptune-one.net>
 | 
			
		||||
Chantry Xavier <shiningxc@gmail.com>
 | 
			
		||||
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
 | 
			
		||||
Nagy Gabor <ngaba@bibl.u-szeged.hu>
 | 
			
		||||
Nathan Jones <nathanj@insightbb.com>
 | 
			
		||||
Allan McRae <mcrae_allan@hotmail.com>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								INSTALL
									
									
									
									
									
								
							@@ -10,10 +10,19 @@ unlimited permission to copy, distribute and modify it.
 | 
			
		||||
Basic Installation
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
You will need to build and install two libraries before you can
 | 
			
		||||
properly build pacman.
 | 
			
		||||
 | 
			
		||||
libarchive
 | 
			
		||||
http://code.google.com/p/libarchive/
 | 
			
		||||
 | 
			
		||||
libfetch
 | 
			
		||||
ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/libfetch/README.html
 | 
			
		||||
 | 
			
		||||
Briefly, the shell commands `./configure; make; make install' should
 | 
			
		||||
configure, build, and install this package.  The following
 | 
			
		||||
more-detailed instructions are generic; see the `README' file for
 | 
			
		||||
instructions specific to this package.
 | 
			
		||||
instructions are generic. Run `./configure --help` for specific
 | 
			
		||||
options.
 | 
			
		||||
 | 
			
		||||
   The `configure' shell script attempts to guess correct values for
 | 
			
		||||
various system-dependent variables used during compilation.  It uses
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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 PKGBUILD-split.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:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										175
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,5 +1,176 @@
 | 
			
		||||
VERSION         DESCRIPTION
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
3.3.0         - xdelta: many fixes and improvements
 | 
			
		||||
                - new pkgdelta script to create deltas
 | 
			
		||||
                - repo-add can add both deltas and packages to a database
 | 
			
		||||
              - xz archive format supported for packages and databases
 | 
			
		||||
              - in case of unresolvable packages, pacman now asks
 | 
			
		||||
                if they should be skipped instead of aborting
 | 
			
		||||
              - -Suu synchronizes all packages with the version from the
 | 
			
		||||
                repository (including upgrade and downgrade)
 | 
			
		||||
              - replace libdownload dependency by the original libfetch
 | 
			
		||||
              - better support of -q/--quiet flag with -Qo and -Ql
 | 
			
		||||
              - -Sp works without root (FS#8905)
 | 
			
		||||
              - fix a bug where the replacement of a package failed because
 | 
			
		||||
                of a file conflict, and the package was lost (FS#9088)
 | 
			
		||||
              - improved behavior of HoldPkg option (FS#9173)
 | 
			
		||||
              - allow to ignore a package from a group (FS#12059)
 | 
			
		||||
              - search package groups when searching a db (FS#13099)
 | 
			
		||||
              - asciidoc fixes
 | 
			
		||||
              - documentation updates
 | 
			
		||||
              - repo-add: cleanups, improvements and speedup
 | 
			
		||||
              - makepkg:
 | 
			
		||||
                - package splitting support! - see PKGBUILD-split.proto
 | 
			
		||||
                - limit fakeroot usage with addition of package() function
 | 
			
		||||
                - info is handled like man pages and not other documentation
 | 
			
		||||
                - configuration option for man/info page directories
 | 
			
		||||
                - added ability to automatically remove files from package
 | 
			
		||||
                - configuration option for default LDFLAGS
 | 
			
		||||
                - specify alternative configuration file with --config flag
 | 
			
		||||
                - check all integrity checksums provided in PKGBUILD
 | 
			
		||||
                - fix pkgver/pkgrel updating in SCM packages
 | 
			
		||||
                - BUILDSCRIPT option removed from makepkg.conf. Now specified
 | 
			
		||||
                  during configure
 | 
			
		||||
                - enforce no ">" or "<" in provides array
 | 
			
		||||
                - package compression autodetection
 | 
			
		||||
                - check PKGBUILD for CRLF line endings
 | 
			
		||||
                - fix reading PKGBUILD from pipe
 | 
			
		||||
                - increase compatibility with BSDs & Mac OSX
 | 
			
		||||
              - contrib
 | 
			
		||||
                - pacdiff - improvements and new -l flag for using locate
 | 
			
		||||
                - pacscripts - print install scripts for a package
 | 
			
		||||
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)
 | 
			
		||||
@@ -451,7 +622,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
 | 
			
		||||
@@ -479,4 +650,4 @@ VERSION         DESCRIPTION
 | 
			
		||||
              - Changed db_find_conflicts() to ignore directories
 | 
			
		||||
1.0           - Initial Release
 | 
			
		||||
 | 
			
		||||
vim: set et:
 | 
			
		||||
vim: set et spell spelllang=en_us:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								PKGBUILD-split.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								PKGBUILD-split.proto
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
# This is an example of a PKGBUILD for splitting packages. Use this as a
 | 
			
		||||
# start to creating your own, and remove these comments. For more information,
 | 
			
		||||
# see 'man PKGBUILD'. NOTE: Please fill out the license field for your package!
 | 
			
		||||
# If it is unknown, then please put 'unknown'.
 | 
			
		||||
 | 
			
		||||
# Contributor: Your Name <youremail@domain.com>
 | 
			
		||||
pkgname=('pkg1' 'pkg2')
 | 
			
		||||
pkgbase=""
 | 
			
		||||
pkgver=VERSION
 | 
			
		||||
pkgrel=1
 | 
			
		||||
pkgdesc=""
 | 
			
		||||
arch=()
 | 
			
		||||
url=""
 | 
			
		||||
license=('GPL')
 | 
			
		||||
groups=()
 | 
			
		||||
depends=()
 | 
			
		||||
makedepends=()
 | 
			
		||||
provides=()
 | 
			
		||||
conflicts=()
 | 
			
		||||
replaces=()
 | 
			
		||||
backup=()
 | 
			
		||||
options=()
 | 
			
		||||
install=
 | 
			
		||||
source=($pkgbase-$pkgver.tar.gz)
 | 
			
		||||
noextract=()
 | 
			
		||||
md5sums=() #generate with 'makepkg -g'
 | 
			
		||||
 | 
			
		||||
build() {
 | 
			
		||||
  cd "$srcdir/$pkgbase-$pkgver"
 | 
			
		||||
  ./configure --prefix=/usr
 | 
			
		||||
  make || return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
package_pkg1() {
 | 
			
		||||
  # options and directives that can be overridden
 | 
			
		||||
  pkgdesc=""
 | 
			
		||||
  license=()
 | 
			
		||||
  groups=()
 | 
			
		||||
  depends=()
 | 
			
		||||
  optdepends=()
 | 
			
		||||
  provides=()
 | 
			
		||||
  conflicts=()
 | 
			
		||||
  replaces=()
 | 
			
		||||
  backup=()
 | 
			
		||||
  options=()
 | 
			
		||||
  install=
 | 
			
		||||
 | 
			
		||||
  cd "$srcdir/$pkgbase-$pkgver"
 | 
			
		||||
  make DESTDIR="$pkgdir/" install-pkg1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
package_pkg2() {
 | 
			
		||||
  # options and directives overrides
 | 
			
		||||
  pkgdesc=""
 | 
			
		||||
 | 
			
		||||
  cd "$srcdir/$pkgbase-$pkgver"
 | 
			
		||||
  make DESTDIR="$pkgdir/" install-pkg2
 | 
			
		||||
}
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										217
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										217
									
								
								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,61 @@ 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.
 | 
			
		||||
* fetchcb: Callback for custom download function.
 | 
			
		||||
* 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.
 | 
			
		||||
* 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.
 | 
			
		||||
 | 
			
		||||
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 +106,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 +117,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 +150,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 +182,117 @@ 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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API CHANGES BETWEEN 3.2 AND 3.3
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
[REMOVED]
 | 
			
		||||
- pmsyncpkg_t struct (pmpkg_t is used for all types of transaction targets):
 | 
			
		||||
  - alpm_sync_get_pkg()
 | 
			
		||||
  - alpm_sync_get_removes() (use alpm_pkg_get_removes() instead)
 | 
			
		||||
- HoldPkg handling (it is the front-end's task):
 | 
			
		||||
  - alpm_option_get_holdpkgs()
 | 
			
		||||
  - alpm_option_add_holdpkg()
 | 
			
		||||
  - alpm_option_set_holdpkgs()
 | 
			
		||||
  - alpm_option_remove_holdpkg()
 | 
			
		||||
  - PM_TRANS_CONV_REMOVE_HOLDPKG conversation
 | 
			
		||||
- Print URIs feature (it is the front-end's task):
 | 
			
		||||
  - flag: PM_TRANS_FLAG_PRINTURIS
 | 
			
		||||
  - event: PM_TRANS_EVT_PRINTURI
 | 
			
		||||
- alpm_delta_get_from_md5sum() and alpm_delta_get_to_md5sum()
 | 
			
		||||
- alpm_sync_sysupgrade()
 | 
			
		||||
- error codes:
 | 
			
		||||
    PM_ERR_TRANS_COMMITING, PM_ERR_TRANS_DOWNLOADING, PM_ERR_PKG_LOAD,
 | 
			
		||||
    PM_ERR_PKG_CANT_FRESH, PM_ERR_GRP_NOT_FOUND, PM_ERR_USER_ABORT,
 | 
			
		||||
    PM_ERR_INTERNAL_ERROR, PM_ERR_DB_SYNC, PM_ERR_PKG_HOLD and
 | 
			
		||||
    PM_ERR_LIBDOWNLOAD
 | 
			
		||||
 | 
			
		||||
[CHANGED]
 | 
			
		||||
- XferCommand support was removed, any fetch callback function can be defined:
 | 
			
		||||
  - alpm_option_get_xfercommand() and alpm_option_set_xfercommand() were removed
 | 
			
		||||
  - alpm_option_get_fetchcb() and alpm_option_set_fetchcb() were added
 | 
			
		||||
- function renames:
 | 
			
		||||
  - alpm_db_getpkgcache() -> alpm_db_get_pkgcache()
 | 
			
		||||
  - alpm_db_getgrpcache() -> alpm_db_get_grpcache()
 | 
			
		||||
  - alpm_dep_get_string() -> alpm_dep_compute_string()
 | 
			
		||||
  - alpm_get_md5sum() -> alpm_compute_md5sum()
 | 
			
		||||
  - alpm_checkdbconflicts() -> alpm_checkconflicts()
 | 
			
		||||
- alpm_trans_sysupgrade() has a new enable_downgrade parameter
 | 
			
		||||
- alpm_checkdeps() and alpm_checkconflicts() require local package list instead
 | 
			
		||||
  of local database
 | 
			
		||||
- the to-be-upgraded package is passed to the callback function with
 | 
			
		||||
  PM_TRANS_EVT_UPGRADE_START (as the second parameter)
 | 
			
		||||
- the "requiredby" package is never passed to the callback function with
 | 
			
		||||
  PM_TRANS_CONV_INSTALL_IGNOREPKG (the second parameter is always NULL)
 | 
			
		||||
 | 
			
		||||
[ADDED]
 | 
			
		||||
- alpm_pkg_get_db()
 | 
			
		||||
- alpm_pkg_get_removes()
 | 
			
		||||
- conversation: PM_TRANS_CONV_REMOVE_PKGS (remove unresolvable targets)
 | 
			
		||||
- flag: PM_TRANS_FLAG_NOLOCK (do not lock database)
 | 
			
		||||
- error codes:
 | 
			
		||||
    PM_ERR_SERVER_NONE, PM_ERR_TRANS_NOT_LOCKED, PM_ERR_PKG_IGNORED and
 | 
			
		||||
    PM_ERR_LIBFETCH
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								TRANSLATORS
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								TRANSLATORS
									
									
									
									
									
								
							@@ -10,34 +10,44 @@ 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.
 | 
			
		||||
 | 
			
		||||
* indicates the last active translator.
 | 
			
		||||
 | 
			
		||||
Czech (cs_CZ):
 | 
			
		||||
	* Vojtěch Gondžala <vogo@seznam.cz>
 | 
			
		||||
Czech (cs):
 | 
			
		||||
	Vojtěch Gondžala <vojtech.gondzala@gmail.com>
 | 
			
		||||
German (de):
 | 
			
		||||
	* Matthias Gorissen <matthias@archlinux.de>
 | 
			
		||||
	Pierre Schmitz <pierre@archlinux.de>
 | 
			
		||||
	Matthias Gorissen <matthias@archlinux.de>
 | 
			
		||||
British English (en_GB):
 | 
			
		||||
	* Jeff Bailes <thepizzaking@gmail.com>
 | 
			
		||||
	Jeff Bailes <thepizzaking@gmail.com>
 | 
			
		||||
Spanish (es):
 | 
			
		||||
	* Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
 | 
			
		||||
	Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
 | 
			
		||||
	Fernando Lagos <fernando@zerial.org>
 | 
			
		||||
French (fr):
 | 
			
		||||
	* Chantry Xavier <shiningxc@gmail.com>
 | 
			
		||||
	solsTiCe d'Hiver <solstice.dhiver@laposte.net>
 | 
			
		||||
	Chantry Xavier <shiningxc@gmail.com>
 | 
			
		||||
Hungarian (hu):
 | 
			
		||||
	* Nagy Gabor <ngaba@bibl.u-szeged.hu>
 | 
			
		||||
	Nagy Gabor <ngaba@bibl.u-szeged.hu>
 | 
			
		||||
	Avramucz Péter <muczyjoe@gmail.com>
 | 
			
		||||
Italian (it):
 | 
			
		||||
	* Giovanni 'voidnull' Scafora <linuxmania@gmail.com>
 | 
			
		||||
	Alessio 'mOLOk' Bolognino <themolok@gmail.com>
 | 
			
		||||
	Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>
 | 
			
		||||
Polish (pl_PL):
 | 
			
		||||
	* Mateusz Jędrasik <m.jedrasik@gmail.com>
 | 
			
		||||
	Giovanni Scafora <giovanni@archlinux.org>
 | 
			
		||||
Kazakh (kk):
 | 
			
		||||
	Baurzhan Muftakhidinov <baurthefirst@gmail.com>
 | 
			
		||||
Polish (pl):
 | 
			
		||||
	Mateusz Herych <heniekk@gmail.com>
 | 
			
		||||
	Jaroslaw Swierczynski <swiergot@gmail.com>
 | 
			
		||||
	Mateusz Jędrasik <m.jedrasik@gmail.com>
 | 
			
		||||
Brazilian Portuguese (pt_BR):
 | 
			
		||||
	* João Felipe Santos <joao.eel@gmail.com>
 | 
			
		||||
	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):
 | 
			
		||||
	Armando M. Baratti <ambaratti@archlinux-br.org>
 | 
			
		||||
	Rodrigo Flores <flores@archlinux-br.org>
 | 
			
		||||
	Marcelo Cavalcante <kalibslack@gmail.com>
 | 
			
		||||
Romanian (ro):
 | 
			
		||||
	Volodia Macovei <blog@volodia.ro>
 | 
			
		||||
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)=])
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								autoclean.sh
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								autoclean.sh
									
									
									
									
									
								
							@@ -2,33 +2,36 @@
 | 
			
		||||
 | 
			
		||||
[ -f Makefile ] && make distclean
 | 
			
		||||
rm -rf autom4te.cache
 | 
			
		||||
rm -rf {Makefile.in,Makefile}
 | 
			
		||||
rm -rf {config.h.in,config.h}
 | 
			
		||||
rm -rf config.status
 | 
			
		||||
rm -rf configure
 | 
			
		||||
rm -rf stamp*
 | 
			
		||||
rm -rf aclocal.m4
 | 
			
		||||
rm -rf compile
 | 
			
		||||
rm -rf libtool
 | 
			
		||||
rm -f {Makefile.in,Makefile}
 | 
			
		||||
rm -f {config.h.in,config.h}
 | 
			
		||||
rm -f config.status
 | 
			
		||||
rm -f configure
 | 
			
		||||
rm -f stamp*
 | 
			
		||||
rm -f aclocal.m4
 | 
			
		||||
rm -f compile
 | 
			
		||||
rm -f libtool
 | 
			
		||||
 | 
			
		||||
rm -rf lib/libalpm/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf src/util/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf src/pacman/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf scripts/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf etc/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf etc/pacman.d/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf etc/abs/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf pactest/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf doc/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf doc/html/*.html
 | 
			
		||||
rm -rf doc/man3/*.3
 | 
			
		||||
rm -f lib/libalpm/{Makefile.in,Makefile}
 | 
			
		||||
rm -f src/util/{Makefile.in,Makefile}
 | 
			
		||||
rm -f src/pacman/{Makefile.in,Makefile}
 | 
			
		||||
rm -f scripts/{Makefile.in,Makefile}
 | 
			
		||||
rm -f etc/{Makefile.in,Makefile}
 | 
			
		||||
rm -f etc/pacman.d/{Makefile.in,Makefile}
 | 
			
		||||
rm -f etc/abs/{Makefile.in,Makefile}
 | 
			
		||||
rm -f pactest{,/tests}/{Makefile.in,Makefile}
 | 
			
		||||
rm -f contrib/{Makefile.in,Makefile}
 | 
			
		||||
rm -f doc/{Makefile.in,Makefile}
 | 
			
		||||
 | 
			
		||||
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 -f pactest/*.pyc
 | 
			
		||||
rm -f doc/html/*.html
 | 
			
		||||
rm -f doc/man3/*.3
 | 
			
		||||
 | 
			
		||||
rm -rf lib/libalpm/po/{Makefile.in,Makefile}
 | 
			
		||||
rm -rf lib/libalpm/po/POTFILES
 | 
			
		||||
rm -rf lib/libalpm/po/stamp-po
 | 
			
		||||
rm -rf lib/libalpm/po/*.gmo
 | 
			
		||||
rm -f po/{Makefile.in,Makefile}
 | 
			
		||||
rm -f po/POTFILES
 | 
			
		||||
rm -f po/stamp-po
 | 
			
		||||
rm -f po/*.gmo
 | 
			
		||||
 | 
			
		||||
rm -f lib/libalpm/po/{Makefile.in,Makefile}
 | 
			
		||||
rm -f lib/libalpm/po/POTFILES
 | 
			
		||||
rm -f lib/libalpm/po/stamp-po
 | 
			
		||||
rm -f lib/libalpm/po/*.gmo
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								config.guess
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								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
 | 
			
		||||
@@ -793,12 +793,15 @@ EOF
 | 
			
		||||
	exit ;;
 | 
			
		||||
    *:Interix*:[3456]*)
 | 
			
		||||
    	case ${UNAME_MACHINE} in
 | 
			
		||||
	    x86) 
 | 
			
		||||
	    x86)
 | 
			
		||||
		echo i586-pc-interix${UNAME_RELEASE}
 | 
			
		||||
		exit ;;
 | 
			
		||||
	    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
 | 
			
		||||
		;;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										164
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								configure.ac
									
									
									
									
									
								
							@@ -40,29 +40,19 @@ 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], [3])
 | 
			
		||||
m4_define([lib_current], [4])
 | 
			
		||||
m4_define([lib_revision], [0])
 | 
			
		||||
m4_define([lib_age], [1])
 | 
			
		||||
m4_define([lib_age], [0])
 | 
			
		||||
 | 
			
		||||
m4_define([pacman_version_major], [3])
 | 
			
		||||
m4_define([pacman_version_minor], [1])
 | 
			
		||||
m4_define([pacman_version_micro], [1])
 | 
			
		||||
m4_define([pacman_version_suffix], [])
 | 
			
		||||
m4_define([pacman_version_minor], [3])
 | 
			
		||||
m4_define([pacman_version_micro], [0])
 | 
			
		||||
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])
 | 
			
		||||
 | 
			
		||||
@@ -80,48 +70,54 @@ 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 buildscript filename
 | 
			
		||||
AC_ARG_WITH(buildscript,
 | 
			
		||||
	AS_HELP_STRING([--with-buildscript=name], [set the build script name used by makepkg]),
 | 
			
		||||
	[BUILDSCRIPT=$withval], [BUILDSCRIPT=PKGBUILD])
 | 
			
		||||
 | 
			
		||||
# Help line for libfetch
 | 
			
		||||
AC_ARG_ENABLE(internal-download,
 | 
			
		||||
	AS_HELP_STRING([--disable-internal-download], [do not build with 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,22 +125,32 @@ 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])
 | 
			
		||||
AC_CHECK_PROGS([PYTHON], [python2.6 python2.5 python], [false])
 | 
			
		||||
 | 
			
		||||
# find installed gettext
 | 
			
		||||
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 libfetch
 | 
			
		||||
AC_MSG_CHECKING(whether to link with libfetch)
 | 
			
		||||
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([fetch], [fetchParseURL], ,
 | 
			
		||||
		AC_MSG_ERROR([libfetch is 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 +162,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 +178,30 @@ 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"
 | 
			
		||||
SEDINPLACE="sed -i"
 | 
			
		||||
case "${host_os}" in
 | 
			
		||||
	*bsd*)
 | 
			
		||||
		SIZECMD="stat -f %z"
 | 
			
		||||
		SEDINPLACE="sed -i ''"
 | 
			
		||||
		;;
 | 
			
		||||
	cygwin*)
 | 
			
		||||
		host_os_cygwin=yes
 | 
			
		||||
		CFLAGS="$CFLAGS -DCYGWIN"
 | 
			
		||||
		;;
 | 
			
		||||
	darwin*)
 | 
			
		||||
		host_os_darwin=yes
 | 
			
		||||
		SIZECMD="/usr/bin/stat -f %z"
 | 
			
		||||
		SEDINPLACE="/usr/bin/sed -i ''"
 | 
			
		||||
		;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL([CYGWIN], test "x$host_os_cygwin" = "xyes")
 | 
			
		||||
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
 | 
			
		||||
AC_SUBST(SIZECMD)
 | 
			
		||||
AC_SUBST(SEDINPLACE)
 | 
			
		||||
 | 
			
		||||
# Check for architecture, used in default makepkg.conf
 | 
			
		||||
# (Note single space left after CARCHFLAGS)
 | 
			
		||||
case "${host}" in
 | 
			
		||||
@@ -235,9 +258,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 +274,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 +290,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)
 | 
			
		||||
@@ -305,6 +320,9 @@ AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman sourc
 | 
			
		||||
# Set database file extension
 | 
			
		||||
AC_SUBST(DBEXT)
 | 
			
		||||
AC_DEFINE_UNQUOTED([DBEXT], "$DBEXT", [The file extension used by pacman databases])
 | 
			
		||||
# Set makepkg build script name
 | 
			
		||||
AC_SUBST(BUILDSCRIPT)
 | 
			
		||||
AC_DEFINE_UNQUOTED([BUILDSCRIPT], "$BUILDSCRIPT", [The build script name used by makepkg])
 | 
			
		||||
 | 
			
		||||
# Configuration files
 | 
			
		||||
AC_CONFIG_FILES([
 | 
			
		||||
@@ -317,13 +335,14 @@ doc/Makefile
 | 
			
		||||
etc/Makefile
 | 
			
		||||
po/Makefile.in
 | 
			
		||||
pactest/Makefile
 | 
			
		||||
pactest/tests/Makefile
 | 
			
		||||
contrib/Makefile
 | 
			
		||||
Makefile
 | 
			
		||||
])
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
 | 
			
		||||
echo "
 | 
			
		||||
pacman_display_version:
 | 
			
		||||
${PACKAGE_NAME}:
 | 
			
		||||
 | 
			
		||||
  Build information:
 | 
			
		||||
    source code location   : ${srcdir}
 | 
			
		||||
@@ -340,23 +359,26 @@ pacman_display_version:
 | 
			
		||||
    Architecture           : ${CARCH}
 | 
			
		||||
    Architecture flags     : ${CARCHFLAGS}
 | 
			
		||||
    Host Type              : ${CHOST}
 | 
			
		||||
    Filesize command       : ${SIZECMD}
 | 
			
		||||
    In-place sed command   : ${SEDINPLACE}
 | 
			
		||||
 | 
			
		||||
    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}
 | 
			
		||||
    package extension      : ${PKGEXT}
 | 
			
		||||
    source pkg extension   : ${SRCEXT}
 | 
			
		||||
    database extension     : ${DBEXT}
 | 
			
		||||
    build script name      : ${BUILDSCRIPT}
 | 
			
		||||
 | 
			
		||||
  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,15 @@
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	PKGBUILD.vim \
 | 
			
		||||
	bacman \
 | 
			
		||||
	bash_completion \
 | 
			
		||||
	gensync \
 | 
			
		||||
	pacdiff \
 | 
			
		||||
	paclist \
 | 
			
		||||
	pacscripts \
 | 
			
		||||
	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,29 @@ 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.
 | 
			
		||||
 | 
			
		||||
pacscripts - tries to print out the {pre,post}_{install,remove,upgrade}
 | 
			
		||||
scripts of a given package.
 | 
			
		||||
 | 
			
		||||
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" ;;
 | 
			
		||||
@@ -184,9 +183,11 @@ _pacman ()
 | 
			
		||||
          search) mod="${mod}s" ;;
 | 
			
		||||
          upgrades) mod="${mod}u" ;;
 | 
			
		||||
          cascade) mod="${mod}c" ;;
 | 
			
		||||
          check) mod="${mod}k" ;;
 | 
			
		||||
          dbonly) mod="${mod}k" ;;
 | 
			
		||||
          nosave) mod="${mod}n" ;;
 | 
			
		||||
          recursive) mod="${mod}s" ;;
 | 
			
		||||
          unneeded) mod="${mod}u" ;;
 | 
			
		||||
        esac ;;
 | 
			
		||||
      *) toparse="${a}" ;;
 | 
			
		||||
    esac
 | 
			
		||||
@@ -202,7 +203,6 @@ _pacman ()
 | 
			
		||||
 | 
			
		||||
  if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
 | 
			
		||||
    COMPREPLY=( $( compgen -W '\
 | 
			
		||||
      -A --add \
 | 
			
		||||
      -h --help \
 | 
			
		||||
      -Q --query \
 | 
			
		||||
      -R --remove \
 | 
			
		||||
@@ -216,9 +216,10 @@ _pacman ()
 | 
			
		||||
 | 
			
		||||
  if [[ "$cur" == -* ]]; then
 | 
			
		||||
    case "${op}" in
 | 
			
		||||
      A|U)
 | 
			
		||||
      U)
 | 
			
		||||
        COMPREPLY=( $( compgen -W '\
 | 
			
		||||
          --asdeps \
 | 
			
		||||
          --asexplicit \
 | 
			
		||||
          -d --nodeps \
 | 
			
		||||
          -f --force \
 | 
			
		||||
          -h --help \
 | 
			
		||||
@@ -242,6 +243,7 @@ _pacman ()
 | 
			
		||||
          -k --dbonly \
 | 
			
		||||
          -n --nosave \
 | 
			
		||||
          -s --recursive \
 | 
			
		||||
          -u --unneeded \
 | 
			
		||||
          --config \
 | 
			
		||||
          --logfile \
 | 
			
		||||
          --noconfirm \
 | 
			
		||||
@@ -257,9 +259,9 @@ _pacman ()
 | 
			
		||||
      S)
 | 
			
		||||
        COMPREPLY=( $( compgen -W '\
 | 
			
		||||
          --asdeps \
 | 
			
		||||
          --asexplicit \
 | 
			
		||||
          -c --clean \
 | 
			
		||||
          -d --nodeps \
 | 
			
		||||
          -e --dependsonly \
 | 
			
		||||
          -f --force \
 | 
			
		||||
          -g --groups \
 | 
			
		||||
          -h --help \
 | 
			
		||||
@@ -293,6 +295,7 @@ _pacman ()
 | 
			
		||||
          -g --groups \
 | 
			
		||||
          -h --help \
 | 
			
		||||
          -i --info \
 | 
			
		||||
          -k --check \
 | 
			
		||||
          -l --list \
 | 
			
		||||
          -m --foreign \
 | 
			
		||||
          -o --owns \
 | 
			
		||||
@@ -316,7 +319,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,9 +1,8 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
#   gensync
 | 
			
		||||
#   @configure_input@
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
#   Copyright (c) 2002-2006 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,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 "\
 | 
			
		||||
Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
 | 
			
		||||
	printf "\
 | 
			
		||||
Copyright (C) 2002-2006 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,18 +98,17 @@ 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
 | 
			
		||||
@@ -136,20 +119,16 @@ for file in $(find "$rootdir"/* -name "$BUILDSCRIPT"); do
 | 
			
		||||
	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:
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#   pacdiff : a simple pacnew/pacorig/pacsave updater for /etc/
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#   pacdiff : a simple pacnew/pacorig/pacsave updater
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2007 Aaron Griffin <aaronmgriffin@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
@@ -17,29 +17,60 @@
 | 
			
		||||
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Original http://phraktured.net/config/bin/pacdiff
 | 
			
		||||
 | 
			
		||||
diffprog=${DIFFPROG:-vimdiff}
 | 
			
		||||
for x in $(find /etc/ -name *.pacnew -o -name *.pacorig -o -name *.pacsave)
 | 
			
		||||
do
 | 
			
		||||
    echo "File: ${x%.pac*}"
 | 
			
		||||
    chk="$(cmp $x ${x%.pac*})"
 | 
			
		||||
    if [ -z "${chk}" ]; then
 | 
			
		||||
        echo "  Files are identical, removing..."
 | 
			
		||||
        rm $x
 | 
			
		||||
    else
 | 
			
		||||
        echo -n "  File differences found. (V)iew, (S)kip, (R)emove: [v/s/r] "
 | 
			
		||||
        read c
 | 
			
		||||
        c="$(echo $c| tr A-Z a-z)" #tolower
 | 
			
		||||
        if [ "$c" = "r" ]; then
 | 
			
		||||
            rm $x
 | 
			
		||||
        elif [ "$c" = "s" ]; then
 | 
			
		||||
            continue
 | 
			
		||||
        else
 | 
			
		||||
            [ "$c" = "n" -o "$c" = "N" ] || $diffprog $x ${x%.pac*}
 | 
			
		||||
            echo -n "  Remove file? [Y/n] "
 | 
			
		||||
            read c
 | 
			
		||||
            [ "$c" = "n" -o "$c" = "N" ] || rm $x
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
locate=0
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
	echo "pacdiff : a simple pacnew/pacorig/pacsave updater"
 | 
			
		||||
	echo "Usage : pacdiff [-l]"
 | 
			
		||||
	echo "The -l/--locate flag makes pacdiff use locate rather than find"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cmd() {
 | 
			
		||||
	if [ $locate -eq 1 ]; then
 | 
			
		||||
		locate -0 -e -b \*.pacnew \*.pacorig \*.pacsave
 | 
			
		||||
	else
 | 
			
		||||
		find /etc/ \( -name \*.pacnew -o -name \*.pacorig -o -name \*.pacsave \) -print0
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ $# -gt 0 ]; then
 | 
			
		||||
	case $1 in
 | 
			
		||||
		-l|--locate)
 | 
			
		||||
		locate=1;;
 | 
			
		||||
		*)
 | 
			
		||||
		usage; exit 0;;
 | 
			
		||||
	esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# see http://mywiki.wooledge.org/BashFAQ/020
 | 
			
		||||
while IFS= read -u 3 -r -d '' pacfile; do
 | 
			
		||||
	file="${pacfile%.pac*}"
 | 
			
		||||
	echo "File: $file"
 | 
			
		||||
	if [ ! -f "$file" ]; then
 | 
			
		||||
		echo "  $file does not exist"
 | 
			
		||||
		rm -i "$pacfile"
 | 
			
		||||
		continue
 | 
			
		||||
	fi
 | 
			
		||||
	check="$(cmp "$pacfile" "$file")"
 | 
			
		||||
	if [ -z "${check}" ]; then
 | 
			
		||||
		echo "  Files are identical, removing..."
 | 
			
		||||
		rm "$pacfile"
 | 
			
		||||
	else
 | 
			
		||||
		echo -n "  File differences found. (V)iew, (S)kip, (R)emove: [v/s/r] "
 | 
			
		||||
		while read c; do
 | 
			
		||||
			case $c in
 | 
			
		||||
				r|R) rm "$pacfile"; break ;;
 | 
			
		||||
				v|V)
 | 
			
		||||
				$diffprog "$pacfile" "$file"
 | 
			
		||||
				rm -i "$pacfile"; break ;;
 | 
			
		||||
				s|S) break ;;
 | 
			
		||||
				*) echo -n "  Invalid answer. Try again: [v/s/r] "; continue ;;
 | 
			
		||||
			esac
 | 
			
		||||
		done
 | 
			
		||||
	fi
 | 
			
		||||
done 3< <(cmd)
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
 | 
			
		||||
# vim: set ts=2 sw=2 noet:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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:
 | 
			
		||||
							
								
								
									
										132
									
								
								contrib/pacscripts
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										132
									
								
								contrib/pacscripts
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,132 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
#   pacscripts : tries to print out the {pre,post}_{install,remove,upgrade}
 | 
			
		||||
#   scripts of a given package
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2009 Giulio "giulivo" Fidente <giulivo.navigante@gmail.com>
 | 
			
		||||
#   Copyright (c) 2009 Xavier Chantry <shiningxc@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/>.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# bash options
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o errexit
 | 
			
		||||
 | 
			
		||||
progname=$(basename $0)
 | 
			
		||||
progver="0.4"
 | 
			
		||||
 | 
			
		||||
conf="/etc/pacman.conf"
 | 
			
		||||
 | 
			
		||||
if [ ! -r "$conf" ]; then
 | 
			
		||||
	echo "ERROR: unable to read $conf"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
eval $(awk '/DBPath/ {print $1$2$3}' "$conf")
 | 
			
		||||
eval $(awk '/CacheDir/ {print $1$2$3}' "$conf")
 | 
			
		||||
pac_db="${DBPath:-/var/lib/pacman}/local"
 | 
			
		||||
pac_cache="${CacheDir:-/var/cache/pacman/pkg}"
 | 
			
		||||
 | 
			
		||||
error() {
 | 
			
		||||
	local mesg=$1; shift
 | 
			
		||||
	printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
	echo "This program prints out the {pre,post}_{install,remove,upgrade} scripts"
 | 
			
		||||
	echo "of a given package."
 | 
			
		||||
	echo "Usage: $progname pkgname|pkgfile"
 | 
			
		||||
	echo
 | 
			
		||||
	echo " OPTIONS:"
 | 
			
		||||
	echo "  -h, --help                 Print this help message"
 | 
			
		||||
	echo "  -v, --version              Print program name and version"
 | 
			
		||||
	echo
 | 
			
		||||
	echo "Example: $progname gconf-editor"
 | 
			
		||||
	echo "Example: $progname gconf-editor-2.24.1-1-x86_64.pkg.tar.gz"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
spacman() {
 | 
			
		||||
	if [ $EUID -eq 0 ]; then
 | 
			
		||||
		pacman "$@"
 | 
			
		||||
	else
 | 
			
		||||
		if [ ! "$(type -p sudo)" ]; then
 | 
			
		||||
			error "Cannot find the sudo binary! Is sudo installed?"
 | 
			
		||||
			error "Otherwise try to run the program as root"
 | 
			
		||||
			exit 1
 | 
			
		||||
		else
 | 
			
		||||
			sudo pacman "$@"
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_db() {
 | 
			
		||||
	pkg=$(pacman -Q "$1")
 | 
			
		||||
	pkg=${pkg/ /-}
 | 
			
		||||
	if [ -f $pac_db/$pkg*/install ]; then
 | 
			
		||||
		cat $pac_db/$pkg*/install
 | 
			
		||||
		echo
 | 
			
		||||
		return 0
 | 
			
		||||
	else
 | 
			
		||||
		error "Package $1 does not include any .INSTALL script"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_pkg() {
 | 
			
		||||
	if ! bsdtar -xOf "$1" .INSTALL 2>/dev/null; then
 | 
			
		||||
		error "Package $1 does not include any .INSTALL script"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
	echo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_scriptlet() {
 | 
			
		||||
	if [ -f "$1" ]; then
 | 
			
		||||
		if bsdtar tf "$1" .PKGINFO &>/dev/null; then
 | 
			
		||||
			print_pkg "$1"
 | 
			
		||||
			return
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
	if pacman -Q "$1" &>/dev/null; then
 | 
			
		||||
		print_db "$1"
 | 
			
		||||
		return
 | 
			
		||||
	fi
 | 
			
		||||
	if ! pacman -Si $1 &>/dev/null; then
 | 
			
		||||
		error "Package $1 not found"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
	url=$(spacman -Sdp $1 | tail -n1)
 | 
			
		||||
	filename=$(basename $url)
 | 
			
		||||
	if [ ! -f "$pac_cache/$filename" ]; then
 | 
			
		||||
		if ! spacman -Sdw --noconfirm $1 >&2; then
 | 
			
		||||
			error "Failed to download $1"
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
		echo >&2
 | 
			
		||||
	fi
 | 
			
		||||
	print_pkg "$pac_cache/$filename"
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ $# -ne 1 ] ; then
 | 
			
		||||
	usage
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$1" in
 | 
			
		||||
	--help|-h) usage; exit 0 ;;
 | 
			
		||||
	--version|-v) echo "$progname version $progver"; exit 0 ;;
 | 
			
		||||
	*) print_scriptlet $1 ;;
 | 
			
		||||
esac
 | 
			
		||||
@@ -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:
 | 
			
		||||
							
								
								
									
										71
									
								
								scripts/updatesync.sh.in → contrib/updatesync
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										71
									
								
								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}"
 | 
			
		||||
 | 
			
		||||
	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]'
 | 
			
		||||
@@ -51,6 +50,7 @@ _pacman_opts_query_modifiers=(
 | 
			
		||||
	'-e[List packages explicitly installed]'
 | 
			
		||||
	'-i[View package information]'
 | 
			
		||||
	'-ii[View package information including backup files]'
 | 
			
		||||
	'-k[Check package files]'
 | 
			
		||||
	'-l[List package contents]'
 | 
			
		||||
	'-m[List installed packages not found in sync db(s)]'
 | 
			
		||||
	'-t[List packages not required by any package]'
 | 
			
		||||
@@ -78,7 +78,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]'
 | 
			
		||||
@@ -91,15 +90,9 @@ _pacman_opts_sync_modifiers=(
 | 
			
		||||
	'*--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 : \
 | 
			
		||||
@@ -290,7 +283,6 @@ _pacman_get_command() {
 | 
			
		||||
# main dispatcher
 | 
			
		||||
_pacman() {
 | 
			
		||||
	case $words[2] in
 | 
			
		||||
		-A*)  _pacman_action_add      ;;
 | 
			
		||||
		-Q*g*) # ipkg groups
 | 
			
		||||
			_arguments -s : \
 | 
			
		||||
				"$_pacman_opts_common[@]" \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								doc/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								doc/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -6,5 +6,7 @@ pacman.8
 | 
			
		||||
pacman.conf.5
 | 
			
		||||
repo-add.8
 | 
			
		||||
repo-remove.8
 | 
			
		||||
*.css
 | 
			
		||||
*.html
 | 
			
		||||
*.xml
 | 
			
		||||
man3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,26 @@ ASCIIDOC_MANS = \
 | 
			
		||||
 | 
			
		||||
DOXYGEN_MANS = $(wildcard man3/*.3)
 | 
			
		||||
 | 
			
		||||
HTML_MANPAGES = \
 | 
			
		||||
	pacman.8.html \
 | 
			
		||||
	makepkg.8.html \
 | 
			
		||||
	repo-add.8.html \
 | 
			
		||||
	PKGBUILD.5.html \
 | 
			
		||||
	makepkg.conf.5.html \
 | 
			
		||||
	pacman.conf.5.html \
 | 
			
		||||
	libalpm.3.html
 | 
			
		||||
 | 
			
		||||
HTML_OTHER = \
 | 
			
		||||
	index.html \
 | 
			
		||||
	submitting-patches.html \
 | 
			
		||||
	translation-help.html
 | 
			
		||||
 | 
			
		||||
HTML_DOCS = \
 | 
			
		||||
	$(HTML_MANPAGES) \
 | 
			
		||||
	$(HTML_OTHER)
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	asciidoc.conf \
 | 
			
		||||
	pacman.8.txt \
 | 
			
		||||
	makepkg.8.txt \
 | 
			
		||||
	repo-add.8.txt \
 | 
			
		||||
@@ -24,13 +43,27 @@ EXTRA_DIST = \
 | 
			
		||||
	pacman.conf.5.txt \
 | 
			
		||||
	libalpm.3.txt \
 | 
			
		||||
	footer.txt \
 | 
			
		||||
	index.txt \
 | 
			
		||||
	submitting-patches.txt \
 | 
			
		||||
	translation-help.txt \
 | 
			
		||||
	Doxyfile \
 | 
			
		||||
	$(ASCIIDOC_MANS) \
 | 
			
		||||
	$(DOXYGEN_MANS)
 | 
			
		||||
 | 
			
		||||
# Files that should be removed, but which Automake does not know.
 | 
			
		||||
MOSTLYCLEANFILES = *.xml
 | 
			
		||||
MAINTAINERCLEANFILES = $(ASCIIDOC_MANS)
 | 
			
		||||
MOSTLYCLEANFILES = *.xml $(ASCIIDOC_MANS) $(HTML_DOCS) repo-remove.8
 | 
			
		||||
 | 
			
		||||
# 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,39 +71,52 @@ 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
 | 
			
		||||
html: $(HTML_DOCS)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
pacman.8: pacman.8.txt
 | 
			
		||||
makepkg.8: makepkg.8.txt
 | 
			
		||||
repo-add.8: repo-add.8.txt
 | 
			
		||||
PKGBUILD.5: PKGBUILD.5.txt PKGBUILD-example.txt
 | 
			
		||||
makepkg.conf.5: makepkg.conf.5.txt
 | 
			
		||||
pacman.conf.5: pacman.conf.5.txt
 | 
			
		||||
libalpm.3: libalpm.3.txt
 | 
			
		||||
	a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
 | 
			
		||||
 | 
			
		||||
%.html: %.txt
 | 
			
		||||
	asciidoc $(ASCIIDOC_OPTS) -a linkcss $*.txt
 | 
			
		||||
	dos2unix $@
 | 
			
		||||
 | 
			
		||||
# Customizations for certain HTML docs
 | 
			
		||||
$(HTML_MANPAGES): asciidoc.conf footer.txt
 | 
			
		||||
$(HTML_OTHER): asciidoc.conf
 | 
			
		||||
%.8.html: ASCIIDOC_OPTS += -d manpage
 | 
			
		||||
%.5.html: ASCIIDOC_OPTS += -d manpage
 | 
			
		||||
%.3.html: ASCIIDOC_OPTS += -d manpage
 | 
			
		||||
 | 
			
		||||
# Dependency rules
 | 
			
		||||
pacman.8 pacman.8.html: pacman.8.txt
 | 
			
		||||
makepkg.8 makepkg.8.html: makepkg.8.txt
 | 
			
		||||
repo-add.8 repo-add.8.html: repo-add.8.txt
 | 
			
		||||
PKGBUILD.5 PKGBUILD.5.html: PKGBUILD.5.txt PKGBUILD-example.txt
 | 
			
		||||
makepkg.conf.5 makepkg.conf.5.html: makepkg.conf.5.txt
 | 
			
		||||
pacman.conf.5 pacman.conf.5.html: pacman.conf.5.txt
 | 
			
		||||
libalpm.3 libalpm.3.html: 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,10 +1,10 @@
 | 
			
		||||
# Maintainer: judd <jvinet@zeroflux.org>
 | 
			
		||||
# Maintainer: Joe User <joe.user@example.com>
 | 
			
		||||
 | 
			
		||||
pkgname=patch
 | 
			
		||||
pkgver=2.5.4
 | 
			
		||||
pkgrel=3
 | 
			
		||||
pkgdesc="A utility to apply patch files to original sources"
 | 
			
		||||
arch=(i686 x86_64)
 | 
			
		||||
arch=('i686' 'x86_64')
 | 
			
		||||
url="http://www.gnu.org/software/patch/patch.html"
 | 
			
		||||
license=('GPL')
 | 
			
		||||
groups=('base-devel')
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -55,19 +65,19 @@ Options and Directives
 | 
			
		||||
	This field specifies the license(s) that apply to the package.
 | 
			
		||||
	Commonly-used licenses are found in '/usr/share/licenses/common'. If you
 | 
			
		||||
	see the package's license there, simply reference it in the license
 | 
			
		||||
	field (e.g. `$$license=('GPL')$$`). If the package provides a license not
 | 
			
		||||
	field (e.g. `license=('GPL')`). If the package provides a license not
 | 
			
		||||
	found in '/usr/share/licenses/common', then you should include the license
 | 
			
		||||
	in the package itself and set `$$license=('custom')$$` or
 | 
			
		||||
	`$$license=('custom:LicenseName')$$`. The license should be placed in
 | 
			
		||||
	in the package itself and set `license=('custom')` or
 | 
			
		||||
	`license=('custom:LicenseName')`. The license should be placed in
 | 
			
		||||
	'$pkgdir/usr/share/licenses/$pkgname' when building the package. If
 | 
			
		||||
	multiple licenses are applicable for a package, list all of them:
 | 
			
		||||
	`$$license=('GPL' 'FDL')$$`.
 | 
			
		||||
	`license=('GPL' 'FDL')`.
 | 
			
		||||
 | 
			
		||||
*install*::
 | 
			
		||||
	Specifies a special install script that is to be included in the package.
 | 
			
		||||
	This file should reside in the same directory as the PKGBUILD, and will
 | 
			
		||||
	be copied into the package by makepkg. It does not need to be included
 | 
			
		||||
	in the source array (e.g. `$$install=pkgname.install$$`).
 | 
			
		||||
	in the source array (e.g. `install=pkgname.install`).
 | 
			
		||||
 | 
			
		||||
*source (array)*::
 | 
			
		||||
	An array of source files required to build the package. Source files
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -105,7 +118,7 @@ Options and Directives
 | 
			
		||||
 | 
			
		||||
*arch (array)*::
 | 
			
		||||
	Defines on which architectures the given package is available (e.g.
 | 
			
		||||
	`$$arch=('i686' 'x86_64')$$`).
 | 
			
		||||
	`arch=('i686' 'x86_64')`).
 | 
			
		||||
 | 
			
		||||
*backup (array)*::
 | 
			
		||||
	A space-delimited array of filenames, without preceding slashes, that
 | 
			
		||||
@@ -127,11 +140,11 @@ Options and Directives
 | 
			
		||||
	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:
 | 
			
		||||
	An array of packages (and accompanying reasons) that are not essential for
 | 
			
		||||
	base functionality, but may be necessary to make full use of the contents
 | 
			
		||||
	of this package. 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')
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +160,9 @@ Options and Directives
 | 
			
		||||
	depend on 'cron' rather than 'dcron OR fcron'.
 | 
			
		||||
	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.
 | 
			
		||||
	dependency of other packages. Provisions involving the '>' and '<'
 | 
			
		||||
	operators are invalid as only specific versions of a package may be
 | 
			
		||||
	provided.
 | 
			
		||||
 | 
			
		||||
*replaces (array)*::
 | 
			
		||||
	An array of packages that this package should replace, and can be used
 | 
			
		||||
@@ -172,8 +187,8 @@ Options and Directives
 | 
			
		||||
		disable this option.
 | 
			
		||||
 | 
			
		||||
	*docs*;;
 | 
			
		||||
		Save doc and info directories. If you wish to delete doc and
 | 
			
		||||
		info directories, specify `!docs` in the array.
 | 
			
		||||
		Save doc directories. If you wish to delete doc directories,
 | 
			
		||||
		specify `!docs` in the array.
 | 
			
		||||
 | 
			
		||||
	*libtool*;;
 | 
			
		||||
		Leave libtool (.la) files in packages. Specify `!libtool` to
 | 
			
		||||
@@ -182,6 +197,9 @@ Options and Directives
 | 
			
		||||
	*emptydirs*;;
 | 
			
		||||
		Leave empty directories in packages.
 | 
			
		||||
 | 
			
		||||
	*zipman*;;
 | 
			
		||||
		Compress man and info 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
 | 
			
		||||
@@ -202,9 +220,65 @@ 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 information 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.
 | 
			
		||||
 | 
			
		||||
*srcdir*::
 | 
			
		||||
	This points to the directory where makepkg extracts or copies all source
 | 
			
		||||
	files.
 | 
			
		||||
 | 
			
		||||
*pkgdir*::
 | 
			
		||||
	This points to the directory where makepkg bundles the installed package
 | 
			
		||||
	(this directory will become the root directory of your built package).
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
package() Function
 | 
			
		||||
------------------
 | 
			
		||||
An optional package() function can be specified in addition to the build() function.
 | 
			
		||||
This function is run immediately after the build() function. When specified in
 | 
			
		||||
combination with the fakeroot BUILDENV option in linkman:makepkg.conf[5], fakeroot
 | 
			
		||||
usage will be limited to running the packaging stage. The build() function will be
 | 
			
		||||
run as the user calling makepkg.
 | 
			
		||||
 | 
			
		||||
Package Splitting
 | 
			
		||||
-----------------
 | 
			
		||||
makepkg supports building multiple packages from a single PKGBUILD. This is achieved
 | 
			
		||||
by assigning an array of package names to the `pkgname` directive. Each split package
 | 
			
		||||
uses a corresponding packaging function with name `package_foo()`, where `foo` is the
 | 
			
		||||
name of the split package.
 | 
			
		||||
 | 
			
		||||
All options and directives for the split packages default to the global values given
 | 
			
		||||
within the PKGBUILD. However, some of these can be overridden within each split
 | 
			
		||||
package's packaging function. The following variables can be overridden: `pkgdesc`,
 | 
			
		||||
`license`, `groups`, `depends`, `optdepends`, `provides`, `conflicts`, `replaces`,
 | 
			
		||||
`backup`, `options` and `install`.
 | 
			
		||||
 | 
			
		||||
An optional global directive is available when building a split package:
 | 
			
		||||
 | 
			
		||||
*pkgbase*::
 | 
			
		||||
	The name used to refer to the group of packages in the output of makepkg
 | 
			
		||||
	and in the naming of source-only tarballs.  If not specified, the first
 | 
			
		||||
	element in the `pkgname` array is used.
 | 
			
		||||
 | 
			
		||||
Install/Upgrade/Remove Scripting
 | 
			
		||||
--------------------------------
 | 
			
		||||
Pacman has the ability to store and execute a package-specific script when it
 | 
			
		||||
@@ -318,11 +392,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
 | 
			
		||||
--------
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,11 @@
 | 
			
		||||
# Show man link as: <command>(<section>); if section is defined, else just show
 | 
			
		||||
# the command.
 | 
			
		||||
 | 
			
		||||
[macros]
 | 
			
		||||
(?su)[\\]?(?P<name>linkman):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
 | 
			
		||||
 | 
			
		||||
[attributes]
 | 
			
		||||
asterisk=*
 | 
			
		||||
plus=+
 | 
			
		||||
caret=^
 | 
			
		||||
startsb=[
 | 
			
		||||
@@ -30,13 +34,7 @@ ifndef::docbook-xsl-172[]
 | 
			
		||||
[listingblock]
 | 
			
		||||
<example><title>{title}</title>
 | 
			
		||||
<literallayout>
 | 
			
		||||
ifdef::doctype-manpage[]
 | 
			
		||||

.ft C

 | 
			
		||||
endif::doctype-manpage[]
 | 
			
		||||
|
 | 
			
		||||
ifdef::doctype-manpage[]
 | 
			
		||||

.ft

 | 
			
		||||
endif::doctype-manpage[]
 | 
			
		||||
</literallayout>
 | 
			
		||||
{title#}</example>
 | 
			
		||||
endif::docbook-xsl-172[]
 | 
			
		||||
 
 | 
			
		||||
@@ -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.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										195
									
								
								doc/index.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								doc/index.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,195 @@
 | 
			
		||||
Pacman Home Page
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
A simple library-based package manager.
 | 
			
		||||
 | 
			
		||||
Introduction
 | 
			
		||||
------------
 | 
			
		||||
pacman is a utility which manages software packages in Linux. It uses simple
 | 
			
		||||
compressed files as a package format, and maintains a text-based package
 | 
			
		||||
database (more of a hierarchy), just in case some hand tweaking is necessary.
 | 
			
		||||
 | 
			
		||||
pacman does not strive to "do everything." It will add, remove and upgrade
 | 
			
		||||
packages in the system, and it will allow you to query the package database for
 | 
			
		||||
installed packages, files and owners. It also attempts to handle dependencies
 | 
			
		||||
automatically and can download packages from a remote server.
 | 
			
		||||
 | 
			
		||||
History
 | 
			
		||||
~~~~~~~
 | 
			
		||||
Version 2.0 of pacman introduced the ability to sync packages (the `--sync`
 | 
			
		||||
option) with a master server through the use of package databases. Prior to
 | 
			
		||||
this, packages would have to be installed manually using the `--add` and
 | 
			
		||||
`--upgrade` operations.
 | 
			
		||||
 | 
			
		||||
Version 3.0 was the switch to a two-part pacman- a backend named libalpm
 | 
			
		||||
(library for Arch Linux Package Management), and the familiar pacman frontend.
 | 
			
		||||
Speed in many cases was improved, along with dependency and conflict resolution
 | 
			
		||||
being able to handle a much wider variety of cases. The switch to a
 | 
			
		||||
library-based program should also make it easier in the future to develop
 | 
			
		||||
alternative front ends.
 | 
			
		||||
 | 
			
		||||
Documentation
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
Manpages
 | 
			
		||||
~~~~~~~~
 | 
			
		||||
There are several manpages available for the programs, utilities, and
 | 
			
		||||
configuration files dealing with pacman.
 | 
			
		||||
 | 
			
		||||
* linkman:PKGBUILD[5]
 | 
			
		||||
* linkman:libalpm[3]
 | 
			
		||||
* linkman:makepkg[8]
 | 
			
		||||
* linkman:makepkg.conf[5]
 | 
			
		||||
* linkman:pacman[8]
 | 
			
		||||
* linkman:pacman.conf[5]
 | 
			
		||||
* linkman:repo-add[8]
 | 
			
		||||
 | 
			
		||||
Changelog
 | 
			
		||||
~~~~~~~~~
 | 
			
		||||
For a good idea of what is going on in pacman development, take a look at the
 | 
			
		||||
link:http://projects.archlinux.org/?p=pacman.git[Gitweb] summary
 | 
			
		||||
page for the project.
 | 
			
		||||
 | 
			
		||||
See the most recent
 | 
			
		||||
link:http://projects.archlinux.org/?p=pacman.git;a=blob_plain;f=NEWS;hb=HEAD[NEWS]
 | 
			
		||||
file for a not-as-frequently-updated list of changes. However, this should
 | 
			
		||||
contain the biggest changes in a format more concise than the commit log.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Releases
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
`------------`-------
 | 
			
		||||
Date         Version
 | 
			
		||||
---------------------
 | 
			
		||||
2009-01-05   v3.2.2
 | 
			
		||||
2008-08-26   v3.2.1
 | 
			
		||||
2008-07-30   v3.2.0
 | 
			
		||||
2008-04-01   v3.1.4
 | 
			
		||||
2008-03-06   v3.1.3
 | 
			
		||||
2008-02-20   v3.1.2
 | 
			
		||||
2008-01-20   v3.1.1
 | 
			
		||||
2008-01-09   v3.1.0
 | 
			
		||||
2007-09-16   v3.0.6
 | 
			
		||||
2007-06-17   v3.0.5
 | 
			
		||||
2007-05-08   v3.0.4
 | 
			
		||||
2007-04-28   v3.0.3
 | 
			
		||||
2007-04-23   v3.0.2
 | 
			
		||||
2007-04-04   v3.0.1
 | 
			
		||||
2007-03-25   v3.0.0
 | 
			
		||||
2006-02-02   v2.9.8
 | 
			
		||||
2005-09-16   v2.9.7
 | 
			
		||||
2005-06-10   v2.9.6
 | 
			
		||||
2005-01-11   v2.9.5
 | 
			
		||||
2004-12-19   v2.9.4
 | 
			
		||||
2004-12-18   v2.9.3
 | 
			
		||||
2004-09-25   v2.9.2
 | 
			
		||||
2004-09-24   v2.9.1
 | 
			
		||||
2004-09-18   v2.9
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
Source code for all releases is available at
 | 
			
		||||
link:ftp://ftp.archlinux.org/other/pacman/[]. To install, download the newest
 | 
			
		||||
available source tarball, unpack it in a directory, and run the three magic
 | 
			
		||||
commands:
 | 
			
		||||
 | 
			
		||||
    $ ./configure
 | 
			
		||||
    $ make
 | 
			
		||||
    # make install
 | 
			
		||||
 | 
			
		||||
You may wish to read the options presented by `./configure --help` in order to
 | 
			
		||||
set appropriate paths and build options that are correct for your system.
 | 
			
		||||
 | 
			
		||||
Development
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
Mailing List
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
There is a mailing list devoted to pacman development, hosted by Arch Linux.
 | 
			
		||||
link:http://www.archlinux.org/mailman/listinfo/pacman-dev/[Subscribe] or
 | 
			
		||||
link:http://www.archlinux.org/pipermail/pacman-dev/[view the archives].
 | 
			
		||||
 | 
			
		||||
Source Code
 | 
			
		||||
~~~~~~~~~~~
 | 
			
		||||
Development of pacman is currently done in GIT. The central repository is
 | 
			
		||||
hosted by Arch Linux, although some of the developers have their own trees (ask
 | 
			
		||||
on the above mailing lists if you are interested in finding the locations of
 | 
			
		||||
these trees).
 | 
			
		||||
 | 
			
		||||
The current development tree can be fetched with the following command:
 | 
			
		||||
 | 
			
		||||
    git clone git://projects.archlinux.org/pacman.git pacman
 | 
			
		||||
 | 
			
		||||
which will fetch the full development history into a directory named pacman.
 | 
			
		||||
You can browse the source as well using
 | 
			
		||||
link:http://projects.archlinux.org/?p=pacman.git[Gitweb].
 | 
			
		||||
 | 
			
		||||
If you are interested in hacking on pacman, it is highly recommended you join
 | 
			
		||||
the mailing list mentioned above, as well as take a quick glance at our
 | 
			
		||||
link:HACKING.html[HACKING] document.
 | 
			
		||||
link:submitting-patches.html[submitting-patches] is also a recommended read.
 | 
			
		||||
 | 
			
		||||
Not as familiar with code as you'd like to be, but still want to help out? If
 | 
			
		||||
you speak a foreign language, you can help by either creating or updating a
 | 
			
		||||
translation file for your native language. Instructions can be found in
 | 
			
		||||
link:translation-help.html[translation-help].
 | 
			
		||||
 | 
			
		||||
Other Utilities
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
Although the package manager itself is quite simple, many scripts have been
 | 
			
		||||
developed that help automate building and installing packages. These are used
 | 
			
		||||
extensively in link:http://archlinux.org[Arch Linux]. Most of these utilities
 | 
			
		||||
are available in the Arch Linux projects
 | 
			
		||||
link:http://projects.archlinux.org/[Gitweb browser].
 | 
			
		||||
 | 
			
		||||
Utilities available:
 | 
			
		||||
 | 
			
		||||
* link:http://projects.archlinux.org/?p=abs.git[abs] - ABS (Arch Build System), scripts to download  & use the Arch Linux PKGBUILD tree
 | 
			
		||||
* link:http://projects.archlinux.org/?p=devtools.git[devtools] - tools to assist in packaging and dependency checking
 | 
			
		||||
* link:http://projects.archlinux.org/?p=namcap.git[namcap] - a package analysis utility written in python
 | 
			
		||||
* link:http://projects.archlinux.org/?p=pacbuild.git[pacbuild] - a package building system utilizing a daemon
 | 
			
		||||
* link:http://projects.archlinux.org/?p=srcpac.git[srcpac] - a bash build-from-source pacman wrapper
 | 
			
		||||
 | 
			
		||||
Bugs
 | 
			
		||||
----
 | 
			
		||||
If you find bugs (which is quite likely), please email them to the pacman-dev
 | 
			
		||||
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
 | 
			
		||||
such as your commandline, the nature of the bug, and even the package database
 | 
			
		||||
if it helps.
 | 
			
		||||
 | 
			
		||||
You can also post a bug to the Archlinux bug tracker
 | 
			
		||||
link:http://bugs.archlinux.org/index.php?project=3[Flyspray]. Be sure to file
 | 
			
		||||
bugs under the Pacman project.
 | 
			
		||||
 | 
			
		||||
Pacman/libalpm in the Wild
 | 
			
		||||
--------------------------
 | 
			
		||||
Although Arch Linux is the primary user of pacman and libalpm, other
 | 
			
		||||
distributions and projects also use pacman as a package management tool. In
 | 
			
		||||
addition, there have been several projects started to provide a frontend GUI to
 | 
			
		||||
pacman and/or libalpm.
 | 
			
		||||
 | 
			
		||||
Arch derivatives:
 | 
			
		||||
 | 
			
		||||
* link:http://archie.dotsrc.org/[Archie] - Arch Live on steroids
 | 
			
		||||
* link:http://www.faunos.com/[FaunOS] - A portable, fully integrated operating system based on Arch Linux
 | 
			
		||||
* link:http://larch.berlios.de/[larch] - A live CD/DVD/USB-stick construction kit for Arch Linux
 | 
			
		||||
 | 
			
		||||
Other distributions:
 | 
			
		||||
 | 
			
		||||
* link:http://www.delilinux.org/[DeLi Linux] - "Desktop Light" Linux, a Linux distribution for old computers
 | 
			
		||||
* link:http://www.frugalware.org/[Frugalware Linux] - A general purpose Linux distribution for intermediate users (pacman is forked and maintained separately)
 | 
			
		||||
 | 
			
		||||
Pacman/libalpm frontends:
 | 
			
		||||
 | 
			
		||||
* link:http://shaman.iskrembilen.com/[Shaman] - A GUI frontend using Qt and libalpm
 | 
			
		||||
 | 
			
		||||
Copyright
 | 
			
		||||
---------
 | 
			
		||||
pacman is Copyright (C) 2006-2009 Pacman Development Team
 | 
			
		||||
<pacman-dev@archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
 | 
			
		||||
<jvinet@zeroflux.org> and is licensed through the GNU General Public License,
 | 
			
		||||
version 2 or later.
 | 
			
		||||
 | 
			
		||||
/////
 | 
			
		||||
vim: set ts=2 sw=2 syntax=asciidoc et:
 | 
			
		||||
/////
 | 
			
		||||
@@ -28,6 +28,11 @@ 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*::
 | 
			
		||||
@@ -38,14 +43,7 @@ Options
 | 
			
		||||
*-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.
 | 
			
		||||
	outdated and not updated with an `arch=('yourarch')` field.
 | 
			
		||||
 | 
			
		||||
*-c, \--clean*::
 | 
			
		||||
	Clean up leftover work files and directories after a successful build.
 | 
			
		||||
@@ -54,6 +52,9 @@ Options
 | 
			
		||||
	Removes all cached source files from the directory specified in `SRCDEST`
 | 
			
		||||
	in linkman:makepkg.conf[5].
 | 
			
		||||
 | 
			
		||||
*--config* <`/path/to/config`>::
 | 
			
		||||
	Use an alternate config file instead of the `/etc/makepkg.conf` default;
 | 
			
		||||
 | 
			
		||||
*-d, \--nodeps*::
 | 
			
		||||
	Do not perform any dependency checks. This will let you override and
 | 
			
		||||
	ignore any dependencies required. There is a good chance this option
 | 
			
		||||
@@ -73,7 +74,7 @@ Options
 | 
			
		||||
	default to the current directory. This allows the built package to be
 | 
			
		||||
	overwritten.
 | 
			
		||||
 | 
			
		||||
*-forcever*::
 | 
			
		||||
*--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.
 | 
			
		||||
@@ -83,7 +84,7 @@ Options
 | 
			
		||||
	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.
 | 
			
		||||
@@ -97,6 +98,13 @@ Options
 | 
			
		||||
	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.
 | 
			
		||||
 | 
			
		||||
@@ -111,22 +119,30 @@ 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
 | 
			
		||||
	useful if you forgot a depend or install file in your PKGBUILD and the
 | 
			
		||||
	build itself will not change.
 | 
			
		||||
	Repackage contents of the package without rebuilding the package. This
 | 
			
		||||
	is useful if you forgot a depend or install file in your PKGBUILD and
 | 
			
		||||
	the build itself will not change.
 | 
			
		||||
 | 
			
		||||
*-s, \--syncdeps*::
 | 
			
		||||
	Install missing dependencies using pacman. When build-time or run-time
 | 
			
		||||
	dependencies are not found, pacman will try to resolve them. If
 | 
			
		||||
	successful, the missing packages will be downloaded and installed.
 | 
			
		||||
 | 
			
		||||
*\--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
 | 
			
		||||
@@ -57,11 +61,16 @@ Options
 | 
			
		||||
**CXXFLAGS=**"cxxflags"::
 | 
			
		||||
	Flags used for the C++ compiler; see CFLAGS for more info.
 | 
			
		||||
 | 
			
		||||
**LDFLAGS=**"ldflags"::
 | 
			
		||||
	Flags used for the linker. Several options may be specified with common
 | 
			
		||||
	usage resembling ``-Wl,--hash-style=gnu''. Read ld(1) for more details on
 | 
			
		||||
	available linker flags.
 | 
			
		||||
 | 
			
		||||
**MAKEFLAGS=**"makeflags"::
 | 
			
		||||
	This is often used to set the number of jobs used, for example, `-j2`.
 | 
			
		||||
	Other flags that make accepts can also be passed.
 | 
			
		||||
 | 
			
		||||
**BUILDENV=(**fakeroot !distcc color !ccache !xdelta**)**::
 | 
			
		||||
**BUILDENV=(**fakeroot !distcc color !ccache**)**::
 | 
			
		||||
	This array contains options that affect the build environment, 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
 | 
			
		||||
@@ -84,18 +93,13 @@ Options
 | 
			
		||||
		be disabled for individual packages by placing `!ccache` in the
 | 
			
		||||
		PKGBUILD options array.
 | 
			
		||||
 | 
			
		||||
	*xdelta*;;
 | 
			
		||||
		Generate an xdelta binary patch from previous to current package. The
 | 
			
		||||
		previous package must be available in the makepkg cache directory for
 | 
			
		||||
		this to occur.
 | 
			
		||||
 | 
			
		||||
**DISTCC_HOSTS=**"host1 ..."::
 | 
			
		||||
	If using DistCC, this is used to specify a space-delimited list of hosts
 | 
			
		||||
	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
 | 
			
		||||
@@ -107,27 +111,55 @@ Options
 | 
			
		||||
		option.
 | 
			
		||||
 | 
			
		||||
	*docs*;;
 | 
			
		||||
		Save doc and info directories. If you wish to delete doc and info
 | 
			
		||||
		directories, specify `!docs' in the array.
 | 
			
		||||
		Save doc directories. If you wish to delete doc directories, specify
 | 
			
		||||
		`!docs` in the array. The directories affected are specified by the
 | 
			
		||||
		`DOC_DIRS` variable.
 | 
			
		||||
 | 
			
		||||
	*libtool*;;
 | 
			
		||||
		Leave libtool (.la) files in packages. Specify `!libtool' to remove
 | 
			
		||||
		Leave libtool (.la) files in packages. Specify `!libtool` to remove
 | 
			
		||||
		them.
 | 
			
		||||
 | 
			
		||||
	*emptydirs*;;
 | 
			
		||||
		Leave empty directories in packages.
 | 
			
		||||
 | 
			
		||||
	*zipman*;;
 | 
			
		||||
		Compress manual (man and info) pages with gzip. The directories
 | 
			
		||||
		affected are specified by the `MAN_DIRS` variable.
 | 
			
		||||
 | 
			
		||||
	*purge*;;
 | 
			
		||||
		Remove files specified by the `PURGE_TARGETS` variable from the
 | 
			
		||||
		package.
 | 
			
		||||
 | 
			
		||||
**INTEGRITY_CHECK=(**check1 ...**)**::
 | 
			
		||||
	File integrity checks to use. Multiple checks may be specified; this
 | 
			
		||||
	affects both generation and checking. The current valid options are:
 | 
			
		||||
	`md5`, `sha1`, `sha256`, `sha384`, and `sha512`.
 | 
			
		||||
 | 
			
		||||
**DOC_DIRS=(**usr/{,share/}{info,doc} ...**)**::
 | 
			
		||||
	If "!docs" is specified in the OPTIONS array, this variable will
 | 
			
		||||
**MAN_DIRS=(**{usr{,/local}{,/share},opt/*}/{man,info} ...**)**::
 | 
			
		||||
	If `zipman` is specified in the OPTIONS array, this variable will
 | 
			
		||||
	instruct makepkg where to look to compress manual (man and info)
 | 
			
		||||
	pages. 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.
 | 
			
		||||
 | 
			
		||||
**DOC_DIRS=(**usr/{,share/}{doc,gtk-doc} ...**)**::
 | 
			
		||||
	If `!docs` is specified in the OPTIONS array, this variable will
 | 
			
		||||
	instruct makepkg where to look to remove docs. 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.
 | 
			
		||||
 | 
			
		||||
**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.
 | 
			
		||||
 | 
			
		||||
**PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::
 | 
			
		||||
	If `purge` is specified in the OPTIONS array, this variable will
 | 
			
		||||
	instruct makepkg which files to remove from the package. This is
 | 
			
		||||
	useful for index files that are added by multiple packages.
 | 
			
		||||
 | 
			
		||||
**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
 | 
			
		||||
@@ -139,11 +171,11 @@ Options
 | 
			
		||||
	in the current directory. Many people like to keep all source files in
 | 
			
		||||
	a central location for easy cleanup, so this path can be set here.
 | 
			
		||||
 | 
			
		||||
**PACKAGER=**"John Doe <john@doe.com>"::
 | 
			
		||||
**PACKAGER=**"John Doe <john@example.com>"::
 | 
			
		||||
	This value is used when querying a package to see who was the builder.
 | 
			
		||||
	It is recommended you change this to your name and email address.
 | 
			
		||||
 | 
			
		||||
*BUILDSCRIPT*, *PKGEXT*, *SRCEXT*, *DB_COMPRESSION*, *DB_CHECKSUMS*::
 | 
			
		||||
*PKGEXT*, *SRCEXT*::
 | 
			
		||||
	Do not touch these unless you know what you are doing.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										138
									
								
								doc/pacman.8.txt
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								doc/pacman.8.txt
									
									
									
									
									
								
							@@ -22,28 +22,24 @@ hooks, and the ability to sync your local machine with a remote ftp server to
 | 
			
		||||
automatically upgrade packages. Pacman packages are a zipped tar format.
 | 
			
		||||
 | 
			
		||||
Since version 3.0.0, pacman has been the frontend to linkman:libalpm[3], the
 | 
			
		||||
"Arch Linux Package Management" library. This library allows alternative front
 | 
			
		||||
ends to be written (for instance, a GUI front end).
 | 
			
		||||
``Arch Linux Package Management'' library. This library allows alternative
 | 
			
		||||
front 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
 | 
			
		||||
	packages (dependencies, conflicts, install date, build date, size). This
 | 
			
		||||
	can be run against the local package database or can be used on
 | 
			
		||||
	individual '.tar.gz' packages. See <<QO,Query Options>> below.
 | 
			
		||||
	individual '.tar.gz' packages. In the first case, if no package names
 | 
			
		||||
	are provided in the command line, all installed packages will be
 | 
			
		||||
	queried. Additionally, various filters can be applied on the package
 | 
			
		||||
	list. See <<QO,Query Options>> below.
 | 
			
		||||
 | 
			
		||||
*-R, \--remove*::
 | 
			
		||||
	Remove a package from the system. Groups can also be specified to be
 | 
			
		||||
	Remove package(s) from the system. Groups can also be specified to be
 | 
			
		||||
	removed, in which case every package in that group will be removed.
 | 
			
		||||
	Files belonging to the specified package will be deleted, and the
 | 
			
		||||
	database will be updated. Most configuration files will be saved
 | 
			
		||||
@@ -56,7 +52,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,11 +66,24 @@ 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
 | 
			
		||||
 | 
			
		||||
*-T, \--deptest*::
 | 
			
		||||
	Check dependencies; this is useful in scripts such as makepkg to check
 | 
			
		||||
	installed packages. This operation will check each dependency specified and
 | 
			
		||||
	return a list of those which are not currently satisfied on the system.
 | 
			
		||||
	This operation accepts no other options. Example usage: `pacman -T qt
 | 
			
		||||
	"bash>=3.2"`.
 | 
			
		||||
 | 
			
		||||
*-U, \--upgrade*::
 | 
			
		||||
	Upgrade or add a package to the system. Either a URL or file path can be
 | 
			
		||||
	specified. This is a "remove-then-add" process. See <<HCF,Handling Config
 | 
			
		||||
	Upgrade or add package(s) to the system. Either a URL or file path can be
 | 
			
		||||
	specified. This is a ``remove-then-add'' process. See <<HCF,Handling Config
 | 
			
		||||
	Files>> for an explanation on how pacman takes care of config files.
 | 
			
		||||
 | 
			
		||||
*-V, \--version*::
 | 
			
		||||
@@ -86,16 +97,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,19 +130,22 @@ 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
 | 
			
		||||
	*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*::
 | 
			
		||||
*-v, \--verbose*::
 | 
			
		||||
	Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
 | 
			
		||||
 | 
			
		||||
*\--debug*::
 | 
			
		||||
	Display debug messages. When reporting bugs, this option is recommended
 | 
			
		||||
	to be used.
 | 
			
		||||
 | 
			
		||||
*\--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*: this
 | 
			
		||||
	is an absolute path, the root path is not automatically prepended. This
 | 
			
		||||
	behavior changed in pacman 3.1.0.
 | 
			
		||||
	is an absolute path, the root path is not automatically prepended.
 | 
			
		||||
 | 
			
		||||
*\--config* <'file'>::
 | 
			
		||||
	Specify an alternate configuration file.
 | 
			
		||||
@@ -135,7 +155,7 @@ Options
 | 
			
		||||
	the installation root setting.
 | 
			
		||||
 | 
			
		||||
*\--noconfirm*::
 | 
			
		||||
	Bypass any and all "Are you sure?" messages. It's not a good idea to do
 | 
			
		||||
	Bypass any and all ``Are you sure?'' messages. It's not a good idea to do
 | 
			
		||||
	this unless you want to run pacman from a script.
 | 
			
		||||
 | 
			
		||||
*\--noprogressbar*::
 | 
			
		||||
@@ -154,16 +174,17 @@ Query Options[[QO]]
 | 
			
		||||
	it will be shown if available.
 | 
			
		||||
 | 
			
		||||
*-d, \--deps*::
 | 
			
		||||
	List all packages installed as dependencies. This option can be combined
 | 
			
		||||
	with '-t' for listing real orphans- packages that were installed as
 | 
			
		||||
	dependencies but are no longer required by any installed package. ('-Qdt'
 | 
			
		||||
	is equivalent to the pacman 3.0.X '-Qe' option.)
 | 
			
		||||
	Restrict or filter output to packages installed as dependencies. This
 | 
			
		||||
	option can be combined with '-t' for listing real orphans- packages that
 | 
			
		||||
	were installed as dependencies but are no longer required by any
 | 
			
		||||
	installed package. ('-Qdt' is equivalent to the pacman 3.0.X '-Qe'
 | 
			
		||||
	option.)
 | 
			
		||||
 | 
			
		||||
*-e, \--explicit*::
 | 
			
		||||
	List all packages explicitly installed. This option can be combined with
 | 
			
		||||
	'-t' to list top-level packages- those packages that were explicitly
 | 
			
		||||
	installed but are not required by any other package. ('-Qet' is equivalent
 | 
			
		||||
	to the pacman 2.9.X '-Qe' option.)
 | 
			
		||||
	Restrict or filter output to packages explicitly installed. This option
 | 
			
		||||
	can be combined with '-t' to list top-level packages- those packages
 | 
			
		||||
	that were explicitly installed but are not required by any other
 | 
			
		||||
	package. ('-Qet' is equivalent to the pacman 2.9.X '-Qe' option.)
 | 
			
		||||
 | 
			
		||||
*-g, \--groups*::
 | 
			
		||||
	Display all packages that are members of a named group. If a name is not
 | 
			
		||||
@@ -175,6 +196,11 @@ Query Options[[QO]]
 | 
			
		||||
	'\--info' or '-i' flags will also display the list of backup files and
 | 
			
		||||
	their modification states.
 | 
			
		||||
 | 
			
		||||
*-k \--check*::
 | 
			
		||||
	Check that all files owned by the given package(s) are present on the
 | 
			
		||||
	system. If packages are not specified or filter flags are not provided,
 | 
			
		||||
	check all installed packages.
 | 
			
		||||
 | 
			
		||||
*-l, \--list*::
 | 
			
		||||
	List all files owned by a given package. Multiple packages can be
 | 
			
		||||
	specified on the command line.
 | 
			
		||||
@@ -193,17 +219,31 @@ 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. (This is useful when
 | 
			
		||||
	pacman's output is processed in a script.) Search will only show package
 | 
			
		||||
	names and not version, group, and description information; owns will
 | 
			
		||||
	only show package names instead of "file is owned by pkg" messages; group
 | 
			
		||||
	will only show package names and omit group names; list will only show
 | 
			
		||||
	files and omit package names; check will only show pairs of package names
 | 
			
		||||
	and missing files; 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`.
 | 
			
		||||
	descriptions that match `regexp`. When you include multiple search
 | 
			
		||||
	terms, only packages with descriptions matching ALL of those terms will
 | 
			
		||||
	be returned.
 | 
			
		||||
 | 
			
		||||
*-t, \--unrequired*::
 | 
			
		||||
	Restrict or filter output to packages not required by any currently
 | 
			
		||||
	installed package.
 | 
			
		||||
 | 
			
		||||
*-u, \--upgrades*::
 | 
			
		||||
	Lists all packages that are out of date on the local system. This option
 | 
			
		||||
	works best if the sync database is refreshed using '-Sy'.
 | 
			
		||||
	Restrict or filter output to packages that are out of date on the local
 | 
			
		||||
	system. (Only package versions are used to find outdated packages,
 | 
			
		||||
	replacements are not checked here.) This option works best if the sync
 | 
			
		||||
	database is refreshed using '-Sy'.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Remove Options[[RO]]
 | 
			
		||||
@@ -226,7 +266,12 @@ Remove Options[[RO]]
 | 
			
		||||
	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.
 | 
			
		||||
	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]]
 | 
			
		||||
@@ -241,10 +286,9 @@ Sync Options[[SO]]
 | 
			
		||||
	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.
 | 
			
		||||
 | 
			
		||||
*-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.
 | 
			
		||||
+
 | 
			
		||||
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
 | 
			
		||||
@@ -264,9 +308,18 @@ 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. (This is useful when
 | 
			
		||||
	pacman's output is processed in a script.) Search will only show package
 | 
			
		||||
	names and not repo, version, group, and description information; list
 | 
			
		||||
	will only show package names and omit databases and versions; group will
 | 
			
		||||
	only show package names and omit group names.
 | 
			
		||||
 | 
			
		||||
*-s, \--search* <'regexp'>::
 | 
			
		||||
	This will search each package in the sync databases for names or
 | 
			
		||||
	descriptions that match `regexp`.
 | 
			
		||||
	descriptions that match `regexp`. When you include multiple search
 | 
			
		||||
	terms, only packages with descriptions matching ALL of those terms will
 | 
			
		||||
	be returned.
 | 
			
		||||
 | 
			
		||||
*-u, \--sysupgrade*::
 | 
			
		||||
	Upgrades all packages that are out of date. Each currently-installed
 | 
			
		||||
@@ -274,7 +327,10 @@ Sync Options[[SO]]
 | 
			
		||||
	report of all packages to upgrade will be presented and  the operation
 | 
			
		||||
	will not proceed without user confirmation. Dependencies are
 | 
			
		||||
	automatically resolved at this level and will be installed/upgraded if
 | 
			
		||||
	necessary.
 | 
			
		||||
	necessary. Pass this option twice to enable package downgrade; in this
 | 
			
		||||
	case pacman will select sync packages whose version does not match with
 | 
			
		||||
	the local version. This can be useful when the user switches from a testing
 | 
			
		||||
	repo to a stable one.
 | 
			
		||||
 | 
			
		||||
*-w, \--downloadonly*::
 | 
			
		||||
	Retrieve all packages from the server, but do not install/upgrade
 | 
			
		||||
@@ -288,7 +344,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
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ which defines global options.
 | 
			
		||||
 | 
			
		||||
Example
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
--------
 | 
			
		||||
#
 | 
			
		||||
# pacman.conf
 | 
			
		||||
@@ -40,6 +41,9 @@ Include = /etc/pacman.d/core
 | 
			
		||||
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
 | 
			
		||||
-------
 | 
			
		||||
@@ -55,7 +59,7 @@ Options
 | 
			
		||||
	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
 | 
			
		||||
@@ -63,14 +67,13 @@ Options
 | 
			
		||||
	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*: this is an absolute
 | 
			
		||||
	path, the root path is not automatically prepended. This behavior changed
 | 
			
		||||
	in pacman 3.1.0.
 | 
			
		||||
	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`,
 | 
			
		||||
@@ -80,6 +83,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'.
 | 
			
		||||
@@ -104,8 +113,10 @@ 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, and the new files will be installed with a
 | 
			
		||||
	'.pacnew' extension.
 | 
			
		||||
	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
 | 
			
		||||
@@ -113,6 +124,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
 | 
			
		||||
@@ -123,11 +145,11 @@ Options
 | 
			
		||||
 | 
			
		||||
*UseDelta*::
 | 
			
		||||
	Download delta files instead of complete packages if possible.  Requires
 | 
			
		||||
	the xdelta program to be installed.
 | 
			
		||||
	the xdelta3 program to be installed.
 | 
			
		||||
 | 
			
		||||
*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.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,19 +6,13 @@ repo-add(8)
 | 
			
		||||
 | 
			
		||||
Name
 | 
			
		||||
----
 | 
			
		||||
////
 | 
			
		||||
* If we use this below line, the manpage name comes out all weird. We also
 | 
			
		||||
* can't use two separate lines, which is quite annoying. *
 | 
			
		||||
repo-add, repo-remove - package database maintenance utilities
 | 
			
		||||
////
 | 
			
		||||
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 +30,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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								doc/submitting-patches.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								doc/submitting-patches.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
Pacman - Submitting Patches
 | 
			
		||||
===========================
 | 
			
		||||
 | 
			
		||||
This document is here mainly to make the job of those who review patches
 | 
			
		||||
easier and is more of a guideline and not a strict set of rules.  However,
 | 
			
		||||
please try to follow as much as you can.
 | 
			
		||||
 | 
			
		||||
NOTE: Some of this is paraphrased from the kernel documentation's
 | 
			
		||||
"SubmittingPatches" file.
 | 
			
		||||
 | 
			
		||||
Getting the most recent source
 | 
			
		||||
------------------------------
 | 
			
		||||
 | 
			
		||||
Patches need to be submitted in GIT format and are best if they are against the
 | 
			
		||||
latest version of the code. There are several helpful tutorials for getting
 | 
			
		||||
started with GIT if you have not worked with it before.
 | 
			
		||||
 | 
			
		||||
* http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
 | 
			
		||||
* http://wiki.archlinux.org/index.php/Super_Quick_Git_Guide
 | 
			
		||||
 | 
			
		||||
The pacman code can be fetched using the following command:
 | 
			
		||||
 | 
			
		||||
    git clone git://projects.archlinux.org/pacman.git
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Creating your patch
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
* use `git commit -s` for creating a commit of your changes.
 | 
			
		||||
 | 
			
		||||
The -s allows you to credit yourself by adding a "Signed Off By" line to
 | 
			
		||||
indicate who has "signed" the patch - who has approved it.
 | 
			
		||||
 | 
			
		||||
    Signed-off-by: Aaron Griffin <aaron@archlinux.org>
 | 
			
		||||
 | 
			
		||||
Please use your real name and email address. Feel free to "scramble" the
 | 
			
		||||
address if you're afraid of spam.
 | 
			
		||||
 | 
			
		||||
* Describe your patch.
 | 
			
		||||
 | 
			
		||||
It helps if you describe the overview and goals  of the patch in the git commit
 | 
			
		||||
log.  This allows others to see what you intended so as to compare it to what
 | 
			
		||||
was actually done, and allows better feedback.
 | 
			
		||||
 | 
			
		||||
* Use `git format-patch` to create patches.
 | 
			
		||||
 | 
			
		||||
Your commit message will be shown above the patch by default when you will use
 | 
			
		||||
`git-format-patch`, including the signoff line.
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
Submitting your patch
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
* Send the patch to the pacman-dev mailing list
 | 
			
		||||
 | 
			
		||||
The mailing list is the primary queue for review and acceptance.  Here you
 | 
			
		||||
will get feedback, and let me know the details of your patch.
 | 
			
		||||
 | 
			
		||||
* No MIME, no links, no compression, no attachments.  Just plain text.
 | 
			
		||||
 | 
			
		||||
Patches should be contained in the actual body of the email.  There are many
 | 
			
		||||
reasons for this.  First, it makes them easier to read with any mail reader,
 | 
			
		||||
it allows easier review "at a glance", and most importantly, it allows people
 | 
			
		||||
to comment on exact lines of the patch in reply emails.
 | 
			
		||||
 | 
			
		||||
`git send-email` allows you to send git formatted patches in plain text easily
 | 
			
		||||
and is the preferred method for submission to the mailing list.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
After you submit
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
* Don't get discouraged
 | 
			
		||||
 | 
			
		||||
Any feedback you get, positive or negative, has nothing to do with you.  If a
 | 
			
		||||
patch is rejected, try taking the suggestions into account and re-submitting.
 | 
			
		||||
We welcome most submissions here, and some may take a bit longer to get
 | 
			
		||||
looked over than others. If you think your patch got lost in the shuffle,
 | 
			
		||||
send another email to the list in reply to the original asking if anyone has
 | 
			
		||||
looked at it yet.
 | 
			
		||||
 | 
			
		||||
* Respond to feedback
 | 
			
		||||
 | 
			
		||||
When you do get feedback, it usually merits a response, whether this be a
 | 
			
		||||
resubmit of the patch with corrections or a follow-up email asking for
 | 
			
		||||
clarifications. When neither of these occurs, don't expect your patch to see
 | 
			
		||||
further review. The all-volunteer staff don't have time to fix up patches that
 | 
			
		||||
aren't their own.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
/////
 | 
			
		||||
vim: set ts=2 sw=2 syntax=asciidoc et:
 | 
			
		||||
/////
 | 
			
		||||
@@ -20,9 +20,10 @@ edit = sed \
 | 
			
		||||
	-e 's|@ROOTDIR[@]|$(ROOTDIR)|g'
 | 
			
		||||
 | 
			
		||||
$(dist_sysconf_DATA): Makefile
 | 
			
		||||
	rm -f $@ $@.tmp
 | 
			
		||||
	$(edit) `test -f ./$@.in || echo $(srcdir)/`$@.in >$@.tmp
 | 
			
		||||
	mv $@.tmp $@
 | 
			
		||||
	@echo '    ' GEN $@;
 | 
			
		||||
	@rm -f $@ $@.tmp
 | 
			
		||||
	@$(edit) `test -f ./$@.in || echo $(srcdir)/`$@.in >$@.tmp
 | 
			
		||||
	@mv $@.tmp $@
 | 
			
		||||
 | 
			
		||||
makepkg.conf: $(srcdir)/makepkg.conf.in
 | 
			
		||||
pacman.conf: $(srcdir)/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
 | 
			
		||||
@@ -31,6 +31,7 @@ CHOST="@CHOST@"
 | 
			
		||||
# -mtune optimizes for an architecture, but builds for whole processor family
 | 
			
		||||
CFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
 | 
			
		||||
CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
 | 
			
		||||
#LDFLAGS=""
 | 
			
		||||
#-- Make Flags: change this for DistCC/SMP systems
 | 
			
		||||
#MAKEFLAGS="-j2"
 | 
			
		||||
 | 
			
		||||
@@ -38,16 +39,15 @@ CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
 | 
			
		||||
# BUILD ENVIRONMENT
 | 
			
		||||
#########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Defaults: BUILDENV=(fakeroot !distcc color !ccache !xdelta)
 | 
			
		||||
# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
 | 
			
		||||
#  A negated environment option will do the opposite of the comments below.
 | 
			
		||||
#
 | 
			
		||||
#-- fakeroot: Allow building packages as a non-root user
 | 
			
		||||
#-- distcc:   Use the Distributed C/C++/ObjC compiler
 | 
			
		||||
#-- color:    Colorize output messages
 | 
			
		||||
#-- ccache:   Use ccache to cache compilation
 | 
			
		||||
#-- xdelta:   Generate delta patch from previous to current package
 | 
			
		||||
#
 | 
			
		||||
BUILDENV=(fakeroot !distcc color !ccache !xdelta)
 | 
			
		||||
BUILDENV=(fakeroot !distcc color !ccache)
 | 
			
		||||
#
 | 
			
		||||
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
 | 
			
		||||
#-- specify a space-delimited list of hosts running in the DistCC cluster.
 | 
			
		||||
@@ -58,20 +58,28 @@ 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 purge)
 | 
			
		||||
#  A negated option will do the opposite of the comments below.
 | 
			
		||||
#
 | 
			
		||||
#-- strip:     Strip symbols from binaries/libraries
 | 
			
		||||
#-- docs:      Save doc and info directories
 | 
			
		||||
#-- strip:     Strip symbols from binaries/libraries in STRIP_DIRS
 | 
			
		||||
#-- docs:      Save doc directories specified by DOC_DIRS
 | 
			
		||||
#-- libtool:   Leave libtool (.la) files in packages
 | 
			
		||||
#-- emptydirs: Leave empty directories in packages
 | 
			
		||||
#-- zipman:    Compress manual (man and info) pages in MAN_DIRS with gzip
 | 
			
		||||
#-- purge:     Remove files specified by PURGE_TARGETS
 | 
			
		||||
#
 | 
			
		||||
OPTIONS=(strip !docs libtool emptydirs)
 | 
			
		||||
OPTIONS=(strip docs libtool emptydirs zipman purge)
 | 
			
		||||
 | 
			
		||||
#-- 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})
 | 
			
		||||
#-- Manual (man and info) directories to compress (if zipman is specified)
 | 
			
		||||
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
 | 
			
		||||
#-- Doc directories to remove (if !docs is specified)
 | 
			
		||||
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
 | 
			
		||||
#-- Directories to be searched for the strip option (if strip is specified)
 | 
			
		||||
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
 | 
			
		||||
#-- Files to be removed from all packages (if purge is specified)
 | 
			
		||||
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# PACKAGE OUTPUT
 | 
			
		||||
@@ -83,22 +91,17 @@ 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>"
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# BUILDSCRIPT/EXTENSION DEFAULTS
 | 
			
		||||
# EXTENSION DEFAULTS
 | 
			
		||||
#########################################################################
 | 
			
		||||
#
 | 
			
		||||
# WARNING: Do NOT modify these variables unless you know what you are
 | 
			
		||||
#          doing.
 | 
			
		||||
#
 | 
			
		||||
BUILDSCRIPT='PKGBUILD'
 | 
			
		||||
PKGEXT='@PKGEXT@'
 | 
			
		||||
SRCEXT='@SRCEXT@'
 | 
			
		||||
DB_COMPRESSION='gz'
 | 
			
		||||
DB_CHECKSUMS=(md5)
 | 
			
		||||
 | 
			
		||||
# vim: set ft=sh ts=2 sw=2 et:
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  add.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
@@ -27,6 +28,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 +40,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 +70,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 +99,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 +115,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(_alpm_db_get_pkgcache(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 +138,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 +154,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;
 | 
			
		||||
@@ -188,12 +167,13 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
 | 
			
		||||
		EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_START, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "looking for file conflicts\n");
 | 
			
		||||
		lp = _alpm_db_find_fileconflicts(db, trans, handle->root);
 | 
			
		||||
		lp = _alpm_db_find_fileconflicts(db, trans, trans->packages, NULL);
 | 
			
		||||
		if(lp != NULL) {
 | 
			
		||||
			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 +190,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 +226,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 +273,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,14 +291,14 @@ 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);
 | 
			
		||||
		archive_entry_set_perm(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);
 | 
			
		||||
		archive_entry_set_perm(entry, 0644);
 | 
			
		||||
	} else if(*entryname == '.') {
 | 
			
		||||
		/* for now, ignore all files starting with '.' that haven't
 | 
			
		||||
		 * already been handled (for future possibilities) */
 | 
			
		||||
@@ -337,7 +322,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,36 +347,36 @@ 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) {
 | 
			
		||||
				/* if filesystem perms are different than pkg perms, warn user */
 | 
			
		||||
				int mask = 07777;
 | 
			
		||||
				_alpm_log(PM_LOG_WARNING, _("directory permissions differ on %s\n"
 | 
			
		||||
							"filesystem: %o  package: %o\n"), entryname, lsbuf.st_mode & mask,
 | 
			
		||||
						entrymode & mask);
 | 
			
		||||
				alpm_logaction("warning: directory permissions differ on %s\n"
 | 
			
		||||
		if(S_ISDIR(lsbuf.st_mode)) {
 | 
			
		||||
			if(S_ISDIR(entrymode)) {
 | 
			
		||||
				/* case 12: existing dir, ignore it */
 | 
			
		||||
				if(lsbuf.st_mode != entrymode) {
 | 
			
		||||
					/* if filesystem perms are different than pkg perms, warn user */
 | 
			
		||||
					int mask = 07777;
 | 
			
		||||
					_alpm_log(PM_LOG_WARNING, _("directory permissions differ on %s\n"
 | 
			
		||||
								"filesystem: %o  package: %o\n"), entryname, lsbuf.st_mode & mask,
 | 
			
		||||
							entrymode & mask);
 | 
			
		||||
					alpm_logaction("warning: directory permissions differ on %s\n"
 | 
			
		||||
							"filesystem: %o  package: %o\n", entryname, lsbuf.st_mode & mask,
 | 
			
		||||
						entrymode & mask);
 | 
			
		||||
							entrymode & mask);
 | 
			
		||||
				}
 | 
			
		||||
				_alpm_log(PM_LOG_DEBUG, "extract: skipping dir extraction of %s\n",
 | 
			
		||||
						entryname);
 | 
			
		||||
				archive_read_data_skip(archive);
 | 
			
		||||
				return(0);
 | 
			
		||||
			} else {
 | 
			
		||||
				/* case 10/11: trying to overwrite dir with file/symlink, don't allow it */
 | 
			
		||||
				_alpm_log(PM_LOG_ERROR, _("extract: not overwriting dir with file %s\n"),
 | 
			
		||||
						entryname);
 | 
			
		||||
				archive_read_data_skip(archive);
 | 
			
		||||
				return(1);
 | 
			
		||||
			}
 | 
			
		||||
			_alpm_log(PM_LOG_DEBUG, "extract: skipping dir extraction of %s\n",
 | 
			
		||||
					entryname);
 | 
			
		||||
			archive_read_data_skip(archive);
 | 
			
		||||
			return(0);
 | 
			
		||||
		} else if(S_ISDIR(lsbuf.st_mode) && S_ISLNK(entrymode)) {
 | 
			
		||||
			/* case 11: existing dir, symlink in package, ignore it */
 | 
			
		||||
			_alpm_log(PM_LOG_DEBUG, "extract: skipping symlink extraction of %s\n",
 | 
			
		||||
					entryname);
 | 
			
		||||
			archive_read_data_skip(archive);
 | 
			
		||||
			return(0);
 | 
			
		||||
		} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(entrymode)) {
 | 
			
		||||
			/* case 9: existing symlink, dir in package */
 | 
			
		||||
			if(S_ISDIR(sbuf.st_mode)) {
 | 
			
		||||
@@ -406,12 +392,6 @@ static int extract_single_file(struct archive *archive,
 | 
			
		||||
				archive_read_data_skip(archive);
 | 
			
		||||
				return(1);
 | 
			
		||||
			}
 | 
			
		||||
		} else if(S_ISDIR(lsbuf.st_mode) && S_ISREG(entrymode)) {
 | 
			
		||||
			/* case 10: trying to overwrite dir tree with file, don't allow it */
 | 
			
		||||
			_alpm_log(PM_LOG_ERROR, _("extract: not overwriting dir with file %s\n"),
 | 
			
		||||
					entryname);
 | 
			
		||||
			archive_read_data_skip(archive);
 | 
			
		||||
			return(1);
 | 
			
		||||
		} else if(S_ISREG(lsbuf.st_mode) && S_ISDIR(entrymode)) {
 | 
			
		||||
			/* case 6: trying to overwrite file with dir */
 | 
			
		||||
			_alpm_log(PM_LOG_DEBUG, "extract: overwriting file with dir %s\n",
 | 
			
		||||
@@ -438,7 +418,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 +426,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_local = alpm_compute_md5sum(filename);
 | 
			
		||||
		hash_pkg = alpm_compute_md5sum(checkfile);
 | 
			
		||||
 | 
			
		||||
		/* append the new md5 hash to it's respective entry
 | 
			
		||||
		 * in newpkg's backup (it will be the new orginal) */
 | 
			
		||||
@@ -482,16 +462,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,37 +476,41 @@ 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);
 | 
			
		||||
 | 
			
		||||
		if(!oldpkg) {
 | 
			
		||||
			/* looks like we have a local file that has a different hash as the
 | 
			
		||||
			 * file in the package, move it to a .pacorig */
 | 
			
		||||
			if(strcmp(hash_local, hash_pkg) != 0) {
 | 
			
		||||
				/* looks like we have a local file that has a different hash as the
 | 
			
		||||
				 * file in the package, move it to a .pacorig */
 | 
			
		||||
				char newpath[PATH_MAX];
 | 
			
		||||
				snprintf(newpath, PATH_MAX, "%s.pacorig", filename);
 | 
			
		||||
 | 
			
		||||
				/* 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);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				/* local file is identical to pkg one, so just remove pkg one */
 | 
			
		||||
				unlink(checkfile);
 | 
			
		||||
			}
 | 
			
		||||
		} else if(hash_orig) {
 | 
			
		||||
			/* the fun part */
 | 
			
		||||
@@ -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);
 | 
			
		||||
			}
 | 
			
		||||
			hash = alpm_compute_md5sum(filename);
 | 
			
		||||
			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));
 | 
			
		||||
 | 
			
		||||
@@ -663,18 +650,18 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 | 
			
		||||
	if(local) {
 | 
			
		||||
		is_upgrade = 1;
 | 
			
		||||
 | 
			
		||||
		EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, NULL);
 | 
			
		||||
		/* we'll need to save some record for backup checks later */
 | 
			
		||||
		oldpkg = _alpm_pkg_dup(local);
 | 
			
		||||
		/* make sure all infos are loaded because the database entry
 | 
			
		||||
		 * will be removed soon */
 | 
			
		||||
		_alpm_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL);
 | 
			
		||||
 | 
			
		||||
		EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, oldpkg);
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "upgrading package %s-%s\n",
 | 
			
		||||
				newpkg->name, newpkg->version);
 | 
			
		||||
 | 
			
		||||
		/* 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 {
 | 
			
		||||
		newpkg->reason = alpm_pkg_get_reason(local);
 | 
			
		||||
	}
 | 
			
		||||
		/* copy over the install reason */
 | 
			
		||||
		newpkg->reason = alpm_pkg_get_reason(oldpkg);
 | 
			
		||||
 | 
			
		||||
		/* pre_upgrade scriptlet */
 | 
			
		||||
		if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
 | 
			
		||||
@@ -695,27 +682,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 +750,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 +790,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 +816,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 +833,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 +853,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 +872,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 */
 | 
			
		||||
@@ -868,7 +887,6 @@ int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* run ldconfig if it exists */
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "running \"ldconfig -r %s\"\n", handle->root);
 | 
			
		||||
	_alpm_ldconfig(handle->root);
 | 
			
		||||
 | 
			
		||||
	return(0);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  add.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  alpm.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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>
 | 
			
		||||
@@ -25,7 +26,6 @@
 | 
			
		||||
/* libalpm */
 | 
			
		||||
#include "alpm.h"
 | 
			
		||||
#include "alpm_list.h"
 | 
			
		||||
#include "error.h"
 | 
			
		||||
#include "handle.h"
 | 
			
		||||
#include "util.h"
 | 
			
		||||
 | 
			
		||||
@@ -81,4 +81,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,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 * alpm.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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 +27,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 +47,11 @@ 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,37 @@ 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);
 | 
			
		||||
/** A callback for downloading files
 | 
			
		||||
 * @param url the URL of the file to be downloaded
 | 
			
		||||
 * @param localpath the directory to which the file should be downloaded
 | 
			
		||||
 * @param mtimeold the modification time of the file previously downloaded
 | 
			
		||||
 * @param mtimenew the modification time of the newly downloaded file.
 | 
			
		||||
 * This should be set by the callback.
 | 
			
		||||
 * @return 0 on success, 1 if the modification times are identical, -1 on
 | 
			
		||||
 * error.
 | 
			
		||||
 */
 | 
			
		||||
typedef int (*alpm_cb_fetch)(const char *url, const char *localpath,
 | 
			
		||||
		time_t mtimeold, time_t *mtimenew);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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_fetch alpm_option_get_fetchcb();
 | 
			
		||||
void alpm_option_set_fetchcb(alpm_cb_fetch 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);
 | 
			
		||||
 | 
			
		||||
@@ -130,19 +146,11 @@ void alpm_option_add_ignorepkg(const char *pkg);
 | 
			
		||||
void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs);
 | 
			
		||||
int alpm_option_remove_ignorepkg(const char *pkg);
 | 
			
		||||
 | 
			
		||||
alpm_list_t *alpm_option_get_holdpkgs();
 | 
			
		||||
void alpm_option_add_holdpkg(const char *pkg);
 | 
			
		||||
void alpm_option_set_holdpkgs(alpm_list_t *holdpkgs);
 | 
			
		||||
int alpm_option_remove_holdpkg(const char *pkg);
 | 
			
		||||
 | 
			
		||||
alpm_list_t *alpm_option_get_ignoregrps();
 | 
			
		||||
void alpm_option_add_ignoregrp(const char *grp);
 | 
			
		||||
void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps);
 | 
			
		||||
int alpm_option_remove_ignoregrp(const char *grp);
 | 
			
		||||
 | 
			
		||||
const char *alpm_option_get_xfercommand();
 | 
			
		||||
void alpm_option_set_xfercommand(const char *cmd);
 | 
			
		||||
 | 
			
		||||
unsigned short alpm_option_get_nopassiveftp();
 | 
			
		||||
void alpm_option_set_nopassiveftp(unsigned short nopasv);
 | 
			
		||||
void alpm_option_set_usedelta(unsigned short usedelta);
 | 
			
		||||
@@ -168,11 +176,10 @@ int alpm_db_setserver(pmdb_t *db, const char *url);
 | 
			
		||||
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);
 | 
			
		||||
alpm_list_t *alpm_db_get_pkgcache(pmdb_t *db);
 | 
			
		||||
 | 
			
		||||
pmgrp_t *alpm_db_readgrp(pmdb_t *db, const char *name);
 | 
			
		||||
alpm_list_t *alpm_db_getgrpcache(pmdb_t *db);
 | 
			
		||||
alpm_list_t *alpm_db_get_grpcache(pmdb_t *db);
 | 
			
		||||
alpm_list_t *alpm_db_search(pmdb_t *db, const alpm_list_t* needles);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -191,7 +198,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 +211,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);
 | 
			
		||||
@@ -217,14 +224,17 @@ alpm_list_t *alpm_pkg_get_deltas(pmpkg_t *pkg);
 | 
			
		||||
alpm_list_t *alpm_pkg_get_replaces(pmpkg_t *pkg);
 | 
			
		||||
alpm_list_t *alpm_pkg_get_files(pmpkg_t *pkg);
 | 
			
		||||
alpm_list_t *alpm_pkg_get_backup(pmpkg_t *pkg);
 | 
			
		||||
alpm_list_t *alpm_pkg_get_removes(pmpkg_t *pkg);
 | 
			
		||||
pmdb_t *alpm_pkg_get_db(pmpkg_t *pkg);
 | 
			
		||||
void *alpm_pkg_changelog_open(pmpkg_t *pkg);
 | 
			
		||||
size_t alpm_pkg_changelog_read(void *ptr, size_t size,
 | 
			
		||||
		const pmpkg_t *pkg, const void *fp);
 | 
			
		||||
/*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
 | 
			
		||||
@@ -232,32 +242,21 @@ unsigned long alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local);
 | 
			
		||||
 | 
			
		||||
const char *alpm_delta_get_from(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_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);
 | 
			
		||||
int alpm_sync_sysupgrade(pmdb_t *db_local,
 | 
			
		||||
		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);
 | 
			
		||||
pmpkg_t *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Transactions
 | 
			
		||||
@@ -265,10 +264,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 +279,100 @@ 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
 | 
			
		||||
	/* 0x1000 flag can go here */
 | 
			
		||||
	PM_TRANS_FLAG_NEEDED = 0x2000,
 | 
			
		||||
	PM_TRANS_FLAG_ALLEXPLICIT = 0x4000,
 | 
			
		||||
	PM_TRANS_FLAG_UNNEEDED = 0x8000,
 | 
			
		||||
	PM_TRANS_FLAG_RECURSEALL = 0x10000,
 | 
			
		||||
	PM_TRANS_FLAG_NOLOCK = 0x20000
 | 
			
		||||
} 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,
 | 
			
		||||
	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 {
 | 
			
		||||
@@ -328,8 +381,7 @@ typedef enum _pmtransconv_t {
 | 
			
		||||
	PM_TRANS_CONV_CONFLICT_PKG = 0x04,
 | 
			
		||||
	PM_TRANS_CONV_CORRUPTED_PKG = 0x08,
 | 
			
		||||
	PM_TRANS_CONV_LOCAL_NEWER = 0x10,
 | 
			
		||||
	/* 0x20 flag can go here */
 | 
			
		||||
	PM_TRANS_CONV_REMOVE_HOLDPKG = 0x40
 | 
			
		||||
	PM_TRANS_CONV_REMOVE_PKGS = 0x20,
 | 
			
		||||
} pmtransconv_t;
 | 
			
		||||
 | 
			
		||||
/* Transaction Progress */
 | 
			
		||||
@@ -352,12 +404,11 @@ 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,
 | 
			
		||||
                    alpm_trans_cb_progress cb_progress);
 | 
			
		||||
int alpm_trans_sysupgrade(void);
 | 
			
		||||
int alpm_trans_sysupgrade(int enable_downgrade);
 | 
			
		||||
int alpm_trans_addtarget(char *target);
 | 
			
		||||
int alpm_trans_prepare(alpm_list_t **data);
 | 
			
		||||
int alpm_trans_commit(alpm_list_t **data);
 | 
			
		||||
@@ -377,13 +428,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 *alpm_checkdeps(alpm_list_t *pkglist, 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_checkconflicts(alpm_list_t *pkglist);
 | 
			
		||||
 | 
			
		||||
const char *alpm_conflict_get_package1(pmconflict_t *conflict);
 | 
			
		||||
const char *alpm_conflict_get_package2(pmconflict_t *conflict);
 | 
			
		||||
@@ -391,7 +445,7 @@ const char *alpm_conflict_get_package2(pmconflict_t *conflict);
 | 
			
		||||
pmdepmod_t alpm_dep_get_mod(const pmdepend_t *dep);
 | 
			
		||||
const char *alpm_dep_get_name(const pmdepend_t *dep);
 | 
			
		||||
const char *alpm_dep_get_version(const pmdepend_t *dep);
 | 
			
		||||
char *alpm_dep_get_string(const pmdepend_t *dep);
 | 
			
		||||
char *alpm_dep_compute_string(const pmdepend_t *dep);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * File conflicts
 | 
			
		||||
@@ -412,7 +466,7 @@ const char *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict);
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* checksums */
 | 
			
		||||
char *alpm_get_md5sum(const char *name);
 | 
			
		||||
char *alpm_compute_md5sum(const char *name);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Errors
 | 
			
		||||
@@ -438,12 +492,7 @@ 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,
 | 
			
		||||
	PM_ERR_SERVER_NONE,
 | 
			
		||||
	/* Transactions */
 | 
			
		||||
	PM_ERR_TRANS_NOT_NULL,
 | 
			
		||||
	PM_ERR_TRANS_NULL,
 | 
			
		||||
@@ -452,39 +501,29 @@ enum _pmerrno_t {
 | 
			
		||||
	PM_ERR_TRANS_NOT_PREPARED,
 | 
			
		||||
	PM_ERR_TRANS_ABORT,
 | 
			
		||||
	PM_ERR_TRANS_TYPE,
 | 
			
		||||
	PM_ERR_TRANS_COMMITING,
 | 
			
		||||
	PM_ERR_TRANS_DOWNLOADING,
 | 
			
		||||
	PM_ERR_TRANS_NOT_LOCKED,
 | 
			
		||||
	/* Packages */
 | 
			
		||||
	PM_ERR_PKG_NOT_FOUND,
 | 
			
		||||
	PM_ERR_PKG_IGNORED,
 | 
			
		||||
	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,
 | 
			
		||||
	/* Dependencies */
 | 
			
		||||
	PM_ERR_UNSATISFIED_DEPS,
 | 
			
		||||
	PM_ERR_CONFLICTING_DEPS,
 | 
			
		||||
	PM_ERR_FILE_CONFLICTS,
 | 
			
		||||
	/* 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_LIBFETCH,
 | 
			
		||||
	PM_ERR_EXTERNAL_DOWNLOAD
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern enum _pmerrno_t pm_errno;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  alpm_list.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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 +18,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 +41,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 +90,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 +123,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 +141,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 +179,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 +303,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 +355,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 +465,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 +495,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 +528,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 +607,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 +624,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 +635,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));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  alpm_list.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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,6 +20,8 @@
 | 
			
		||||
#ifndef _ALPM_LIST_H
 | 
			
		||||
#define _ALPM_LIST_H
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h> /* size_t */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
@@ -45,7 +48,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 +58,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);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  backup.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
@@ -42,6 +43,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);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  backup.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										289
									
								
								lib/libalpm/be_package.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								lib/libalpm/be_package.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,289 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  be_package.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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: */
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  cache.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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,7 +20,6 @@
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
@@ -31,7 +31,6 @@
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "alpm.h"
 | 
			
		||||
#include "util.h"
 | 
			
		||||
#include "error.h"
 | 
			
		||||
#include "package.h"
 | 
			
		||||
#include "group.h"
 | 
			
		||||
#include "db.h"
 | 
			
		||||
@@ -41,32 +40,22 @@
 | 
			
		||||
 */
 | 
			
		||||
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);
 | 
			
		||||
	db->pkgcache_loaded = 1;
 | 
			
		||||
	return(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -74,23 +63,19 @@ void _alpm_db_free_pkgcache(pmdb_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(db == NULL || db->pkgcache == NULL) {
 | 
			
		||||
	if(db == NULL || !db->pkgcache_loaded) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_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;
 | 
			
		||||
	db->pkgcache_loaded = 0;
 | 
			
		||||
 | 
			
		||||
	if(db->grpcache) {
 | 
			
		||||
		_alpm_db_free_grpcache(db);
 | 
			
		||||
	}
 | 
			
		||||
	_alpm_db_free_grpcache(db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
 | 
			
		||||
@@ -101,32 +86,44 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(!db->pkgcache) {
 | 
			
		||||
	if(!db->pkgcache_loaded) {
 | 
			
		||||
		_alpm_db_load_pkgcache(db);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* hmmm, still NULL ?*/
 | 
			
		||||
	if(!db->pkgcache) {
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "error: pkgcache is NULL for db '%s'\n", db->treename);
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "warning: pkgcache is NULL for db '%s'\n", db->treename);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(db == NULL || pkg == NULL) {
 | 
			
		||||
	if(db == NULL || !db->pkgcache_loaded || pkg == NULL) {
 | 
			
		||||
		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);
 | 
			
		||||
@@ -143,7 +140,7 @@ int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(db == NULL || pkg == NULL) {
 | 
			
		||||
	if(db == NULL || !db->pkgcache_loaded || pkg == NULL) {
 | 
			
		||||
		return(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -176,12 +173,12 @@ pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target)
 | 
			
		||||
 | 
			
		||||
	alpm_list_t *pkgcache = _alpm_db_get_pkgcache(db);
 | 
			
		||||
	if(!pkgcache) {
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "error: failed to get '%s' from NULL pkgcache\n",
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "warning: failed to get '%s' from NULL pkgcache\n",
 | 
			
		||||
				target);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return(_alpm_pkg_find(target, pkgcache));
 | 
			
		||||
	return(_alpm_pkg_find(pkgcache, target));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Returns a new group cache from db.
 | 
			
		||||
@@ -196,10 +193,6 @@ int _alpm_db_load_grpcache(pmdb_t *db)
 | 
			
		||||
		return(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(db->pkgcache == NULL) {
 | 
			
		||||
		_alpm_db_load_pkgcache(db);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "loading group cache for repository '%s'\n",
 | 
			
		||||
			db->treename);
 | 
			
		||||
 | 
			
		||||
@@ -208,36 +201,33 @@ 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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	db->grpcache_loaded = 1;
 | 
			
		||||
	return(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -247,19 +237,19 @@ void _alpm_db_free_grpcache(pmdb_t *db)
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(db == NULL || db->grpcache == NULL) {
 | 
			
		||||
	if(db == NULL || !db->grpcache_loaded) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for(lg = db->grpcache; lg; lg = lg->next) {
 | 
			
		||||
		pmgrp_t *grp = lg->data;
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "freeing group cache for repository '%s'\n",
 | 
			
		||||
	                        db->treename);
 | 
			
		||||
 | 
			
		||||
		alpm_list_free(grp->packages);
 | 
			
		||||
		grp->packages = NULL;
 | 
			
		||||
	for(lg = db->grpcache; lg; lg = lg->next) {
 | 
			
		||||
		_alpm_grp_free(lg->data);
 | 
			
		||||
		lg->data = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	FREELIST(db->grpcache);
 | 
			
		||||
	db->grpcache_loaded = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db)
 | 
			
		||||
@@ -270,7 +260,7 @@ alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db)
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(db->grpcache == NULL) {
 | 
			
		||||
	if(!db->grpcache_loaded) {
 | 
			
		||||
		_alpm_db_load_grpcache(db);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  cache.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  conflict.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
 | 
			
		||||
 *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
@@ -25,10 +26,10 @@
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
 | 
			
		||||
/* libalpm */
 | 
			
		||||
#include "conflict.h"
 | 
			
		||||
@@ -36,7 +37,6 @@
 | 
			
		||||
#include "handle.h"
 | 
			
		||||
#include "trans.h"
 | 
			
		||||
#include "util.h"
 | 
			
		||||
#include "error.h"
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "cache.h"
 | 
			
		||||
#include "deps.h"
 | 
			
		||||
@@ -49,12 +49,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 +104,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 +112,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 +128,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 +218,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 pkglist the list of packages to check
 | 
			
		||||
 * @return an alpm_list_t of pmconflict_t
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_checkconflicts(alpm_list_t *pkglist) {
 | 
			
		||||
	return(_alpm_innerconflicts(pkglist));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Returns a alpm_list_t* of file conflicts.
 | 
			
		||||
@@ -251,10 +273,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 +298,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 +321,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,19 +339,73 @@ 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int dir_belongsto_pkg(char *dirpath, pmpkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	struct dirent *ent = NULL;
 | 
			
		||||
	struct stat sbuf;
 | 
			
		||||
	char path[PATH_MAX];
 | 
			
		||||
	char abspath[PATH_MAX];
 | 
			
		||||
	DIR *dir;
 | 
			
		||||
 | 
			
		||||
	snprintf(abspath, PATH_MAX, "%s%s", handle->root, dirpath);
 | 
			
		||||
	dir = opendir(abspath);
 | 
			
		||||
	if(dir == NULL) {
 | 
			
		||||
		return(1);
 | 
			
		||||
	}
 | 
			
		||||
	while((ent = readdir(dir)) != NULL) {
 | 
			
		||||
		const char *name = ent->d_name;
 | 
			
		||||
 | 
			
		||||
		if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		snprintf(path, PATH_MAX, "%s/%s", dirpath, name);
 | 
			
		||||
		snprintf(abspath, PATH_MAX, "%s%s", handle->root, path);
 | 
			
		||||
		if(stat(abspath, &sbuf) != 0) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		if(S_ISDIR(sbuf.st_mode)) {
 | 
			
		||||
			if(dir_belongsto_pkg(path, pkg)) {
 | 
			
		||||
				continue;
 | 
			
		||||
			} else {
 | 
			
		||||
				closedir(dir);
 | 
			
		||||
				return(0);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			if(alpm_list_find_str(alpm_pkg_get_files(pkg),path)) {
 | 
			
		||||
				continue;
 | 
			
		||||
			} else {
 | 
			
		||||
				closedir(dir);
 | 
			
		||||
				return(0);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	closedir(dir);
 | 
			
		||||
	return(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 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 */
 | 
			
		||||
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root)
 | 
			
		||||
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans,
 | 
			
		||||
		alpm_list_t *upgrade, alpm_list_t *remove)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i, *conflicts = NULL;
 | 
			
		||||
	alpm_list_t *targets = trans->packages;
 | 
			
		||||
	int numtargs = alpm_list_count(targets);
 | 
			
		||||
	alpm_list_t *i, *j, *conflicts = NULL;
 | 
			
		||||
	int numtargs = alpm_list_count(upgrade);
 | 
			
		||||
	int current;
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(db == NULL || targets == NULL || root == NULL) {
 | 
			
		||||
	if(db == NULL || upgrade == NULL) {
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -331,8 +413,8 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
 | 
			
		||||
	 * be possible with real transactions. Right now we only do half as much
 | 
			
		||||
	 * here as we do when we actually extract files in add.c with our 12
 | 
			
		||||
	 * different cases. */
 | 
			
		||||
	for(current = 1, i = targets; i; i = i->next, current++) {
 | 
			
		||||
		alpm_list_t *j, *k, *tmpfiles = NULL;
 | 
			
		||||
	for(current = 1, i = upgrade; i; i = i->next, current++) {
 | 
			
		||||
		alpm_list_t *k, *tmpfiles = NULL;
 | 
			
		||||
		pmpkg_t *p1, *p2, *dbpkg;
 | 
			
		||||
		char path[PATH_MAX+1];
 | 
			
		||||
 | 
			
		||||
@@ -345,18 +427,18 @@ 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) {
 | 
			
		||||
				for(k = tmpfiles; k; k = k->next) {
 | 
			
		||||
					snprintf(path, PATH_MAX, "%s%s", root, (char *)k->data);
 | 
			
		||||
					snprintf(path, PATH_MAX, "%s%s", handle->root, (char *)k->data);
 | 
			
		||||
					conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_TARGET, path,
 | 
			
		||||
							alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
 | 
			
		||||
				}
 | 
			
		||||
@@ -372,7 +454,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "searching for filesystem conflicts: %s\n", p1->name);
 | 
			
		||||
		dbpkg = _alpm_db_get_pkgfromcache(db, p1->name);
 | 
			
		||||
 | 
			
		||||
		/* Do two different checks here. f the package is currently installed,
 | 
			
		||||
		/* Do two different checks here. If the package is currently installed,
 | 
			
		||||
		 * then only check files that are new in the new package. If the package
 | 
			
		||||
		 * is not currently installed, then simply stat the whole filelist */
 | 
			
		||||
		if(dbpkg) {
 | 
			
		||||
@@ -384,12 +466,10 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
 | 
			
		||||
			tmpfiles = alpm_list_strdup(alpm_pkg_get_files(p1));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* loop over each file to be installed */
 | 
			
		||||
		for(j = tmpfiles; j; j = j->next) {
 | 
			
		||||
			int skip_conflict = 0;
 | 
			
		||||
			filestr = j->data;
 | 
			
		||||
 | 
			
		||||
			snprintf(path, PATH_MAX, "%s%s", root, filestr);
 | 
			
		||||
			snprintf(path, PATH_MAX, "%s%s", handle->root, filestr);
 | 
			
		||||
 | 
			
		||||
			/* stat the file - if it exists, do some checks */
 | 
			
		||||
			if(_alpm_lstat(path, &lsbuf) != 0) {
 | 
			
		||||
@@ -400,68 +480,75 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
 | 
			
		||||
			if(path[strlen(path)-1] == '/') {
 | 
			
		||||
				if(S_ISDIR(lsbuf.st_mode)) {
 | 
			
		||||
					_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict\n", path);
 | 
			
		||||
					skip_conflict = 1;
 | 
			
		||||
					continue;
 | 
			
		||||
				} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(sbuf.st_mode)) {
 | 
			
		||||
					_alpm_log(PM_LOG_DEBUG,
 | 
			
		||||
							"%s is a symlink to a dir, hopefully not a conflict\n", path);
 | 
			
		||||
					skip_conflict = 1;
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if(!skip_conflict) {
 | 
			
		||||
				_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s\n", path);
 | 
			
		||||
			_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;
 | 
			
		||||
					}
 | 
			
		||||
			int resolved_conflict = 0; /* have we acted on this conflict? */
 | 
			
		||||
 | 
			
		||||
			/* Check remove list (will we remove the conflicting local file?) */
 | 
			
		||||
			for(k = remove; k && !resolved_conflict; k = k->next) {
 | 
			
		||||
				pmpkg_t *rempkg = k->data;
 | 
			
		||||
				if(rempkg && alpm_list_find_str(alpm_pkg_get_files(rempkg), filestr)) {
 | 
			
		||||
					_alpm_log(PM_LOG_DEBUG, "local file will be removed, not a conflict: %s\n", filestr);
 | 
			
		||||
					resolved_conflict = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
				/* 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) {
 | 
			
		||||
					p2 = k->data;
 | 
			
		||||
					if(!p2 || strcmp(p1->name, p2->name) == 0) {
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					pmpkg_t *localp2 = _alpm_db_get_pkgfromcache(db, p2->name);
 | 
			
		||||
 | 
			
		||||
					/* Check if it used to exist in a package, but doesn't anymore */
 | 
			
		||||
					alpm_list_t *pkgfiles, *localfiles; /* added for readability */
 | 
			
		||||
					pkgfiles = alpm_pkg_get_files(p2);
 | 
			
		||||
					localfiles = alpm_pkg_get_files(localp2);
 | 
			
		||||
 | 
			
		||||
					if(localp2 && !alpm_list_find_str(pkgfiles, filestr)
 | 
			
		||||
						 && alpm_list_find_str(localfiles, filestr)) {
 | 
			
		||||
						/* skip removal of file, but not add. this will prevent a second
 | 
			
		||||
						 * package from removing the file when it was already installed
 | 
			
		||||
						 * by its new owner (whether the file is in backup array or not */
 | 
			
		||||
						trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
 | 
			
		||||
						_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);
 | 
			
		||||
						resolved_conflict = 1;
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
			/* Look at all the targets to see if file has changed hands */
 | 
			
		||||
			for(k = upgrade; k && !resolved_conflict; k = k->next) {
 | 
			
		||||
				p2 = k->data;
 | 
			
		||||
				if(!p2 || strcmp(p1->name, p2->name) == 0) {
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				if(!resolved_conflict) {
 | 
			
		||||
					_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
 | 
			
		||||
					conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
 | 
			
		||||
							path, p1->name, NULL);
 | 
			
		||||
				pmpkg_t *localp2 = _alpm_db_get_pkgfromcache(db, p2->name);
 | 
			
		||||
 | 
			
		||||
				/* localp2->files will be removed (target conflicts are handled by CHECK 1) */
 | 
			
		||||
				if(localp2 && alpm_list_find_str(alpm_pkg_get_files(localp2), filestr)) {
 | 
			
		||||
					/* skip removal of file, but not add. this will prevent a second
 | 
			
		||||
					 * package from removing the file when it was already installed
 | 
			
		||||
					 * by its new owner (whether the file is in backup array or not */
 | 
			
		||||
					trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
 | 
			
		||||
					_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);
 | 
			
		||||
					resolved_conflict = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* check if all files of the dir belong to the installed pkg */
 | 
			
		||||
			if(!resolved_conflict && S_ISDIR(lsbuf.st_mode) && dbpkg) {
 | 
			
		||||
				char *dir = malloc(strlen(filestr) + 2);
 | 
			
		||||
				sprintf(dir, "%s/", filestr);
 | 
			
		||||
				if(alpm_list_find_str(alpm_pkg_get_files(dbpkg),dir)) {
 | 
			
		||||
					_alpm_log(PM_LOG_DEBUG, "check if all files in %s belongs to %s\n",
 | 
			
		||||
							dir, dbpkg->name);
 | 
			
		||||
					resolved_conflict = dir_belongsto_pkg(filestr, dbpkg);
 | 
			
		||||
				}
 | 
			
		||||
				free(dir);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(!resolved_conflict && dbpkg) {
 | 
			
		||||
				char *rpath = calloc(PATH_MAX+1, sizeof(char));
 | 
			
		||||
				if(!realpath(path, rpath)) {
 | 
			
		||||
					FREE(rpath);
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				char *filestr = rpath + strlen(handle->root);
 | 
			
		||||
				if(alpm_list_find_str(alpm_pkg_get_files(dbpkg),filestr)) {
 | 
			
		||||
					resolved_conflict = 1;
 | 
			
		||||
				}
 | 
			
		||||
				free(rpath);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(!resolved_conflict) {
 | 
			
		||||
				_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
 | 
			
		||||
				conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
 | 
			
		||||
						path, p1->name, NULL);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		FREELIST(tmpfiles);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  conflict.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
@@ -23,26 +24,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);
 | 
			
		||||
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans,
 | 
			
		||||
					 alpm_list_t *upgrade, alpm_list_t *remove);
 | 
			
		||||
 | 
			
		||||
void _alpm_fileconflict_free(pmfileconflict_t *conflict);
 | 
			
		||||
 | 
			
		||||
#endif /* _ALPM_CONFLICT_H */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										290
									
								
								lib/libalpm/db.c
									
									
									
									
									
								
							
							
						
						
									
										290
									
								
								lib/libalpm/db.c
									
									
									
									
									
								
							@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  db.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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 David Kimpe <dnaku@frugalware.org>
 | 
			
		||||
@@ -23,12 +24,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 +38,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"
 | 
			
		||||
@@ -89,9 +86,6 @@ static void _alpm_db_unregister(pmdb_t *db)
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "closing database '%s'\n", db->treename);
 | 
			
		||||
	_alpm_db_close(db);
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "unregistering database '%s'\n", db->treename);
 | 
			
		||||
	_alpm_db_free(db);
 | 
			
		||||
}
 | 
			
		||||
@@ -173,6 +167,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 +185,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 +205,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,19 +226,18 @@ 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;
 | 
			
		||||
 | 
			
		||||
	/* Sanity checks */
 | 
			
		||||
	ASSERT(handle != NULL, return(NULL));
 | 
			
		||||
	ASSERT(db != NULL, return(NULL));
 | 
			
		||||
	ASSERT(db->servers != 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -356,7 +262,7 @@ pmpkg_t SYMEXPORT *alpm_db_get_pkg(pmdb_t *db, const char *name)
 | 
			
		||||
 * @param db pointer to the package database to get the package from
 | 
			
		||||
 * @return the list of packages on success, NULL on error
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db)
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(pmdb_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
@@ -367,23 +273,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
 | 
			
		||||
@@ -405,7 +294,7 @@ pmgrp_t SYMEXPORT *alpm_db_readgrp(pmdb_t *db, const char *name)
 | 
			
		||||
 * @param db pointer to the package database to get the group from
 | 
			
		||||
 * @return the list of groups on success, NULL on error
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_getgrpcache(pmdb_t *db)
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_get_grpcache(pmdb_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
@@ -445,41 +334,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 +377,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,26 +385,24 @@ 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
 | 
			
		||||
			 * differently when we do match it since it isn't currently printed? */
 | 
			
		||||
			else {
 | 
			
		||||
			if(!matched) {
 | 
			
		||||
				/* check provides */
 | 
			
		||||
				for(k = alpm_pkg_get_provides(pkg); k; k = k->next) {
 | 
			
		||||
					if (regexec(®, k->data, 0, 0, 0) == 0) {
 | 
			
		||||
						matched = k->data;
 | 
			
		||||
@@ -524,6 +410,15 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if(!matched) {
 | 
			
		||||
				/* check groups */
 | 
			
		||||
				for(k = alpm_pkg_get_groups(pkg); k; k = k->next) {
 | 
			
		||||
					if (regexec(®, k->data, 0, 0, 0) == 0) {
 | 
			
		||||
						matched = k->data;
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(matched != NULL) {
 | 
			
		||||
				_alpm_log(PM_LOG_DEBUG, "    search target '%s' matched '%s'\n",
 | 
			
		||||
@@ -532,6 +427,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(®);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -540,10 +439,8 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
 | 
			
		||||
 | 
			
		||||
pmdb_t *_alpm_db_register_local(void)
 | 
			
		||||
{
 | 
			
		||||
	struct stat buf;
 | 
			
		||||
	pmdb_t *db;
 | 
			
		||||
	const char *dbpath;
 | 
			
		||||
	char path[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
@@ -554,40 +451,23 @@ pmdb_t *_alpm_db_register_local(void)
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "registering local database\n");
 | 
			
		||||
 | 
			
		||||
	/* make sure the database directory exists */
 | 
			
		||||
	dbpath = alpm_option_get_dbpath();
 | 
			
		||||
	if(!dbpath) {
 | 
			
		||||
		_alpm_log(PM_LOG_ERROR, _("database path is undefined\n"));
 | 
			
		||||
			RET_ERR(PM_ERR_DB_OPEN, NULL);
 | 
			
		||||
	}
 | 
			
		||||
	snprintf(path, PATH_MAX, "%slocal", dbpath);
 | 
			
		||||
	/* TODO this is rediculous, we try to do this even if we can't */
 | 
			
		||||
	if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
 | 
			
		||||
				path);
 | 
			
		||||
		if(_alpm_makepath(path) != 0) {
 | 
			
		||||
			RET_ERR(PM_ERR_SYSTEM, NULL);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	db = _alpm_db_new(dbpath, "local");
 | 
			
		||||
	if(db == NULL) {
 | 
			
		||||
		RET_ERR(PM_ERR_DB_CREATE, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);
 | 
			
		||||
	if(_alpm_db_open(db) == -1) {
 | 
			
		||||
		_alpm_db_free(db);
 | 
			
		||||
		RET_ERR(PM_ERR_DB_OPEN, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	handle->db_local = db;
 | 
			
		||||
	return(db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pmdb_t *_alpm_db_register_sync(const char *treename)
 | 
			
		||||
{
 | 
			
		||||
	struct stat buf;
 | 
			
		||||
	pmdb_t *db;
 | 
			
		||||
	const char *dbpath;
 | 
			
		||||
	char path[PATH_MAX];
 | 
			
		||||
@@ -605,25 +485,12 @@ pmdb_t *_alpm_db_register_sync(const char *treename)
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "registering sync database '%s'\n", treename);
 | 
			
		||||
 | 
			
		||||
	/* make sure the database directory exists */
 | 
			
		||||
	dbpath = alpm_option_get_dbpath();
 | 
			
		||||
	if(!dbpath) {
 | 
			
		||||
		_alpm_log(PM_LOG_ERROR, _("database path is undefined\n"));
 | 
			
		||||
			RET_ERR(PM_ERR_DB_OPEN, NULL);
 | 
			
		||||
	}
 | 
			
		||||
	/* all sync DBs now reside in the sync/ subdir of the dbpath */
 | 
			
		||||
	snprintf(path, PATH_MAX, "%ssync/%s", dbpath, treename);
 | 
			
		||||
	/* TODO this is rediculous, we try to do this even if we can't */
 | 
			
		||||
	if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
 | 
			
		||||
		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
 | 
			
		||||
				path);
 | 
			
		||||
		if(_alpm_makepath(path) != 0) {
 | 
			
		||||
			RET_ERR(PM_ERR_SYSTEM, NULL);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Ensure the db gets the real path. */
 | 
			
		||||
	path[0] = '\0';
 | 
			
		||||
	snprintf(path, PATH_MAX, "%ssync/", dbpath);
 | 
			
		||||
 | 
			
		||||
	db = _alpm_db_new(path, treename);
 | 
			
		||||
@@ -631,57 +498,8 @@ pmdb_t *_alpm_db_register_sync(const char *treename)
 | 
			
		||||
		RET_ERR(PM_ERR_DB_CREATE, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);
 | 
			
		||||
	if(_alpm_db_open(db) == -1) {
 | 
			
		||||
		_alpm_db_free(db);
 | 
			
		||||
		RET_ERR(PM_ERR_DB_OPEN, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	handle->dbs_sync = alpm_list_add(handle->dbs_sync, db);
 | 
			
		||||
	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: */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  db.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
 *
 | 
			
		||||
@@ -40,9 +41,10 @@ typedef enum _pmdbinfrq_t {
 | 
			
		||||
/* Database */
 | 
			
		||||
struct __pmdb_t {
 | 
			
		||||
	char *path;
 | 
			
		||||
	char treename[PATH_MAX];
 | 
			
		||||
	void *handle;
 | 
			
		||||
	char *treename;
 | 
			
		||||
	unsigned short pkgcache_loaded;
 | 
			
		||||
	alpm_list_t *pkgcache;
 | 
			
		||||
	unsigned short grpcache_loaded;
 | 
			
		||||
	alpm_list_t *grpcache;
 | 
			
		||||
	alpm_list_t *servers;
 | 
			
		||||
};
 | 
			
		||||
@@ -50,26 +52,17 @@ 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,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  delta.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2007-2006 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 +22,17 @@
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdint.h> /* intmax_t */
 | 
			
		||||
#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 +41,259 @@
 | 
			
		||||
 | 
			
		||||
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_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)
 | 
			
		||||
{
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	/* Sanity checks */
 | 
			
		||||
	ASSERT(delta != NULL, return(-1));
 | 
			
		||||
 | 
			
		||||
	return(delta->size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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_compute_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);
 | 
			
		||||
		if(fpath) {
 | 
			
		||||
			v->weight = vdelta->download_size;
 | 
			
		||||
		}
 | 
			
		||||
		FREE(fpath);
 | 
			
		||||
 | 
			
		||||
		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) {
 | 
			
		||||
				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, 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) {
 | 
			
		||||
			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 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, 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 for '%s'\n", to);
 | 
			
		||||
 | 
			
		||||
	vertices = delta_graph_init(deltas);
 | 
			
		||||
 | 
			
		||||
	bestsize = delta_vert(vertices, to, &bestpath);
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "delta shortest-path search complete : '%jd'\n", (intmax_t)bestsize);
 | 
			
		||||
 | 
			
		||||
	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:
 | 
			
		||||
 * $deltafile $deltamd5 $deltasize $oldfile $newfile
 | 
			
		||||
 * @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} [[:digit:]]*"
 | 
			
		||||
			" [^[:space:]]* [^[:space:]]*$",
 | 
			
		||||
			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->delta, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
 | 
			
		||||
 | 
			
		||||
	tmp2 = tmp;
 | 
			
		||||
	tmp = strchr(tmp, ' ');
 | 
			
		||||
	*(tmp++) = '\0';
 | 
			
		||||
	strncpy(delta->to, tmp2, DLT_VERSION_LEN);
 | 
			
		||||
	STRDUP(delta->delta_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
 | 
			
		||||
 | 
			
		||||
	tmp2 = tmp;
 | 
			
		||||
	tmp = strchr(tmp, ' ');
 | 
			
		||||
	*(tmp++) = '\0';
 | 
			
		||||
	delta->size = atol(tmp2);
 | 
			
		||||
	delta->delta_size = atol(tmp2);
 | 
			
		||||
 | 
			
		||||
	tmp2 = tmp;
 | 
			
		||||
	tmp = strchr(tmp, ' ');
 | 
			
		||||
	*(tmp++) = '\0';
 | 
			
		||||
	strncpy(delta->filename, tmp2, DLT_FILENAME_LEN);
 | 
			
		||||
	STRDUP(delta->from, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
 | 
			
		||||
 | 
			
		||||
	strncpy(delta->md5sum, tmp, DLT_MD5SUM_LEN);
 | 
			
		||||
	tmp2 = tmp;
 | 
			
		||||
	STRDUP(delta->to, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
 | 
			
		||||
 | 
			
		||||
	_alpm_log(PM_LOG_DEBUG, "delta : %s %s '%lld'\n", delta->from, delta->to, (long long)delta->delta_size);
 | 
			
		||||
 | 
			
		||||
	return(delta);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _alpm_delta_free(pmdelta_t *delta)
 | 
			
		||||
{
 | 
			
		||||
	FREE(delta->from);
 | 
			
		||||
	FREE(delta->to);
 | 
			
		||||
	FREE(delta->delta);
 | 
			
		||||
	FREE(delta->delta_md5);
 | 
			
		||||
	FREE(delta);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* vim: set ts=2 sw=2 noet: */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  delta.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2007-2006 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 +20,29 @@
 | 
			
		||||
#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 delta patch */
 | 
			
		||||
	char *delta;
 | 
			
		||||
	/** md5sum of the delta file */
 | 
			
		||||
	char *delta_md5;
 | 
			
		||||
	/** filesize of the delta file */
 | 
			
		||||
	off_t delta_size;
 | 
			
		||||
	/** filename of the 'before' file */
 | 
			
		||||
	char *from;
 | 
			
		||||
	/** filename of the 'after' file */
 | 
			
		||||
	char *to;
 | 
			
		||||
	/** 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, alpm_list_t **path);
 | 
			
		||||
 | 
			
		||||
#endif /* _ALPM_DELTA_H */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  deps.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
 *
 | 
			
		||||
@@ -30,37 +31,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 +53,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 +92,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 +104,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 +131,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 +151,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 +176,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,21 +190,53 @@ 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.
 | 
			
		||||
 * Dependencies can include versions with depmod operators.
 | 
			
		||||
 * @param pkglist the list of local packages
 | 
			
		||||
 * @param reversedeps handles the backward dependencies
 | 
			
		||||
 * @param remove an alpm_list_t* of packages to be removed
 | 
			
		||||
 * @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade)
 | 
			
		||||
 * @return an alpm_list_t* of pmpkg_t* of missing_t pointers.
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_list_t *pkglist, int reversedeps,
 | 
			
		||||
		alpm_list_t *remove, alpm_list_t *upgrade)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i, *j;
 | 
			
		||||
@@ -232,12 +246,8 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(db == NULL) {
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	targets = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
 | 
			
		||||
	for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
 | 
			
		||||
	for(i = pkglist; i; i = i->next) {
 | 
			
		||||
		void *pkg = i->data;
 | 
			
		||||
		if(alpm_list_find(targets, pkg, _alpm_pkg_cmp)) {
 | 
			
		||||
			modified = alpm_list_add(modified, pkg);
 | 
			
		||||
@@ -257,15 +267,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);
 | 
			
		||||
				char *missdepstring = alpm_dep_compute_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);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -278,18 +287,18 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
 | 
			
		||||
			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)) {
 | 
			
		||||
					char *missdepstring = alpm_dep_get_string(depend);
 | 
			
		||||
				if(causingpkg &&
 | 
			
		||||
				   !_alpm_find_dep_satisfier(upgrade, depend) &&
 | 
			
		||||
				   !_alpm_find_dep_satisfier(dblist, depend)) {
 | 
			
		||||
					char *missdepstring = alpm_dep_compute_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);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -309,7 +318,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;
 | 
			
		||||
@@ -345,7 +354,6 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
 | 
			
		||||
			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
 | 
			
		||||
@@ -357,7 +365,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;
 | 
			
		||||
@@ -366,9 +374,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. */
 | 
			
		||||
@@ -392,25 +400,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
 | 
			
		||||
@@ -418,9 +437,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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -440,15 +459,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);
 | 
			
		||||
@@ -466,7 +482,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;
 | 
			
		||||
 | 
			
		||||
@@ -476,149 +492,195 @@ 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
 | 
			
		||||
 *
 | 
			
		||||
 * @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)
 | 
			
		||||
 * @param dep is the dependency to search for
 | 
			
		||||
 * @param dbs are the databases to search
 | 
			
		||||
 * @param excluding are the packages to exclude from the search
 | 
			
		||||
 * @param prompt if true, will cause an unresolvable dependency to issue an
 | 
			
		||||
 *        interactive prompt asking whether the package should be removed from
 | 
			
		||||
 *        the transaction or the transaction aborted; if false, simply returns
 | 
			
		||||
 *        an error code without prompting
 | 
			
		||||
 * @return the resolved package
 | 
			
		||||
 **/
 | 
			
		||||
pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs,
 | 
			
		||||
		alpm_list_t *excluding, int prompt)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i, *j, *k;
 | 
			
		||||
	alpm_list_t *i, *j;
 | 
			
		||||
	int ignored = 0;
 | 
			
		||||
	/* 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 = 0;
 | 
			
		||||
				if (prompt) {
 | 
			
		||||
					QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
 | 
			
		||||
							 NULL, NULL, &install);
 | 
			
		||||
				} else {
 | 
			
		||||
					_alpm_log(PM_LOG_WARNING, _("ignoring package %s-%s\n"), pkg->name, pkg->version);
 | 
			
		||||
				}
 | 
			
		||||
				if(!install) {
 | 
			
		||||
					ignored = 1;
 | 
			
		||||
					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 = 0;
 | 
			
		||||
					if (prompt) {
 | 
			
		||||
						QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG,
 | 
			
		||||
									pkg, NULL, NULL, &install);
 | 
			
		||||
					} else {
 | 
			
		||||
						_alpm_log(PM_LOG_WARNING, _("ignoring package %s-%s\n"), pkg->name, pkg->version);
 | 
			
		||||
					}
 | 
			
		||||
					if(!install) {
 | 
			
		||||
						ignored = 1;
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				_alpm_log(PM_LOG_WARNING, _("provider package was selected (%s provides %s)\n"),
 | 
			
		||||
				                         pkg->name, dep->name);
 | 
			
		||||
				return(pkg);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(ignored) { /* resolvedeps will override these */
 | 
			
		||||
		pm_errno = PM_ERR_PKG_IGNORED;
 | 
			
		||||
	} else {
 | 
			
		||||
		pm_errno = PM_ERR_PKG_NOT_FOUND;
 | 
			
		||||
	}
 | 
			
		||||
	return(NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Computes resolvable dependencies for a given package and adds that package
 | 
			
		||||
 * and those resolvable dependencies to a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param local is the local database
 | 
			
		||||
 * @param dbs_sync are the sync databases
 | 
			
		||||
 * @param pkg is the package to resolve
 | 
			
		||||
 * @param packages is a pointer to a list of packages which will be
 | 
			
		||||
 *        searched first for any dependency packages needed to complete the
 | 
			
		||||
 *        resolve, and to which will be added any [pkg] and all of its
 | 
			
		||||
 *        dependencies not already on the list
 | 
			
		||||
 * @param remove is the set of packages which will be removed in this
 | 
			
		||||
 *        transaction
 | 
			
		||||
 * @param data returns the dependency which could not be satisfied in the
 | 
			
		||||
 *        event of an error
 | 
			
		||||
 * @return 0 on success, with [pkg] and all of its dependencies not already on
 | 
			
		||||
 *         the [*packages] list added to that list, or -1 on failure due to an
 | 
			
		||||
 *         unresolvable dependency, in which case the [*packages] list will be
 | 
			
		||||
 *         unmodified by this function
 | 
			
		||||
 */
 | 
			
		||||
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *pkg,
 | 
			
		||||
                      alpm_list_t *preferred, alpm_list_t **packages,
 | 
			
		||||
                      alpm_list_t *remove, alpm_list_t **data)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i, *j;
 | 
			
		||||
	alpm_list_t *targ;
 | 
			
		||||
	alpm_list_t *deps = NULL;
 | 
			
		||||
	alpm_list_t *packages_copy;
 | 
			
		||||
 | 
			
		||||
	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) {
 | 
			
		||||
	if(_alpm_pkg_find(*packages, pkg->name) != 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;
 | 
			
		||||
	/* Create a copy of the packages list, so that it can be restored
 | 
			
		||||
	   on error */
 | 
			
		||||
	packages_copy = alpm_list_copy(*packages);
 | 
			
		||||
	/* [pkg] has not already been resolved into the packages list, so put it
 | 
			
		||||
	   on that list */
 | 
			
		||||
	*packages = alpm_list_add(*packages, pkg);
 | 
			
		||||
 | 
			
		||||
		/* 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)) {
 | 
			
		||||
				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_DEBUG, "started resolving dependencies\n");
 | 
			
		||||
	for(i = alpm_list_last(*packages); i; i = i->next) {
 | 
			
		||||
		pmpkg_t *tpkg = i->data;
 | 
			
		||||
		targ = alpm_list_add(NULL, tpkg);
 | 
			
		||||
		deps = alpm_checkdeps(_alpm_db_get_pkgcache(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 the [*packages] list already satisfies this dependency */
 | 
			
		||||
			if(_alpm_find_dep_satisfier(*packages, missdep)) {
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			/* check if one of the packages in the [preferred] list already satisfies this dependency */
 | 
			
		||||
			pmpkg_t *spkg = _alpm_find_dep_satisfier(preferred, missdep);
 | 
			
		||||
			if(!spkg) {
 | 
			
		||||
				/* find a satisfier package in the given repositories */
 | 
			
		||||
				spkg = _alpm_resolvedep(missdep, dbs_sync, *packages, 0);
 | 
			
		||||
			}
 | 
			
		||||
			if(!spkg) {
 | 
			
		||||
				pm_errno = PM_ERR_UNSATISFIED_DEPS;
 | 
			
		||||
				char *missdepstring = alpm_dep_compute_string(missdep);
 | 
			
		||||
				_alpm_log(PM_LOG_WARNING, _("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(*packages);
 | 
			
		||||
				*packages = packages_copy;
 | 
			
		||||
				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));
 | 
			
		||||
				*packages = alpm_list_add(*packages, spkg);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if(found) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		alpm_list_free_inner(deps, (alpm_list_fn_free)_alpm_depmiss_free);
 | 
			
		||||
		alpm_list_free(deps);
 | 
			
		||||
	}
 | 
			
		||||
	alpm_list_free(packages_copy);
 | 
			
		||||
	_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)
 | 
			
		||||
@@ -628,7 +690,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)
 | 
			
		||||
@@ -638,7 +710,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)
 | 
			
		||||
@@ -648,7 +720,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)
 | 
			
		||||
@@ -658,7 +730,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)
 | 
			
		||||
@@ -668,7 +740,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.
 | 
			
		||||
@@ -676,9 +748,9 @@ const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
 | 
			
		||||
 * @param dep the depend to turn into a string
 | 
			
		||||
 * @return a string-formatted dependency with operator if necessary
 | 
			
		||||
 */
 | 
			
		||||
char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
 | 
			
		||||
char SYMEXPORT *alpm_dep_compute_string(const pmdepend_t *dep)
 | 
			
		||||
{
 | 
			
		||||
	char *opr, *str = NULL;
 | 
			
		||||
	char *name, *opr, *ver, *str = NULL;
 | 
			
		||||
	size_t len;
 | 
			
		||||
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
@@ -686,6 +758,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 = "";
 | 
			
		||||
@@ -710,11 +788,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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  deps.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
 *
 | 
			
		||||
@@ -29,31 +30,31 @@
 | 
			
		||||
/* 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, int prompt);
 | 
			
		||||
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *pkg,
 | 
			
		||||
		alpm_list_t *preferred, alpm_list_t **packages, 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 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										372
									
								
								lib/libalpm/dload.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										372
									
								
								lib/libalpm/dload.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,372 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  download.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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 <signal.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(INTERNAL_DOWNLOAD)
 | 
			
		||||
#include <fetch.h>
 | 
			
		||||
#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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(INTERNAL_DOWNLOAD)
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Build a 'struct url' from an url. */
 | 
			
		||||
static struct url *url_for_string(const char *url)
 | 
			
		||||
{
 | 
			
		||||
	struct url *ret = NULL;
 | 
			
		||||
	ret = fetchParseURL(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) {
 | 
			
		||||
	fetchIO *dlf = NULL;
 | 
			
		||||
	FILE *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 sigaction new_action, old_action;
 | 
			
		||||
	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"));
 | 
			
		||||
 | 
			
		||||
	/* libfetch does not reset the error code */
 | 
			
		||||
	fetchLastErrCode = 0;
 | 
			
		||||
 | 
			
		||||
	/* 10s timeout - TODO make a config option */
 | 
			
		||||
	fetchTimeout = 10000;
 | 
			
		||||
 | 
			
		||||
	/* ignore any SIGPIPE signals- these may occur if our FTP socket dies or
 | 
			
		||||
	 * something along those lines. Store the old signal handler first. */
 | 
			
		||||
	new_action.sa_handler = SIG_IGN;
 | 
			
		||||
	sigemptyset(&new_action.sa_mask);
 | 
			
		||||
	sigaction(SIGPIPE, NULL, &old_action);
 | 
			
		||||
	sigaction(SIGPIPE, &new_action, NULL);
 | 
			
		||||
 | 
			
		||||
	dlf = fetchXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));
 | 
			
		||||
 | 
			
		||||
	if(fetchLastErrCode != 0 || dlf == NULL) {
 | 
			
		||||
		const char *host = _("disk");
 | 
			
		||||
		if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) {
 | 
			
		||||
			host = fileurl->host;
 | 
			
		||||
		}
 | 
			
		||||
		pm_errno = PM_ERR_LIBFETCH;
 | 
			
		||||
		_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
 | 
			
		||||
				filename, host, fetchLastErrString);
 | 
			
		||||
		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 = fetchIO_read(dlf, buffer, PM_DLBUF_LEN)) > 0) {
 | 
			
		||||
		size_t 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"),
 | 
			
		||||
						destfile, strerror(errno));
 | 
			
		||||
				ret = -1;
 | 
			
		||||
				goto cleanup;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		dl_thisfile += nread;
 | 
			
		||||
 | 
			
		||||
		if(handle->dlcb) {
 | 
			
		||||
			handle->dlcb(filename, dl_thisfile, ust.size);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* did the transfer complete normally? */
 | 
			
		||||
	if (ust.size != -1 && dl_thisfile < ust.size) {
 | 
			
		||||
		pm_errno = PM_ERR_LIBFETCH;
 | 
			
		||||
		_alpm_log(PM_LOG_ERROR, _("%s appears to be truncated: %jd/%jd bytes\n"),
 | 
			
		||||
				filename, (intmax_t)dl_thisfile, (intmax_t)ust.size);
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* 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;
 | 
			
		||||
	fetchIO_close(dlf);
 | 
			
		||||
	dlf = NULL;
 | 
			
		||||
 | 
			
		||||
	rename(tempfile, destfile);
 | 
			
		||||
	ret = 0;
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
	/* restore any existing SIGPIPE signal handler */
 | 
			
		||||
	sigaction(SIGPIPE, &old_action, NULL);
 | 
			
		||||
 | 
			
		||||
	FREE(tempfile);
 | 
			
		||||
	FREE(destfile);
 | 
			
		||||
	if(localf != NULL) {
 | 
			
		||||
		fclose(localf);
 | 
			
		||||
	}
 | 
			
		||||
	if(dlf != NULL) {
 | 
			
		||||
		fetchIO_close(dlf);
 | 
			
		||||
	}
 | 
			
		||||
	fetchFreeURL(fileurl);
 | 
			
		||||
	return(ret);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int download(const char *url, const char *localpath,
 | 
			
		||||
		time_t mtimeold, time_t *mtimenew) {
 | 
			
		||||
	if(handle->fetchcb == NULL) {
 | 
			
		||||
#if defined(INTERNAL_DOWNLOAD)
 | 
			
		||||
		return(download_internal(url, localpath, mtimeold, mtimenew));
 | 
			
		||||
#else
 | 
			
		||||
		RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
 | 
			
		||||
#endif
 | 
			
		||||
	} else {
 | 
			
		||||
		int ret = handle->fetchcb(url, localpath, mtimeold, mtimenew);
 | 
			
		||||
		if(ret == -1) {
 | 
			
		||||
			RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
 | 
			
		||||
		}
 | 
			
		||||
		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;
 | 
			
		||||
 | 
			
		||||
	ASSERT(servers != NULL, RET_ERR(PM_ERR_SERVER_NONE, -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,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  error.h
 | 
			
		||||
 *  dload.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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 +17,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,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  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) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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 +20,25 @@
 | 
			
		||||
 | 
			
		||||
#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(INTERNAL_DOWNLOAD)
 | 
			
		||||
#include <fetch.h> /* 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 +85,8 @@ 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");
 | 
			
		||||
		case PM_ERR_SERVER_NONE:
 | 
			
		||||
			return _("no servers configured for repository");
 | 
			
		||||
		/* Transactions */
 | 
			
		||||
		case PM_ERR_TRANS_NOT_NULL:
 | 
			
		||||
			return _("transaction already initialized");
 | 
			
		||||
@@ -96,39 +102,28 @@ const char SYMEXPORT *alpm_strerror(int err)
 | 
			
		||||
			return _("transaction aborted");
 | 
			
		||||
		case PM_ERR_TRANS_TYPE:
 | 
			
		||||
			return _("operation not compatible with the transaction type");
 | 
			
		||||
		case PM_ERR_TRANS_COMMITING:
 | 
			
		||||
			return _("could not commit transaction");
 | 
			
		||||
		case PM_ERR_TRANS_DOWNLOADING:
 | 
			
		||||
			return _("could not download all files");
 | 
			
		||||
		case PM_ERR_TRANS_NOT_LOCKED:
 | 
			
		||||
			return _("transaction commit attempt when database is not locked");
 | 
			
		||||
		/* Packages */
 | 
			
		||||
		case PM_ERR_PKG_NOT_FOUND:
 | 
			
		||||
			return _("could not find or read package");
 | 
			
		||||
		case PM_ERR_PKG_IGNORED:
 | 
			
		||||
			return _("operation cancelled due to ignorepkg");
 | 
			
		||||
		case PM_ERR_PKG_INVALID:
 | 
			
		||||
			return _("invalid or corrupted package");
 | 
			
		||||
		case PM_ERR_PKG_OPEN:
 | 
			
		||||
			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 */
 | 
			
		||||
		case PM_ERR_GRP_NOT_FOUND:
 | 
			
		||||
			return _("group not found");
 | 
			
		||||
		/* Dependencies */
 | 
			
		||||
		case PM_ERR_UNSATISFIED_DEPS:
 | 
			
		||||
			return _("could not satisfy dependencies");
 | 
			
		||||
@@ -137,20 +132,25 @@ const char SYMEXPORT *alpm_strerror(int err)
 | 
			
		||||
		case PM_ERR_FILE_CONFLICTS:
 | 
			
		||||
			return _("conflicting files");
 | 
			
		||||
		/* Miscellaenous */
 | 
			
		||||
		case PM_ERR_USER_ABORT:
 | 
			
		||||
			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_RETRIEVE:
 | 
			
		||||
			return _("failed to retrieve some files");
 | 
			
		||||
		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_LIBFETCH:
 | 
			
		||||
#if defined(INTERNAL_DOWNLOAD)
 | 
			
		||||
			return fetchLastErrString;
 | 
			
		||||
#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");
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										59
									
								
								lib/libalpm/graph.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								lib/libalpm/graph.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  graph.h - helpful graph structure and setup/teardown methods
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  group.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
@@ -27,17 +28,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 +51,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 +67,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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  group.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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,19 +20,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 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  handle.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
 *
 | 
			
		||||
@@ -23,7 +24,6 @@
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <syslog.h>
 | 
			
		||||
@@ -36,10 +36,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;
 | 
			
		||||
@@ -51,18 +49,7 @@ pmhandle_t *_alpm_handle_new()
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	CALLOC(handle, 1, sizeof(pmhandle_t), RET_ERR(PM_ERR_MEMORY, NULL));
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
	handle->lockfile = NULL;
 | 
			
		||||
	handle->logfile = NULL;
 | 
			
		||||
	handle->usedelta = 0;
 | 
			
		||||
 | 
			
		||||
	return(handle);
 | 
			
		||||
}
 | 
			
		||||
@@ -92,12 +79,10 @@ void _alpm_handle_free(pmhandle_t *handle)
 | 
			
		||||
	FREELIST(handle->cachedirs);
 | 
			
		||||
	FREE(handle->logfile);
 | 
			
		||||
	FREE(handle->lockfile);
 | 
			
		||||
	FREE(handle->xfercommand);
 | 
			
		||||
	FREELIST(handle->dbs_sync);
 | 
			
		||||
	FREELIST(handle->noupgrade);
 | 
			
		||||
	FREELIST(handle->noextract);
 | 
			
		||||
	FREELIST(handle->ignorepkg);
 | 
			
		||||
	FREELIST(handle->holdpkg);
 | 
			
		||||
	FREELIST(handle->ignoregrp);
 | 
			
		||||
	FREE(handle);
 | 
			
		||||
}
 | 
			
		||||
@@ -120,6 +105,24 @@ alpm_cb_download SYMEXPORT alpm_option_get_dlcb()
 | 
			
		||||
	return handle->dlcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb()
 | 
			
		||||
{
 | 
			
		||||
	if (handle == NULL) {
 | 
			
		||||
		pm_errno = PM_ERR_HANDLE_NULL;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return handle->fetchcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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) {
 | 
			
		||||
@@ -201,15 +204,6 @@ alpm_list_t SYMEXPORT *alpm_option_get_ignorepkgs()
 | 
			
		||||
	return handle->ignorepkg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_option_get_holdpkgs()
 | 
			
		||||
{
 | 
			
		||||
	if (handle == NULL) {
 | 
			
		||||
		pm_errno = PM_ERR_HANDLE_NULL;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return handle->holdpkg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps()
 | 
			
		||||
{
 | 
			
		||||
	if (handle == NULL) {
 | 
			
		||||
@@ -219,15 +213,6 @@ alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps()
 | 
			
		||||
	return handle->ignoregrp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char SYMEXPORT *alpm_option_get_xfercommand()
 | 
			
		||||
{
 | 
			
		||||
	if (handle == NULL) {
 | 
			
		||||
		pm_errno = PM_ERR_HANDLE_NULL;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return handle->xfercommand;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned short SYMEXPORT alpm_option_get_nopassiveftp()
 | 
			
		||||
{
 | 
			
		||||
	if (handle == NULL) {
 | 
			
		||||
@@ -273,6 +258,24 @@ void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb)
 | 
			
		||||
	handle->dlcb = cb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT alpm_option_set_fetchcb(alpm_cb_fetch cb)
 | 
			
		||||
{
 | 
			
		||||
	if (handle == NULL) {
 | 
			
		||||
		pm_errno = PM_ERR_HANDLE_NULL;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	handle->fetchcb = 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;
 | 
			
		||||
@@ -292,6 +295,7 @@ int SYMEXPORT alpm_option_set_root(const char *root)
 | 
			
		||||
 | 
			
		||||
	realroot = calloc(PATH_MAX+1, sizeof(char));
 | 
			
		||||
	if(!realpath(root, realroot)) {
 | 
			
		||||
		FREE(realroot);
 | 
			
		||||
		pm_errno = PM_ERR_NOT_A_DIR;
 | 
			
		||||
		return(-1);
 | 
			
		||||
	}
 | 
			
		||||
@@ -386,7 +390,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 +401,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 +430,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 +454,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 +476,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);
 | 
			
		||||
@@ -496,32 +498,8 @@ void SYMEXPORT 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);
 | 
			
		||||
	if(vdata != NULL) {
 | 
			
		||||
		FREE(vdata);
 | 
			
		||||
		return(1);
 | 
			
		||||
	}
 | 
			
		||||
	return(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT alpm_option_add_holdpkg(const char *pkg)
 | 
			
		||||
{
 | 
			
		||||
	handle->holdpkg = alpm_list_add(handle->holdpkg, strdup(pkg));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT alpm_option_set_holdpkgs(alpm_list_t *holdpkgs)
 | 
			
		||||
{
 | 
			
		||||
	if(handle->holdpkg) FREELIST(handle->holdpkg);
 | 
			
		||||
	if(holdpkgs) handle->holdpkg = 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->ignorepkg = alpm_list_remove_str(handle->ignorepkg, pkg, &vdata);
 | 
			
		||||
	if(vdata != NULL) {
 | 
			
		||||
		FREE(vdata);
 | 
			
		||||
		return(1);
 | 
			
		||||
@@ -542,9 +520,8 @@ void SYMEXPORT 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);
 | 
			
		||||
@@ -552,12 +529,6 @@ int SYMEXPORT alpm_option_remove_ignoregrp(const char *grp)
 | 
			
		||||
	return(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT alpm_option_set_xfercommand(const char *cmd)
 | 
			
		||||
{
 | 
			
		||||
	if(handle->xfercommand) FREE(handle->xfercommand);
 | 
			
		||||
	if(cmd) handle->xfercommand = strdup(cmd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT alpm_option_set_nopassiveftp(unsigned short nopasv)
 | 
			
		||||
{
 | 
			
		||||
	handle->nopassiveftp = nopasv;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  handle.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
@@ -30,7 +31,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 +40,8 @@ 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 */
 | 
			
		||||
	alpm_cb_fetch fetchcb; /* Download file callback function */
 | 
			
		||||
 | 
			
		||||
	/* filesystem paths */
 | 
			
		||||
	char *root;              /* Root path, default '/' */
 | 
			
		||||
@@ -50,15 +52,13 @@ 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 */
 | 
			
		||||
 | 
			
		||||
	/* options */
 | 
			
		||||
	unsigned short usesyslog;    /* Use syslog instead of logfile? */ /* TODO move to frontend */
 | 
			
		||||
	unsigned short nopassiveftp; /* Don't use PASV ftp connections */
 | 
			
		||||
	char *xfercommand;        /* External download command */
 | 
			
		||||
	unsigned short usedelta;     /* Download deltas if possible */
 | 
			
		||||
} pmhandle_t;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  log.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
@@ -30,7 +31,6 @@
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "handle.h"
 | 
			
		||||
#include "util.h"
 | 
			
		||||
#include "error.h"
 | 
			
		||||
#include "alpm.h"
 | 
			
		||||
 | 
			
		||||
/** \addtogroup alpm_log Logging Functions
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  log.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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)))
 | 
			
		||||
 | 
			
		||||
@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  package.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
@@ -30,8 +31,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 +41,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 +52,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 +77,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 +87,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 +108,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 +117,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 +225,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 +239,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 +295,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;
 | 
			
		||||
@@ -489,6 +423,22 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_backup(pmpkg_t *pkg)
 | 
			
		||||
	return pkg->backup;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_pkg_get_removes(pmpkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return(NULL));
 | 
			
		||||
 | 
			
		||||
	return(pkg->removes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pmdb_t SYMEXPORT *alpm_pkg_get_db(pmpkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	/* Sanity checks */
 | 
			
		||||
	ASSERT(pkg != NULL, return(NULL));
 | 
			
		||||
	ASSERT(pkg->origin == PKG_FROM_CACHE, return(NULL));
 | 
			
		||||
 | 
			
		||||
	return(pkg->origin_data.db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open a package changelog for reading. Similar to fopen in functionality,
 | 
			
		||||
 * except that the returned 'file stream' could really be from an archive
 | 
			
		||||
@@ -519,7 +469,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 +567,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 +579,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 +768,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 +829,60 @@ 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);
 | 
			
		||||
	alpm_list_free(pkg->removes);
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
/* Free transaction specific fields */
 | 
			
		||||
void _alpm_pkg_free_trans(pmpkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ALPM_LOG_FUNC;
 | 
			
		||||
 | 
			
		||||
	if(pkg == NULL) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	alpm_list_free(pkg->removes);
 | 
			
		||||
	pkg->removes = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 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 +892,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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  package.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
@@ -23,7 +24,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 +35,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 +62,8 @@ struct __pmpkg_t {
 | 
			
		||||
	alpm_list_t *conflicts;
 | 
			
		||||
	alpm_list_t *provides;
 | 
			
		||||
	alpm_list_t *deltas;
 | 
			
		||||
	alpm_list_t *delta_path;
 | 
			
		||||
	alpm_list_t *removes; /* in transaction targets only */
 | 
			
		||||
	/* internal */
 | 
			
		||||
	pmpkgfrom_t origin;
 | 
			
		||||
	/* Replaced 'void *data' with this union as follows:
 | 
			
		||||
@@ -85,14 +77,13 @@ 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);
 | 
			
		||||
void _alpm_pkg_free_trans(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);
 | 
			
		||||
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,16 @@
 | 
			
		||||
# Set of available languages.
 | 
			
		||||
cs_CZ
 | 
			
		||||
cs
 | 
			
		||||
de
 | 
			
		||||
en_GB
 | 
			
		||||
es
 | 
			
		||||
fr
 | 
			
		||||
hu
 | 
			
		||||
it
 | 
			
		||||
pl_PL
 | 
			
		||||
kk
 | 
			
		||||
pl
 | 
			
		||||
pt_BR
 | 
			
		||||
ru_RU
 | 
			
		||||
ro
 | 
			
		||||
ru
 | 
			
		||||
tr
 | 
			
		||||
uk
 | 
			
		||||
zh_CN
 | 
			
		||||
 
 | 
			
		||||
@@ -8,14 +8,14 @@ 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
 | 
			
		||||
# package.
 | 
			
		||||
COPYRIGHT_HOLDER = Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 | 
			
		||||
# This is the email address or URL to which the translators shall report
 | 
			
		||||
# bugs in the untranslated strings.
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										587
									
								
								lib/libalpm/po/cs.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										587
									
								
								lib/libalpm/po/cs.po
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,587 @@
 | 
			
		||||
# 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 <vojtech.gondzala@gmail.com>, 2007, 2008, 2009.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: cs\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
 | 
			
		||||
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
 | 
			
		||||
"PO-Revision-Date: 2009-07-29 14:14+0200\n"
 | 
			
		||||
"Last-Translator: Vojtěch Gondžala <vojtech.gondzala@gmail.com>\n"
 | 
			
		||||
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"X-Generator: Lokalize 1.0\n"
 | 
			
		||||
"Plural-Forms:  nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "replacing older version %s-%s by %s in target list\n"
 | 
			
		||||
msgstr "v seznamu cílů nahrazena starší verze %s-%s za %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting packages were found in the target list\n"
 | 
			
		||||
msgstr "v seznamu cílů byly nalezeny konfliktní balíčky\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "you cannot install two conflicting packages at the same time\n"
 | 
			
		||||
msgstr "nelze instalovat dva konfliktní balíčky současně\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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "you can replace packages manually using -Rd and -U\n"
 | 
			
		||||
msgstr "balíčky lze nahradit ručně použitím -Rd a -U\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory permissions differ on %s\n"
 | 
			
		||||
"filesystem: %o  package: %o\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"přístupová práva adresáře %s se neshodují\n"
 | 
			
		||||
"souborový systém: %o  balíček: %o\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr "rozbalení: adresář nebyl přepsán souborem %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: symlink %s does not point to dir\n"
 | 
			
		||||
msgstr "rozbalení: symbolický odkaz %s neodkazuje na adresář\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "nelze rozbalit %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s to %s (%s)\n"
 | 
			
		||||
msgstr "nelze přejmenovat %s na %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s saved as %s\n"
 | 
			
		||||
msgstr "%s byl uložen jako %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not install %s as %s (%s)\n"
 | 
			
		||||
msgstr "%s nelze nainstalovat jako %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s installed as %s\n"
 | 
			
		||||
msgstr "%s byl nainstalován jako %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extracting %s as %s.pacnew\n"
 | 
			
		||||
msgstr "%s byl rozbalen jako %s.pacnew\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "nelze určit aktuální pracovní adresář\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr "nastal problém při aktualizaci %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "nastal problém při instalaci %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database entry %s-%s\n"
 | 
			
		||||
msgstr "nelze aktualizovat záznam databáze %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr "nelze přidat položku '%s' do cache\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database %s\n"
 | 
			
		||||
msgstr "nelze odstranit záznam v databázi %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid name for database entry '%s'\n"
 | 
			
		||||
msgstr "chybný název záznamu v databázi '%s'\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr "poškozený záznam v databázi '%s'\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "nelze otevřít soubor %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
 | 
			
		||||
msgstr "databáze %s je nekonzistentní: nesouhlasí jméno balíčku %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
 | 
			
		||||
msgstr "databáze %s je nekonzistentní: nesouhlasí verze balíčku %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create directory %s: %s\n"
 | 
			
		||||
msgstr "nelze změnit adresář %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "nelze zpracovat soubor s popisem balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "chybí jméno balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "chybí veze balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "chyba při čtení balíčku %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "chybí metadata balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "attempt to re-register the 'local' DB\n"
 | 
			
		||||
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "cesta k databázi není definována\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "dependency cycle detected:\n"
 | 
			
		||||
msgstr "zjištěna cyklická závislost:\n"
 | 
			
		||||
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "ignoruje se balíček %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "provider package was selected (%s provides %s)\n"
 | 
			
		||||
msgstr "byl vybrán nahrazující balíček (%s poskytuje %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "nelze vyřešit \"%s\", závislost \"%s\"\n"
 | 
			
		||||
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "selhalo získání souboru '%s' z %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resume download, starting over\n"
 | 
			
		||||
msgstr "nelze navázat stahování, začíná se znovu\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot write to file '%s'\n"
 | 
			
		||||
msgstr "nelze zapisovat do souboru '%s'\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error writing to file '%s': %s\n"
 | 
			
		||||
msgstr "chyba při zápisu do souboru '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s se zdá být zkrácen:  %jd/%jd bytů\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "selhalo stahování %s\n"
 | 
			
		||||
 | 
			
		||||
#, 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 "no servers configured for repository"
 | 
			
		||||
msgstr "pro repositář nejsou nastaveny žádné servery"
 | 
			
		||||
 | 
			
		||||
#, 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 "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "pokus o uskutečnění transakce v době, kdy není uzamčena databáze"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "nelze nalézt nebo přečíst balíček"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "operace byla zrušena kvůli ignorovanému balíčku"
 | 
			
		||||
 | 
			
		||||
#, 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 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 "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 "failed to retrieve some files"
 | 
			
		||||
msgstr "selhalo získání některých souborů"
 | 
			
		||||
 | 
			
		||||
#, 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: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: ignoruje se aktualizace balíčku (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: ignoruje se ponížení verze balíčku (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: ponížení z verze %s na verzi %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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "ignoruje se náhrada balíčku (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "nelze nahradit soubor %s souborem %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "repository '%s' not found\n"
 | 
			
		||||
msgstr "repositář '%s' nebyl nalezen\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s je aktuální -- vynechat\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s je aktuální -- přeinstalovat\n"
 | 
			
		||||
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files from %s\n"
 | 
			
		||||
msgstr "selhalo získání některých souborů z %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create removal transaction\n"
 | 
			
		||||
msgstr "nelze vytvořit transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create transaction\n"
 | 
			
		||||
msgstr "nelze vytvořit transakci\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "nelze inicializovat transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize transaction\n"
 | 
			
		||||
msgstr "nelze inicializovat transakci\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr "nelze připravit transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "nelze provést transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr "nelze provést transakci\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "nelze odstranit zamykací soubor %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "nelze vytvořit dočasný adresář\n"
 | 
			
		||||
 | 
			
		||||
#, 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 remove tmpdir %s\n"
 | 
			
		||||
msgstr "nelze odstranit dočasný adresář %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open %s: %s\n"
 | 
			
		||||
msgstr "nelze otevřít %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "nelze změnit adresář na %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "nelze spustit nový proces (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "nelze změnit kořenový adresář (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr "nelze změnit adresář na / (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr "volání popen selhalo (%s)"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "volání waitpid selhalo (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr "příkaz se nepodařilo spustit správně\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "neexistuje cache %s, vytváří se...\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "couldn't create package cache, using /tmp instead\n"
 | 
			
		||||
msgstr "nelze vytvořit cache balíčků, používá se /tmp\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "error downloading '%s': %s\n"
 | 
			
		||||
#~ msgstr "chyba při stahování '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not chdir to %s\n"
 | 
			
		||||
#~ msgstr "nelze změnit adresář na %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "running XferCommand: fork failed!\n"
 | 
			
		||||
#~ msgstr "spouští se XferCommand: větvení selhalo!\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not commit transaction"
 | 
			
		||||
#~ msgstr "nelze provést transakci"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not download all files"
 | 
			
		||||
#~ msgstr "nelze stáhnout všechny soubory"
 | 
			
		||||
 | 
			
		||||
#~ msgid "cannot load package data"
 | 
			
		||||
#~ msgstr "nelze načíst data z balíčku"
 | 
			
		||||
 | 
			
		||||
#~ msgid "package not installed or lesser version"
 | 
			
		||||
#~ msgstr "balíček není nainstalovaný nebo má nižší verzi"
 | 
			
		||||
 | 
			
		||||
#~ msgid "group not found"
 | 
			
		||||
#~ msgstr "skupina nebyla nalezena"
 | 
			
		||||
 | 
			
		||||
#~ msgid "user aborted the operation"
 | 
			
		||||
#~ msgstr "uživatel zrušil operaci"
 | 
			
		||||
 | 
			
		||||
#~ msgid "internal error"
 | 
			
		||||
#~ msgstr "interní chyba"
 | 
			
		||||
 | 
			
		||||
#~ msgid "not confirmed"
 | 
			
		||||
#~ msgstr "nepotvrzeno"
 | 
			
		||||
 | 
			
		||||
#~ msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
 | 
			
		||||
#~ msgstr "%s-%s: ignoruje se aktualizace balíčku (měl být nahrazen %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "command: %s\n"
 | 
			
		||||
#~ msgstr "příkaz: %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not prepare transaction\n"
 | 
			
		||||
#~ msgstr "nelze připravit transakci\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"
 | 
			
		||||
@@ -1,655 +0,0 @@
 | 
			
		||||
# translation of cs_CZ.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, 2008.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: cs_CZ\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
 | 
			
		||||
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
 | 
			
		||||
"PO-Revision-Date: 2008-01-15 21:56+0100\n"
 | 
			
		||||
"Last-Translator: Vojtěch Gondžala <vogo@seznam.cz>\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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:86
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:166
 | 
			
		||||
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:167
 | 
			
		||||
msgid "you cannot install two conflicting packages at the same time\n"
 | 
			
		||||
msgstr "nemůžete instalovat dva konfliktní balíčky současně\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:170
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:171
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:377
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory permissions differ on %s\n"
 | 
			
		||||
"filesystem: %o  package: %o\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"přístupová práva adresáře v %s se liší\n"
 | 
			
		||||
"souborový systém: %o  balíček: %o\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:404
 | 
			
		||||
#, 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:411
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr "rozbalení: nepřepisuji adresář souborem %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "%s nelze rozbalit (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:517
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s (%s)\n"
 | 
			
		||||
msgstr "%s nelze přejmenovat (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 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:529 lib/libalpm/remove.c:238
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s saved as %s\n"
 | 
			
		||||
msgstr "%s uložen jako %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:568
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not install %s as %s: %s\n"
 | 
			
		||||
msgstr "%s nelze nainstalovat jako %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:571
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s installed as %s\n"
 | 
			
		||||
msgstr "%s nainstalován jako %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extracting %s as %s.pacnew\n"
 | 
			
		||||
msgstr "%s rozbaluji jako %s.pacnew\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "nelze určit aktuální pracovní adresář\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:777
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr "při aktualizaci %s nastal problém\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:782
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "při instalaci %s nastal problém\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:797
 | 
			
		||||
#, 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:805
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr "nelze přidat položku '%s' do keše\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_files.c:221
 | 
			
		||||
#, 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:291 lib/libalpm/be_files.c:428
 | 
			
		||||
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
 | 
			
		||||
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
 | 
			
		||||
#: lib/libalpm/package.c:885
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "nelze otevřít soubor %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:283
 | 
			
		||||
#, 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:551
 | 
			
		||||
msgid "attempt to re-register the 'local' DB\n"
 | 
			
		||||
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "cesta k databázi nebyla určena\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:171
 | 
			
		||||
msgid "dependency cycle detected:\n"
 | 
			
		||||
msgstr "zjištěna cyklická závislost:\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:173
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:175
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "nemohu získat \"%s\", závislost \"%s\"\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:41
 | 
			
		||||
msgid "out of memory!"
 | 
			
		||||
msgstr "nedostatek paměti!"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:43
 | 
			
		||||
msgid "unexpected system error"
 | 
			
		||||
msgstr "neočekávaná systémová chyba"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:45
 | 
			
		||||
msgid "insufficient privileges"
 | 
			
		||||
msgstr "nedostatečná oprávnění"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:47
 | 
			
		||||
msgid "could not find or read file"
 | 
			
		||||
msgstr "nelze najít nebo číst soubor"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:49
 | 
			
		||||
msgid "could not find or read directory"
 | 
			
		||||
msgstr "nelze najít nebo číst adresář"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:51
 | 
			
		||||
msgid "wrong or NULL argument passed"
 | 
			
		||||
msgstr "předán chybný nebo NULL argument"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:54
 | 
			
		||||
msgid "library not initialized"
 | 
			
		||||
msgstr "knihovna nebyla inicializována"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:56
 | 
			
		||||
msgid "library already initialized"
 | 
			
		||||
msgstr "knihovna inicializována"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:58
 | 
			
		||||
msgid "unable to lock database"
 | 
			
		||||
msgstr "nelze zamknout databázi"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:61
 | 
			
		||||
msgid "could not open database"
 | 
			
		||||
msgstr "nelze otevřít databázi"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:63
 | 
			
		||||
msgid "could not create database"
 | 
			
		||||
msgstr "nelze vytvořit databázi"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:65
 | 
			
		||||
msgid "database not initialized"
 | 
			
		||||
msgstr "databáze nebyla inicializována"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:67
 | 
			
		||||
msgid "database already registered"
 | 
			
		||||
msgstr "databáze zaregistrována"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:69
 | 
			
		||||
msgid "could not find database"
 | 
			
		||||
msgstr "nelze nalézt databázi"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:71
 | 
			
		||||
msgid "could not update database"
 | 
			
		||||
msgstr "nelze aktualizovat databázi"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:73
 | 
			
		||||
msgid "could not remove database entry"
 | 
			
		||||
msgstr "nelze odstranit položku databáze"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:76
 | 
			
		||||
msgid "invalid url for server"
 | 
			
		||||
msgstr "nesprávná URL pro server"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:83
 | 
			
		||||
msgid "could not set parameter"
 | 
			
		||||
msgstr "nelze nastavit parametr"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:86
 | 
			
		||||
msgid "transaction already initialized"
 | 
			
		||||
msgstr "transakce inicializována"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
 | 
			
		||||
msgid "transaction not initialized"
 | 
			
		||||
msgstr "transakce neinicializována"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:90
 | 
			
		||||
msgid "duplicate target"
 | 
			
		||||
msgstr "duplicitní cíl"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:94
 | 
			
		||||
msgid "transaction not prepared"
 | 
			
		||||
msgstr "transakce nepřipravena"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:96
 | 
			
		||||
msgid "transaction aborted"
 | 
			
		||||
msgstr "transakce zrušena"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
msgid "operation not compatible with the transaction type"
 | 
			
		||||
msgstr "operace není kompatibilní s typem transakce"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
msgid "could not commit transaction"
 | 
			
		||||
msgstr "nelze provést transakci"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
msgid "could not download all files"
 | 
			
		||||
msgstr "nelze stáhnout všechny soubory"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:105
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "nelze nalézt nebo přečíst balíček"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:107
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "neplatný nebo poškozený balíček"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
msgstr "nelze otevřít soubor balíčku"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
msgid "cannot load package data"
 | 
			
		||||
msgstr "nelze načíst data z balíčku"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
msgid "package already installed"
 | 
			
		||||
msgstr "balíček je již nainstalován"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
msgid "package not installed or lesser version"
 | 
			
		||||
msgstr "balíček není nainstalovaný nebo má nižší verzi"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
msgid "cannot remove all files for package"
 | 
			
		||||
msgstr "nelze odstranit všechny soubory balíčku"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
msgid "package name is not valid"
 | 
			
		||||
msgstr "jméno balíčku není platné"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
msgid "corrupted package"
 | 
			
		||||
msgstr "poškozený balíček"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
msgid "no such repository"
 | 
			
		||||
msgstr "není žádný takový repositář"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:126
 | 
			
		||||
msgid "corrupted delta"
 | 
			
		||||
msgstr "poškozený rozdíl"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:128
 | 
			
		||||
msgid "delta patch failed"
 | 
			
		||||
msgstr "rozdílový patch selhal"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:131
 | 
			
		||||
msgid "group not found"
 | 
			
		||||
msgstr "skupina nenalezena"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:134
 | 
			
		||||
msgid "could not satisfy dependencies"
 | 
			
		||||
msgstr "nelze vyřešit závislosti"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:136
 | 
			
		||||
msgid "conflicting dependencies"
 | 
			
		||||
msgstr "konfliktní závislosti"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:138
 | 
			
		||||
msgid "conflicting files"
 | 
			
		||||
msgstr "konfliktní soubory"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:141
 | 
			
		||||
msgid "user aborted the operation"
 | 
			
		||||
msgstr "uživatel zrušil operaci"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:143
 | 
			
		||||
msgid "internal error"
 | 
			
		||||
msgstr "interní chyba"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:145
 | 
			
		||||
msgid "libarchive error"
 | 
			
		||||
msgstr "chyba knihovny libarchive"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:148
 | 
			
		||||
msgid "not confirmed"
 | 
			
		||||
msgstr "nepotvrzeno"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:150
 | 
			
		||||
msgid "invalid regular expression"
 | 
			
		||||
msgstr "nesprávný regulární výraz"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:153
 | 
			
		||||
msgid "connection to remote host failed"
 | 
			
		||||
msgstr "spojení ke vzdálenému hostiteli selhalo"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:156
 | 
			
		||||
msgid "unexpected error"
 | 
			
		||||
msgstr "neočekávaná chyba"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:122
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get md5sum for package %s-%s\n"
 | 
			
		||||
msgstr "nelze zjistit MD5 kontrolní součet balíčku %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:131
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5sums do not match for package %s-%s\n"
 | 
			
		||||
msgstr "MD5 kontrolní součet balíčku %s-%s nesouhlasí\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:844
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: forcing upgrade to version %s\n"
 | 
			
		||||
msgstr "%s: vynucená aktualizace na verzi %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:849
 | 
			
		||||
#, 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:1027
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error extracting package description file to %s\n"
 | 
			
		||||
msgstr "nelze získat soubor s popisem balíčku k %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1033
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "nelze získat soubor s popisem balíčku z %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1038
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "chybí jméno balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1042
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "chybí veze balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "chyba při čtení balíčku %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1081
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "chybí metadata balíčku v %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgstr "nelze nalézt %s v databázi -- přeskakuji\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr "nelze odstranit soubor '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:341
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgstr "nelze odstranit záznam databáze %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgstr "nelze odstranit položku '%s' z keše\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:54
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid, ignoring\n"
 | 
			
		||||
msgstr "URL '%s' je chybná, ignoruji\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:58
 | 
			
		||||
msgid "url scheme not specified, assuming http\n"
 | 
			
		||||
msgstr "schéma URL nedefinováno, předpokládám http\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:239
 | 
			
		||||
msgid "disk"
 | 
			
		||||
msgstr "disk"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:243
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "selhalo získávání souboru '%s' z %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:273
 | 
			
		||||
msgid "cannot resume download, starting over\n"
 | 
			
		||||
msgstr "nelze navázat stahování, začínám znovu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:286
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot write to file '%s'\n"
 | 
			
		||||
msgstr "nelze zapisovat do souboru '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:305
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error downloading '%s': %s\n"
 | 
			
		||||
msgstr "chyba při stahování '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:317
 | 
			
		||||
#, 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:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not chdir to %s\n"
 | 
			
		||||
msgstr "nelze změnit adresář na %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:392
 | 
			
		||||
msgid "running XferCommand: fork failed!\n"
 | 
			
		||||
msgstr "spouštím XferCommand: větvení selhalo!\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:443
 | 
			
		||||
msgid "URL does not contain a file for download\n"
 | 
			
		||||
msgstr "URL neobsahuje stahovaný soubor\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:456
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "selhalo stahování %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:133
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:248
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: ignoruji aktualizaci balíčku (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:309
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "repository '%s' not found\n"
 | 
			
		||||
msgstr "repositář '%s' nenalezen\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:336
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s je aktuální -- přeskakuji\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:340
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s je aktuální -- přeinstalovávám\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
 | 
			
		||||
msgid "unresolvable package conflicts detected\n"
 | 
			
		||||
msgstr "zjištěn nerozlišitelný konflikt balíčků\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:611
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "malloc failure: could not allocate %zd bytes\n"
 | 
			
		||||
msgstr "selhala alokace paměti: nelze alokovat %zd bytů\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:812
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command: %s\n"
 | 
			
		||||
msgstr "příkaz: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
 | 
			
		||||
#, 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:902
 | 
			
		||||
#, 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:1049
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files from %s\n"
 | 
			
		||||
msgstr "selhalo stažení některých souborů z %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1130
 | 
			
		||||
msgid "could not create removal transaction\n"
 | 
			
		||||
msgstr "nelze vytvořit transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1136
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "nelze inicializovat transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1158
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr "nelze připravit transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1164
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "nelze provést transakci pro odstranění\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1175
 | 
			
		||||
msgid "could not create transaction\n"
 | 
			
		||||
msgstr "nelze vytvořit transakci\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1180
 | 
			
		||||
msgid "could not initialize transaction\n"
 | 
			
		||||
msgstr "nelze inicializovat transakci\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1207
 | 
			
		||||
msgid "could not prepare transaction\n"
 | 
			
		||||
msgstr "nelze připravit transakci\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1212
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr "nelze provést transakci\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:212
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "nelze odstranit zamykací soubor %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:483
 | 
			
		||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
 | 
			
		||||
msgstr "Nenalezen /bin/sh v rodičovském prostředí, ruším provádění skriptů\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:494
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "nelze vytvořit dočasný adresář\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:533
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "nelze změnit adresář na %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:551
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "nelze spustit nový proces (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:561
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "nelze změnit kořenový adresář (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr "nelze změnit adresář na / (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:575
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr "volání popen selhalo (%s)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:594
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "volání waitpid selhalo (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:603
 | 
			
		||||
msgid "scriptlet failed to execute correctly\n"
 | 
			
		||||
msgstr "správné spouštění skriptu selhalo\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr "nelze odstranit dočasný adresář %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:207
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to make path '%s' : %s\n"
 | 
			
		||||
msgstr "selhalo vytvoření cesty '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:392
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open %s: %s\n"
 | 
			
		||||
msgstr "nelze otevřít %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:579
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "neexistuje keš %s, vytvářím...\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:595
 | 
			
		||||
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:644
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be opened\n"
 | 
			
		||||
msgstr "MD5: %s nemohl být otevřen\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be read\n"
 | 
			
		||||
msgstr "MD5: %s nemohl být přečten\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: 2008-01-14 23:08-0600\n"
 | 
			
		||||
"PO-Revision-Date: 2007-12-22 22:29+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
 | 
			
		||||
"PO-Revision-Date: 2009-07-28 14:01+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,37 +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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, 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 ""
 | 
			
		||||
"une version plus récente %s-%s est dans la liste des cibles -- paquet "
 | 
			
		||||
"ignoré\n"
 | 
			
		||||
"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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:377
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory permissions differ on %s\n"
 | 
			
		||||
@@ -54,615 +51,497 @@ msgstr ""
 | 
			
		||||
"Les permissions pour le répertoire %s sont différentes\n"
 | 
			
		||||
"système de fichier: %o paquet : %o\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:404
 | 
			
		||||
#, 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:411
 | 
			
		||||
#, 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:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "l'extraction de %s a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:517
 | 
			
		||||
#, 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:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
 | 
			
		||||
#, 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:529 lib/libalpm/remove.c:238
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s saved as %s\n"
 | 
			
		||||
msgstr "%s enregistré en tant que %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:568
 | 
			
		||||
#, 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:571
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s installed as %s\n"
 | 
			
		||||
msgstr "%s installé en tant que %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:588
 | 
			
		||||
#, 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:723 lib/libalpm/trans.c:526
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "déterminer le répertoire courant a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:777
 | 
			
		||||
#, 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:782
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "des erreurs sont survenues pendant l'installation de %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:797
 | 
			
		||||
#, 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:805
 | 
			
		||||
#, 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 "could not remove database %s\n"
 | 
			
		||||
msgstr "la suppression de la base de données %s a échoué\n"
 | 
			
		||||
 | 
			
		||||
#, 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:291 lib/libalpm/be_files.c:428
 | 
			
		||||
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
 | 
			
		||||
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
 | 
			
		||||
#: lib/libalpm/package.c:885
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr "l'entrée '%s' de la base de données est corrompue\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "l'ouverture du fichier %s a échoué: %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"
 | 
			
		||||
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/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 "%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/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 "could not create directory %s: %s\n"
 | 
			
		||||
msgstr "la création du répertoire %s a échoué: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "impossible de résoudre \"%s\", une dépendance de \"%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"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
 | 
			
		||||
#: 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:1027
 | 
			
		||||
#, 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:1033
 | 
			
		||||
#, 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:1038
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "nom de paquet manquant dans %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1042
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "version de paquet manquante dans %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
 | 
			
		||||
#, 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:1081
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "méta-données du paquet manquantes dans %s\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 "attempt to re-register the 'local' DB\n"
 | 
			
		||||
msgstr "tentative de ré-enregistrer la base de données locale\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr "suppression du fichier '%s' impossible: %s\n"
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "base de données non initialisée\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:341
 | 
			
		||||
#, 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 "dependency cycle detected:\n"
 | 
			
		||||
msgstr "cycle de dépendances détecté:\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, 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 removed after its %s dependency\n"
 | 
			
		||||
msgstr "%s sera supprimé après 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 "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgstr "%s sera installé avant sa dépendance %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:58
 | 
			
		||||
msgid "url scheme not specified, assuming http\n"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "ignore le paquet %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "provider package was selected (%s provides %s)\n"
 | 
			
		||||
msgstr "Une provision a été sélectionnée (%s fournit %s)\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"
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s est apparemment tronqué: %jd/%jd bytes\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:392
 | 
			
		||||
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 "%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"
 | 
			
		||||
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 "no servers configured for repository"
 | 
			
		||||
msgstr "aucun serveur configuré pour le dépôt"
 | 
			
		||||
 | 
			
		||||
#, 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 "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"tentative de réalisation d'une transaction alors que le dépôt n'est pas "
 | 
			
		||||
"verrouillé"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "trouver ou de lire le paquet a échoué"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "opération annulée à cause d'un paquet à ignorer (IgnorePkg)"
 | 
			
		||||
 | 
			
		||||
#, 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 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 "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 "failed to retrieve some files"
 | 
			
		||||
msgstr "échec de récupération de certains fichiers"
 | 
			
		||||
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:248
 | 
			
		||||
#, 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:309
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: ignore le retour à la version antérieure (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: retourne à la version antérieure (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, 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 "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "ignore le remplacement du paquet (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "le remplacement de %s par %s est impossible\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "repository '%s' not found\n"
 | 
			
		||||
msgstr "dépôt '%s' non trouvé\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:336
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s est à jour -- ignoré\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:340
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s est à jour -- réinstalle\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
 | 
			
		||||
#, 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:611
 | 
			
		||||
#, 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:812
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command: %s\n"
 | 
			
		||||
msgstr "commande: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
 | 
			
		||||
#, 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:902
 | 
			
		||||
#, 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:1049
 | 
			
		||||
#, 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:1130
 | 
			
		||||
#, 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:1136
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "l'initialisation de la transaction de suppression a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1158
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr "la préparation de la transaction de suppression a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1164
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "appliquer la transaction de suppression a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1175
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create transaction\n"
 | 
			
		||||
msgstr "la création de la transaction a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1180
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "l'initialisation de la transaction de suppression a échoué\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize transaction\n"
 | 
			
		||||
msgstr "l'initialisation de la transaction a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1207
 | 
			
		||||
msgid "could not prepare transaction\n"
 | 
			
		||||
msgstr "la préparation de la transaction a échoué\n"
 | 
			
		||||
#, 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:1212
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "appliquer la transaction de suppression a échoué\n"
 | 
			
		||||
 | 
			
		||||
#, 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:483
 | 
			
		||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Pas de /bin/sh dans l'environnement parent, interruption du scriptlet\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:494
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "la création du répertoire temporaire a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:533
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "changer de répertoire vers %s a échoué (%s)\n"
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr "la copie du fichier temporaire vers %s a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:551
 | 
			
		||||
#, 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:561
 | 
			
		||||
#, 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:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr "changer de répertoire vers / a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:575
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr "call to popen failed (%s)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:594
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "call to waitpid failed (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:603
 | 
			
		||||
msgid "scriptlet failed to execute correctly\n"
 | 
			
		||||
msgstr "le scriptlet n'a pas pu être exécuté correctement\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr "la suppression du répertoire temporaire %s a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:207
 | 
			
		||||
#, 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:392
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open %s: %s\n"
 | 
			
		||||
msgstr "l'ouverture de %s: %s a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:579
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "changer de répertoire vers %s a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "la génération d'un nouveau processus a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "changer le répertoire racine a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr "changer de répertoire vers / a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr "l'appel de popen a échoué (%s)"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "l'appel de waitpid a échoué (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr "la commande n'a pas pu être exécutée correctement\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "le cache %s n'existe pas, création...\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:595
 | 
			
		||||
#, 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:644
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be opened\n"
 | 
			
		||||
msgstr "md5: l'ouverture de %s a échoué\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be read\n"
 | 
			
		||||
msgstr "md5: la lecture de %s a échoué\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "loading package data for %s : level=%d\n"
 | 
			
		||||
#~ msgstr "chargement des données du paquet %s : niveau=%d\n"
 | 
			
		||||
 | 
			
		||||
#~ 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"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not remove tempfile %s\n"
 | 
			
		||||
#~ msgstr "la suppression du fichier temporaire %s a échoué\n"
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,50 +1,49 @@
 | 
			
		||||
# Italian translation of libalpm.
 | 
			
		||||
# Copyright (C) 2007 THE libalpm'S COPYRIGHT HOLDER
 | 
			
		||||
# This file is distributed under the same license as the libalpm package.
 | 
			
		||||
# Giovanni 'voidnull' Scafora <linuxmania@gmail.com>, 2007.
 | 
			
		||||
# Alessio 'mOLOk' Bolognino <themolok@gmail.com>, 2007.
 | 
			
		||||
# Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>, 2007.
 | 
			
		||||
# Giovanni 'voidnull' Scafora <giovanni@archlinux.org>, 2007, 2008, 2009
 | 
			
		||||
# Andrea 'bash' Scarpino <bash.lnx@gmail.com>, 2008
 | 
			
		||||
# Alessio 'mOLOk' Bolognino <themolok@gmail.com>, 2007
 | 
			
		||||
# Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>, 2007
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: libalpm VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
 | 
			
		||||
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
 | 
			
		||||
"PO-Revision-Date: 2007-12-18 23:30+0100\n"
 | 
			
		||||
"Last-Translator: Giovanni Scafora <linuxmania@gmail.com>\n"
 | 
			
		||||
"Language-Team: Arch Linux Italian Team <linuxmania@gmail.com>\n"
 | 
			
		||||
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
 | 
			
		||||
"PO-Revision-Date: 2009-07-28 15:00+0200\n"
 | 
			
		||||
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
 | 
			
		||||
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=utf-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bitPlural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:86
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "replacing older version %s-%s by %s in target list\n"
 | 
			
		||||
msgstr "sostituzione in corso della vecchia versione di %s-%s con %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "newer version %s-%s is in the target list -- skipping\n"
 | 
			
		||||
msgstr "la versione di %s-%s è più recente e sarà ignorata\n"
 | 
			
		||||
msgid "skipping %s-%s because newer version %s is in the target list\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"ignoro %s-%s perché la nuova versione %s è già presente nella lista dei "
 | 
			
		||||
"pacchetti\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:166
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting packages were found in the target list\n"
 | 
			
		||||
msgstr "sono stati individuati dei pacchetti che vanno in conflitto\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "you cannot install two conflicting packages at the same time\n"
 | 
			
		||||
msgstr "impossibile installare due pacchetti che vanno in conflitto\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:170
 | 
			
		||||
msgid "replacing packages with -A and -U is not supported yet\n"
 | 
			
		||||
msgstr "la sostituzione dei pacchetti con -A e -U non è ancora supportata\n"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "replacing packages with -U is not supported yet\n"
 | 
			
		||||
msgstr "la sostituzione dei pacchetti con -U non è ancora supportata\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:171
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "you can replace packages manually using -Rd and -U\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"è possibile sostituire manualmente i pacchetti, usando le opzioni -Rd e -U\n"
 | 
			
		||||
msgstr "puoi sostituire manualmente i pacchetti, usando le opzioni -Rd e -U\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:377
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory permissions differ on %s\n"
 | 
			
		||||
@@ -53,626 +52,502 @@ msgstr ""
 | 
			
		||||
"i permessi delle directory differiscono su %s\n"
 | 
			
		||||
"filesystem: %o pacchetto: %o\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:404
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr "estrazione: non posso sovrascrivere la directory con il file %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: symlink %s does not point to dir\n"
 | 
			
		||||
msgstr "estrazione: il link simbolico %s non punta alla directory\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:411
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr "estrazione: non sovrascrivere la directory con il file %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "impossibile estrarre %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:517
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s (%s)\n"
 | 
			
		||||
msgstr "impossibile rinominare %s (%s)\n"
 | 
			
		||||
msgid "could not rename %s to %s (%s)\n"
 | 
			
		||||
msgstr "impossibile rinominare %s in %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr "impossibile copiare il file temporaneo in %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:529 lib/libalpm/remove.c:238
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s saved as %s\n"
 | 
			
		||||
msgstr "%s salvato come %s\n"
 | 
			
		||||
msgstr "%s è stato salvato come %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:568
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not install %s as %s: %s\n"
 | 
			
		||||
msgstr "impossibile installare %s come %s: %s\n"
 | 
			
		||||
msgid "could not install %s as %s (%s)\n"
 | 
			
		||||
msgstr "impossibile installare %s come %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:571
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s installed as %s\n"
 | 
			
		||||
msgstr "%s installato come %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extracting %s as %s.pacnew\n"
 | 
			
		||||
msgstr "estrazione di %s come %s.pacnew\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "impossibile ottenere la directory corrente\n"
 | 
			
		||||
msgstr "impossibile determinare la directory corrente\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:777
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr "si sono verificati degli errori durante l'aggiornamento di %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:782
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "si sono verificati degli errori durante l'installazione di %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:797
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database entry %s-%s\n"
 | 
			
		||||
msgstr "impossibile aggiornare la voce %s-%s nel database\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:805
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr "impossible includere la voce '%s' nella cache\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_files.c:221
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database %s\n"
 | 
			
		||||
msgstr "impossibile rimuovere il database %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid name for database entry '%s'\n"
 | 
			
		||||
msgstr "nome non valido per la voce del database '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_files.c:291 lib/libalpm/be_files.c:428
 | 
			
		||||
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
 | 
			
		||||
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
 | 
			
		||||
#: lib/libalpm/package.c:885
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr "la voce nel database '%s' è corrotta\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "impossibile aprire il file %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:283
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s%s\n"
 | 
			
		||||
msgstr "impossibile rimuovere la voce %s%s dal database\n"
 | 
			
		||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"il database %s è inconsistente: il nome del pacchetto %s non corrisponde\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:551
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"il database %s è inconsistente: la versione del pacchetto %s non "
 | 
			
		||||
"corrisponde\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create directory %s: %s\n"
 | 
			
		||||
msgstr "impossibile creare la directory %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "impossibile analizzare il file di descrizione del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "manca il nome del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "manca la versione del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "si è verificato un errore durante la lettura del pacchetto %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "manca il metadata del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "attempt to re-register the 'local' DB\n"
 | 
			
		||||
msgstr "tentativo in corso di registrare di nuovo il database 'locale'\n"
 | 
			
		||||
msgstr "tentativo in corso di registrare di nuovo il DB 'locale'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "il percorso del database non è definito\n"
 | 
			
		||||
msgstr "il percorso del database non è stato definito\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:171
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "dependency cycle detected:\n"
 | 
			
		||||
msgstr "individuato un possibile ciclo di dipendenze:\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:173
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s will be removed after its %s dependency\n"
 | 
			
		||||
msgstr "%s sarà rimosso dopo la sua dipendenza %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:175
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgstr "%s sarà installato prima della sua dipendenza %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "sto ignorando il pacchetto %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "provider package was selected (%s provides %s)\n"
 | 
			
		||||
msgstr "il pacchetto è già stato selezionato (%s dipende da %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "impossibile risolvere \"%s\", una dipendenza di \"%s\"\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:41
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid\n"
 | 
			
		||||
msgstr "l'url '%s' non è esatto\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url scheme not specified, assuming HTTP\n"
 | 
			
		||||
msgstr "non è stato specificato il protocollo dell'url, sarà usato HTTP\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "disk"
 | 
			
		||||
msgstr "disco"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "impossibile scaricare il pacchetto '%s' da %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resume download, starting over\n"
 | 
			
		||||
msgstr "impossibile riprendere il download\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot write to file '%s'\n"
 | 
			
		||||
msgstr "impossibile scrivere nel file '%s'\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error writing to file '%s': %s\n"
 | 
			
		||||
msgstr "si è verificato un errore durante la scrittura nel file '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s sembra essere incompleto: %jd/%jd byte\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "impossibile scaricare %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "out of memory!"
 | 
			
		||||
msgstr "memoria insufficiente!"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:43
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unexpected system error"
 | 
			
		||||
msgstr "errore di sistema inaspettato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:45
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "insufficient privileges"
 | 
			
		||||
msgstr "privilegi insufficienti"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:47
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read file"
 | 
			
		||||
msgstr "impossibile trovare o leggere il file"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:49
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read directory"
 | 
			
		||||
msgstr "impossibile trovare o leggere la directory"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:51
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "wrong or NULL argument passed"
 | 
			
		||||
msgstr "è stato passato un argomento sbagliato o NULL"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:54
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "library not initialized"
 | 
			
		||||
msgstr "libreria non inizializzata"
 | 
			
		||||
msgstr "la libreria non è stata inizializzata"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:56
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "library already initialized"
 | 
			
		||||
msgstr "libreria già inizializzata"
 | 
			
		||||
msgstr "la libreria è già stata inizializzata"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:58
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to lock database"
 | 
			
		||||
msgstr "impossibile bloccare il database"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:61
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open database"
 | 
			
		||||
msgstr "impossibile aprire il database"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:63
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create database"
 | 
			
		||||
msgstr "impossibile creare il database"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:65
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database not initialized"
 | 
			
		||||
msgstr "database non inizializzato"
 | 
			
		||||
msgstr "il database non è stato inizializzato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:67
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database already registered"
 | 
			
		||||
msgstr "il database è già registrato"
 | 
			
		||||
msgstr "il database è già stato registrato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:69
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find database"
 | 
			
		||||
msgstr "impossibile trovare il database"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:71
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database"
 | 
			
		||||
msgstr "impossibile aggiornare il database"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:73
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry"
 | 
			
		||||
msgstr "impossibile rimuovere la voce dal database"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:76
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid url for server"
 | 
			
		||||
msgstr "url non valido per il server"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:83
 | 
			
		||||
msgid "could not set parameter"
 | 
			
		||||
msgstr "impossibile impostare il parametro"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no servers configured for repository"
 | 
			
		||||
msgstr "nessun server è stato configurato per il repository"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:86
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction already initialized"
 | 
			
		||||
msgstr "operazione già inizializzata"
 | 
			
		||||
msgstr "l'operazione è già stata inizializzata"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not initialized"
 | 
			
		||||
msgstr "operazione non inizializzata"
 | 
			
		||||
msgstr "l'operazione non è stata inizializzata"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:90
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicate target"
 | 
			
		||||
msgstr "pacchetto doppio"
 | 
			
		||||
msgstr "pacchetto duplicato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not prepared"
 | 
			
		||||
msgstr "operazione non preparata"
 | 
			
		||||
msgstr "l'operazione non è stata preparata"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:96
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction aborted"
 | 
			
		||||
msgstr "operazione annullata"
 | 
			
		||||
msgstr "l'operazione è stata annullata"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation not compatible with the transaction type"
 | 
			
		||||
msgstr "operazione incompatibile con il tipo di transazione"
 | 
			
		||||
msgstr "l'operazione è incompatibile con il tipo di transazione"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
msgid "could not commit transaction"
 | 
			
		||||
msgstr "impossibile eseguire l'operazione"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "prova il commit dell'operazione quando il database non è bloccato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
msgid "could not download all files"
 | 
			
		||||
msgstr "impossibile prelevare tutti i file"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:105
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "impossibile trovare o leggere il pacchetto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:107
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "pacchetto non valido o corrotto"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "l'operazione è stata ignorata a causa di ignorepkg"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "il pacchetto non è valido oppure è corrotto"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
msgstr "impossibile aprire il pacchetto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
msgid "cannot load package data"
 | 
			
		||||
msgstr "impossibile caricare i dati del pacchetto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
msgid "package already installed"
 | 
			
		||||
msgstr "pacchetto già installato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
msgid "package not installed or lesser version"
 | 
			
		||||
msgstr "pacchetto non installato o una versione precedente"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove all files for package"
 | 
			
		||||
msgstr "impossibile rimuovere tutti i file del pacchetto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
msgid "package name is not valid"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package filename is not valid"
 | 
			
		||||
msgstr "il nome del pacchetto non è valido"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
msgid "corrupted package"
 | 
			
		||||
msgstr "pacchetto corrotto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no such repository"
 | 
			
		||||
msgstr "nessun repository corrispondente"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:126
 | 
			
		||||
msgid "corrupted delta"
 | 
			
		||||
msgstr "il delta è corrotto"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted delta"
 | 
			
		||||
msgstr "il delta non è valido oppure è corrotto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:128
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "delta patch failed"
 | 
			
		||||
msgstr "si sono verificati degli errori con la patch di delta"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:131
 | 
			
		||||
msgid "group not found"
 | 
			
		||||
msgstr "gruppo non trovato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:134
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not satisfy dependencies"
 | 
			
		||||
msgstr "impossibile soddisfare le dipendenze"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:136
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting dependencies"
 | 
			
		||||
msgstr "dipendenze in conflitto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:138
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting files"
 | 
			
		||||
msgstr "file in conflitto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:141
 | 
			
		||||
msgid "user aborted the operation"
 | 
			
		||||
msgstr "operazione annullata"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files"
 | 
			
		||||
msgstr "impossibile scaricare alcuni file"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:143
 | 
			
		||||
msgid "internal error"
 | 
			
		||||
msgstr "errore interno"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid regular expression"
 | 
			
		||||
msgstr "l'espressione regolare non è valida"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:145
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "libarchive error"
 | 
			
		||||
msgstr "errore di libarchive"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:148
 | 
			
		||||
msgid "not confirmed"
 | 
			
		||||
msgstr "non confermato"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "download library error"
 | 
			
		||||
msgstr "si è verificato un errore della libreria di download"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:150
 | 
			
		||||
msgid "invalid regular expression"
 | 
			
		||||
msgstr "espressione regolare non valida"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error invoking external downloader"
 | 
			
		||||
msgstr "si è verificato un errore lanciando il downloader esterno"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:153
 | 
			
		||||
msgid "connection to remote host failed"
 | 
			
		||||
msgstr "impossibile stabilire una connessione con l'host remoto"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:156
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unexpected error"
 | 
			
		||||
msgstr "errore inaspettato"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:122
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get md5sum for package %s-%s\n"
 | 
			
		||||
msgstr "impossibile recuperare la somma md5 del pacchetto %s-%s\n"
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgstr "impossibile trovare %s nel database, sarà ignorato\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:131
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5sums do not match for package %s-%s\n"
 | 
			
		||||
msgstr "la somma md5 del pacchetto %s-%s non corrisponde\n"
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr "impossibile rimuovere il file '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:844
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: forcing upgrade to version %s\n"
 | 
			
		||||
msgstr "%s: aggiornamento forzato alla versione %s\n"
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgstr "impossibile rimuovere la voce %s-%s dal database\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgstr "impossibile rimuovere la voce '%s' dalla cache\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: l'aggiornamento del pacchetto è stato ignorato (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: il downgrade del pacchetto è stato ignorato (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: downgrade in corso dalla versione %s alla versione %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:849
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: local (%s) is newer than %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"%s: la versione installata (%s) è più recente di quella presente in %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1027
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error extracting package description file to %s\n"
 | 
			
		||||
msgstr "impossibile estrarre il file di descrizione del pacchetto in %s\n"
 | 
			
		||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "sto ignorando la sostituzione del pacchetto (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1033
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "impossibile analizzare il file di descrizione del pacchetto in %s\n"
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "impossibile sostituire %s con %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1038
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "manca il nome del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1042
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "manca la versione del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "si è verificato un errore durante la lettura del pacchetto %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1081
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "manca il metadata del pacchetto in %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgstr "impossibile trovare %s nel database, sarà ignorato\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr "impossibile rimuovere il file '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:341
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgstr "impossibile rimuovere la voce %s-%s dal database\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgstr "impossibile rimuovere la voce '%s' dalla cache\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:54
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid, ignoring\n"
 | 
			
		||||
msgstr "l'url '%s' non è corretto, sarà ignorato\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:58
 | 
			
		||||
msgid "url scheme not specified, assuming http\n"
 | 
			
		||||
msgstr "il protocollo dell'url non è specificato, sarà usato http\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:239
 | 
			
		||||
msgid "disk"
 | 
			
		||||
msgstr "disco"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:243
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "impossibile recuperare il file '%s' da %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:273
 | 
			
		||||
msgid "cannot resume download, starting over\n"
 | 
			
		||||
msgstr "impossibile riprendere il download\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:286
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot write to file '%s'\n"
 | 
			
		||||
msgstr "impossibile scrivere nel file '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:305
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error downloading '%s': %s\n"
 | 
			
		||||
msgstr "si è verificato un errore durante il download di '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:317
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error writing to file '%s': %s\n"
 | 
			
		||||
msgstr "si è verificato un errore durante la scrittura nel file '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not chdir to %s\n"
 | 
			
		||||
msgstr "impossibile spostarsi nella directory %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:392
 | 
			
		||||
msgid "running XferCommand: fork failed!\n"
 | 
			
		||||
msgstr "avvio di XferCommand: processo non riuscito!\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:443
 | 
			
		||||
msgid "URL does not contain a file for download\n"
 | 
			
		||||
msgstr "URL non contiene nessun file da scaricare\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:456
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "impossibile scaricare %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:133
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"%s-%s: aggiornamento del pacchetto ignorato (per essere sostituito con %s-%"
 | 
			
		||||
"s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:248
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: aggiornamento del pacchetto ignorato (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:309
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "repository '%s' not found\n"
 | 
			
		||||
msgstr "impossibile trovare il repository '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:336
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s è aggiornato, sarà ignorato\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:340
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s è aggiornato, sarà reinstallato\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "downgrading package %s (%s => %s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"installazione in corso di una versione meno recente del pacchetto %s (%s => %"
 | 
			
		||||
"s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unresolvable package conflicts detected\n"
 | 
			
		||||
msgstr "sono stati rilevati dei conflitti irrisolvibili\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:611
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "malloc failure: could not allocate %zd bytes\n"
 | 
			
		||||
msgstr "malloc failure: impossibile allocare %zd byte\n"
 | 
			
		||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"rimozione di '%s' dalla lista dei pacchetti perché va in conflitto con '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:812
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command: %s\n"
 | 
			
		||||
msgstr "comando: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "can't get md5 checksum for file %s\n"
 | 
			
		||||
msgstr "impossibile recuperare il checksum md5 del file %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:902
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
 | 
			
		||||
msgstr "il file %s è corrotto (MD5 errato)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1049
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files from %s\n"
 | 
			
		||||
msgstr "impossibile recuperare alcuni file da %s\n"
 | 
			
		||||
msgstr "impossibile scaricare alcuni file da %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1130
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create removal transaction\n"
 | 
			
		||||
msgstr "impossibile avviare l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1136
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "impossibile inizializzare l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1158
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr "impossibile preparare l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1164
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "impossibile eseguire l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1175
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create transaction\n"
 | 
			
		||||
msgstr "impossibile avviare l'operazione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1180
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "impossibile inizializzare l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize transaction\n"
 | 
			
		||||
msgstr "impossibile inizializzare l'operazione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1207
 | 
			
		||||
msgid "could not prepare transaction\n"
 | 
			
		||||
msgstr "impossibile preparare l'operazione\n"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr "impossibile preparare l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1212
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "impossibile eseguire l'operazione di rimozione\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr "impossibile eseguire l'operazione\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:212
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "impossibile rimuovere il file di lock %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:483
 | 
			
		||||
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
 | 
			
		||||
msgstr "/bin/sh non è presente nell'ambiente, lo scriptlet sarà interrotto\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:494
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "impossibile creare la directory temporanea\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:533
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "impossibile spostarsi nella directory %s (%s)\n"
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr "impossibile copiare il file temporaneo in %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:551
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "impossibile effettuare il fork di un nuovo processo (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:561
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "impossibile cambiare la root directory (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr "impossibile spostarsi nella directory / (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:575
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr "chiamata a popen non riuscita (%s)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:594
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "chiamata a waitpid non riuscita (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:603
 | 
			
		||||
msgid "scriptlet failed to execute correctly\n"
 | 
			
		||||
msgstr "L'esecuzione dello scriptlet non è riuscita correttamente\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr "impossibile rimuovere la directory temporanea %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:207
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to make path '%s' : %s\n"
 | 
			
		||||
msgstr "impossibile seguire il percorso '%s' : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:392
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open %s: %s\n"
 | 
			
		||||
msgstr "impossibile aprire %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:579
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "impossibile spostarsi nella directory %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "impossibile effettuare il fork di un nuovo processo (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "impossibile cambiare la root directory (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr "impossibile spostarsi nella directory / (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr "chiamata a popen non riuscita (%s)"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "chiamata a waitpid non riuscita (%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr "l'esecuzione del comando non è riuscita correttamente\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "la cache di %s non esiste, creazione in corso...\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:595
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "couldn't create package cache, using /tmp instead\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"impossibile creare la cache del pacchetto, al suo posto sarà usata /tmp\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:644
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be opened\n"
 | 
			
		||||
msgstr "md5: impossibile aprire %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be read\n"
 | 
			
		||||
msgstr "md5: impossibile leggere %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "loading package data for %s : level=%d\n"
 | 
			
		||||
#~ msgstr "caricamento in corso dei dati del pacchetto %s : livello=%d\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "adding '%s' to package cache for db '%s'\n"
 | 
			
		||||
#~ msgstr "aggiunta di '%s' alla cache del pacchetto per il database '%s'\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not remove tempfile %s\n"
 | 
			
		||||
#~ msgstr "impossibile rimuovere il file temporaneo %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "please remove '%s' first, using -Rd\n"
 | 
			
		||||
#~ msgstr "Si consiglia di rimuovere prima '%s', usando l'opzione -Rd\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "cannot resolve dependencies for \"%s\"\n"
 | 
			
		||||
#~ msgstr "impossibile risolvere le dipendenze per \"%s\"\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not update new database entry %s-%s\n"
 | 
			
		||||
#~ msgstr "impossibile aggiornare la nuova voce del database %s-%s\n"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										591
									
								
								lib/libalpm/po/kk.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										591
									
								
								lib/libalpm/po/kk.po
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,591 @@
 | 
			
		||||
# Kazakh 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.
 | 
			
		||||
# Baurzhan Muftakhidinov <baurthefirst@gmail.com> 2009
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Pacman package manager 3.0.0\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
 | 
			
		||||
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
 | 
			
		||||
"PO-Revision-Date: 2009-07-28 19:05+0600\n"
 | 
			
		||||
"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
 | 
			
		||||
"Language-Team: Kazakh\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 ""
 | 
			
		||||
"мақсаттар тізімінде ескірген %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: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr "тарқату: бума %s файлымен ауыстырылмайды\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: symlink %s does not point to dir\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 %s\n"
 | 
			
		||||
msgstr "%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 create directory %s: %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 "ignoring package %s-%s\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 writing to file '%s': %s\n"
 | 
			
		||||
msgstr "'%s' файлына жазу қатесі: %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s қысқартылады: %jd/%jd байт\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 "library іске қосылмады"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "library already initialized"
 | 
			
		||||
msgstr "library іске қосылған болып тұр"
 | 
			
		||||
 | 
			
		||||
#, 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 "no servers configured for repository"
 | 
			
		||||
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 "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "оқшауланбаған дерекқорға жазу талабы"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "дестені табу не оқу мүмкін емес"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "әрекет ignorepkg салдарынан тоқтатылды"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "десте қате не зақымдалған"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
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 "could not satisfy dependencies"
 | 
			
		||||
msgstr "тәуелділіктерді шешу мүмкін емес"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting dependencies"
 | 
			
		||||
msgstr "ерегісетін тәуелділіктер"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting files"
 | 
			
		||||
msgstr "ерегісетін файлдар"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files"
 | 
			
		||||
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: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: дестені жаңартуды елемеу (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: десте нұсқасын төмендетуді елемеу (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%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 "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "дестені алмастыруды елемеу (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "%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 "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 create transaction\n"
 | 
			
		||||
msgstr "сұранымды жасау мүмкін емес\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr "өшіруге сұранымды іске қосу мүмкін емес\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize 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 commit transaction\n"
 | 
			
		||||
msgstr "сұранымды аяқтау мүмкін емес\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "%s оқшау файлын өшіру мүмкін емес\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 remove tmpdir %s\n"
 | 
			
		||||
msgstr "tmpdir %s өшіру мүмкін емес\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open %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 "command failed to execute correctly\n"
 | 
			
		||||
msgstr "команда дұрыс орындалмады\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 "error downloading '%s': %s\n"
 | 
			
		||||
#~ msgstr "'%s' жүктеп алу қатесі: %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not chdir to %s\n"
 | 
			
		||||
#~ msgstr "%s бумасына ауысу мүмкін емес\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "running XferCommand: fork failed!\n"
 | 
			
		||||
#~ msgstr "XferCommand қосу: сәтсіз аяқталды\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not commit transaction"
 | 
			
		||||
#~ msgstr "сұранымды аяқтау мүмкін емес"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not download all files"
 | 
			
		||||
#~ msgstr "барлық файлдарды жүктеп алу мүмкін емес"
 | 
			
		||||
 | 
			
		||||
#~ msgid "cannot load package data"
 | 
			
		||||
#~ msgstr "дестенің мәліметтерін жүктеу мүмкін емес"
 | 
			
		||||
 | 
			
		||||
#~ msgid "package not installed or lesser version"
 | 
			
		||||
#~ msgstr "десте орнатылмаған, не оның нұсқасы ескі"
 | 
			
		||||
 | 
			
		||||
#~ msgid "group not found"
 | 
			
		||||
#~ msgstr "топ табылмады"
 | 
			
		||||
 | 
			
		||||
#~ msgid "user aborted the operation"
 | 
			
		||||
#~ msgstr "әрекетті пайдаланушы тоқтатты"
 | 
			
		||||
 | 
			
		||||
#~ msgid "internal error"
 | 
			
		||||
#~ msgstr "ішкі қате орын алды"
 | 
			
		||||
 | 
			
		||||
#~ msgid "not confirmed"
 | 
			
		||||
#~ msgstr "расталмады"
 | 
			
		||||
 | 
			
		||||
#~ msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "%s-%s: дестені жаңартуды елемеу (ол %s-%s нұсқасымен ауыстырылады)\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "command: %s\n"
 | 
			
		||||
#~ msgstr "командасы: %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not prepare transaction\n"
 | 
			
		||||
#~ msgstr "сұранымды дайындау мүмкін емес\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No /bin/sh in parent environment, aborting scriptlet\n"
 | 
			
		||||
#~ msgstr "Бастапқы ортада /bin/sh жоқ, скрипт орындалмайды\n"
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
# SOME DESCRIPTIVE TITLE.
 | 
			
		||||
# Copyright (C) YEAR Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
# This file is distributed under the same license as the PACKAGE package.
 | 
			
		||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 | 
			
		||||
#
 | 
			
		||||
@@ -8,7 +8,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
 | 
			
		||||
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
 | 
			
		||||
"POT-Creation-Date: 2009-07-27 21:15-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,637 +16,524 @@ msgstr ""
 | 
			
		||||
"Content-Type: text/plain; charset=CHARSET\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:86
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "replacing older version %s-%s by %s in target list\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, 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:166
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting packages were found in the target list\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "you cannot install two conflicting packages at the same time\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:170
 | 
			
		||||
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:171
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "you can replace packages manually using -Rd and -U\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:377
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory permissions differ on %s\n"
 | 
			
		||||
"filesystem: %o  package: %o\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:404
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: symlink %s does not point to dir\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:411
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extract: symlink %s does not point to dir\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:517
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s (%s)\n"
 | 
			
		||||
msgid "could not rename %s to %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:529 lib/libalpm/remove.c:238
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s saved as %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:568
 | 
			
		||||
#, 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:571
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s installed as %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "extracting %s as %s.pacnew\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:777
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:782
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:797
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database entry %s-%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:805
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_files.c:221
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid name for database entry '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_files.c:291 lib/libalpm/be_files.c:428
 | 
			
		||||
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
 | 
			
		||||
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
 | 
			
		||||
#: lib/libalpm/package.c:885
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:283
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s%s\n"
 | 
			
		||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:551
 | 
			
		||||
msgid "attempt to re-register the 'local' DB\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:171
 | 
			
		||||
msgid "dependency cycle detected:\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:173
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s will be removed after its %s dependency\n"
 | 
			
		||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:175
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgid "could not create directory %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:588
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:41
 | 
			
		||||
msgid "out of memory!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:43
 | 
			
		||||
msgid "unexpected system error"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:45
 | 
			
		||||
msgid "insufficient privileges"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:47
 | 
			
		||||
msgid "could not find or read file"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:49
 | 
			
		||||
msgid "could not find or read directory"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:51
 | 
			
		||||
msgid "wrong or NULL argument passed"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:54
 | 
			
		||||
msgid "library not initialized"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:56
 | 
			
		||||
msgid "library already initialized"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:58
 | 
			
		||||
msgid "unable to lock database"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:61
 | 
			
		||||
msgid "could not open database"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:63
 | 
			
		||||
msgid "could not create database"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:65
 | 
			
		||||
msgid "database not initialized"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:67
 | 
			
		||||
msgid "database already registered"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:69
 | 
			
		||||
msgid "could not find database"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:71
 | 
			
		||||
msgid "could not update database"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:73
 | 
			
		||||
msgid "could not remove database entry"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:76
 | 
			
		||||
msgid "invalid url for server"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:83
 | 
			
		||||
msgid "could not set parameter"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:86
 | 
			
		||||
msgid "transaction already initialized"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
 | 
			
		||||
msgid "transaction not initialized"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:90
 | 
			
		||||
msgid "duplicate target"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:94
 | 
			
		||||
msgid "transaction not prepared"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:96
 | 
			
		||||
msgid "transaction aborted"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
msgid "operation not compatible with the transaction type"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
msgid "could not commit transaction"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
msgid "could not download all files"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:105
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:107
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
msgid "cannot load package data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
msgid "package already installed"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
msgid "package not installed or lesser version"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
msgid "cannot remove all files for package"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
msgid "package name is not valid"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
msgid "corrupted package"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
msgid "no such repository"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:126
 | 
			
		||||
msgid "corrupted delta"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:128
 | 
			
		||||
msgid "delta patch failed"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:131
 | 
			
		||||
msgid "group not found"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:134
 | 
			
		||||
msgid "could not satisfy dependencies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:136
 | 
			
		||||
msgid "conflicting dependencies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:138
 | 
			
		||||
msgid "conflicting files"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:141
 | 
			
		||||
msgid "user aborted the operation"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:143
 | 
			
		||||
msgid "internal error"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:145
 | 
			
		||||
msgid "libarchive error"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:148
 | 
			
		||||
msgid "not confirmed"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:150
 | 
			
		||||
msgid "invalid regular expression"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:153
 | 
			
		||||
msgid "connection to remote host failed"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:156
 | 
			
		||||
msgid "unexpected error"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:122
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get md5sum for package %s-%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:131
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5sums do not match for package %s-%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:844
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: forcing upgrade to version %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:849
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: local (%s) is newer than %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1027
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error extracting package description file to %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1033
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1038
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1042
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:1081
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgid "attempt to re-register the 'local' DB\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:341
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgid "dependency cycle detected:\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgid "%s will be removed after its %s dependency\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:54
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid, ignoring\n"
 | 
			
		||||
msgid "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:58
 | 
			
		||||
msgid "url scheme not specified, assuming http\n"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:239
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "provider package was selected (%s provides %s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, 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:243
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:273
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resume download, starting over\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:286
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot write to file '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:305
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error downloading '%s': %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:317
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error writing to file '%s': %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not chdir to %s\n"
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:392
 | 
			
		||||
msgid "running XferCommand: fork failed!\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:443
 | 
			
		||||
msgid "URL does not contain a file for download\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/server.c:456
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:133
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
 | 
			
		||||
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 "no servers configured for repository"
 | 
			
		||||
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 "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
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 "could not satisfy dependencies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting dependencies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "conflicting files"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files"
 | 
			
		||||
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 ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:248
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:309
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: local (%s) is newer than %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "repository '%s' not found\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:336
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:340
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "downgrading package %s (%s => %s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unresolvable package conflicts detected\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:611
 | 
			
		||||
#, 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:812
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "can't get md5 checksum for file %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:902
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "file %s was corrupted (bad MD5 checksum)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1049
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files from %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1130
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1136
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1158
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1164
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1175
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1180
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize the removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not initialize transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1207
 | 
			
		||||
msgid "could not prepare transaction\n"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not prepare removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1212
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:212
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:483
 | 
			
		||||
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:533
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:551
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:561
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:575
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:594
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:603
 | 
			
		||||
msgid "scriptlet failed to execute correctly\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:207
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to make path '%s' : %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:392
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:579
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to / (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to popen failed (%s)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:595
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "couldn't create package cache, using /tmp instead\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:644
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be opened\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "md5: %s can't be read\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										596
									
								
								lib/libalpm/po/pl.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										596
									
								
								lib/libalpm/po/pl.po
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,596 @@
 | 
			
		||||
# 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-2009.
 | 
			
		||||
# #
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Pacman package manager 3.0.1\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
 | 
			
		||||
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
 | 
			
		||||
"PO-Revision-Date: 2009-07-29 10:39+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: not overwriting dir with file %s\n"
 | 
			
		||||
msgstr "rozpakowywanie: nie nadpisuję katalogu plikiem %s\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 "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 %s\n"
 | 
			
		||||
msgstr "nie można usunąć bazy danych %s\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 create directory %s: %s\n"
 | 
			
		||||
msgstr "nie można stworzyć katalogu %s: %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 "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "ignorowanie pakietu %s-%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 writing to file '%s': %s\n"
 | 
			
		||||
msgstr "Błąd podczas zapisywania do pliku '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s wygląda, jakby został obcięty %jd/%jd bajtów\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 "no servers configured for repository"
 | 
			
		||||
msgstr "brak serwerów skonfigurowanych dla repozytorium"
 | 
			
		||||
 | 
			
		||||
#, 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 "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "zmiana tranzakcji następuje, kiedy baza danych nie jest zablokowana"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "nie udało się znaleźć bądź odczytać pakietu"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "operacja anulowana przez ignorepkg"
 | 
			
		||||
 | 
			
		||||
#, 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 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 "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 "failed to retrieve some files"
 | 
			
		||||
msgstr "nie udało się odzyskać niektórych plików"
 | 
			
		||||
 | 
			
		||||
#, 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: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: ignorowanie aktualizacji pakietu (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: ignorowanie dezaktualizacji pakietu (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: dezaktualizowanie z wersji %s do wersji %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 "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "ignorowanie zastępowania pakietu (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "nie udało się zastąpić %s przez %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 "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 create transaction\n"
 | 
			
		||||
msgstr "nie udało się stworzyć tranzakcji\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 initialize transaction\n"
 | 
			
		||||
msgstr "nie udało się zainicjować tranzakcji\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 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 "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 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 "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 "command failed to execute correctly\n"
 | 
			
		||||
msgstr "komenda nie wykonała się poprawnie\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"
 | 
			
		||||
 | 
			
		||||
#~ msgid "error downloading '%s': %s\n"
 | 
			
		||||
#~ msgstr "błąd podczas pobierania '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not chdir to %s\n"
 | 
			
		||||
#~ msgstr "nie udało się zmienić katalogu na / %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "running XferCommand: fork failed!\n"
 | 
			
		||||
#~ msgstr "uruchamianie XferCommand: klonowanie nieudane!\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not commit transaction"
 | 
			
		||||
#~ msgstr "nie udało się wykonać tranzakcji"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not download all files"
 | 
			
		||||
#~ msgstr "nie udało się pobrać wszystkich plików"
 | 
			
		||||
 | 
			
		||||
#~ msgid "cannot load package data"
 | 
			
		||||
#~ msgstr "nie udało się załadować danych pakietu"
 | 
			
		||||
 | 
			
		||||
#~ msgid "package not installed or lesser version"
 | 
			
		||||
#~ msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji"
 | 
			
		||||
 | 
			
		||||
#~ msgid "group not found"
 | 
			
		||||
#~ msgstr "grupa nie została odnaleziona"
 | 
			
		||||
 | 
			
		||||
#~ msgid "user aborted the operation"
 | 
			
		||||
#~ msgstr "użytkownik zaniechał operacji"
 | 
			
		||||
 | 
			
		||||
#~ msgid "internal error"
 | 
			
		||||
#~ msgstr "błąd wewnętrzny"
 | 
			
		||||
 | 
			
		||||
#~ msgid "not confirmed"
 | 
			
		||||
#~ msgstr "nie potwierdzono"
 | 
			
		||||
 | 
			
		||||
#~ 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"
 | 
			
		||||
 | 
			
		||||
#~ msgid "command: %s\n"
 | 
			
		||||
#~ msgstr "komenda: %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "could not prepare transaction\n"
 | 
			
		||||
#~ msgstr "nie udało się przygotować tranzakcji\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No /bin/sh in parent environment, aborting scriptlet\n"
 | 
			
		||||
#~ msgstr "Brak /bin/sh w środowisku,  przerywanie wykonywania skryptu\n"
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user