summaryrefslogtreecommitdiffstats
path: root/zarb-ml/mageia-dev/2012-November/019928.html
diff options
context:
space:
mode:
authorNicolas Vigier <boklm@mageia.org>2013-04-14 13:46:12 +0000
committerNicolas Vigier <boklm@mageia.org>2013-04-14 13:46:12 +0000
commit1be510f9529cb082f802408b472a77d074b394c0 (patch)
treeb175f9d5fcb107576dabc768e7bd04d4a3e491a0 /zarb-ml/mageia-dev/2012-November/019928.html
parentfa5098cf210b23ab4f419913e28af7b1b07dafb2 (diff)
downloadarchives-master.tar
archives-master.tar.gz
archives-master.tar.bz2
archives-master.tar.xz
archives-master.zip
Add zarb MLs html archivesHEADmaster
Diffstat (limited to 'zarb-ml/mageia-dev/2012-November/019928.html')
-rw-r--r--zarb-ml/mageia-dev/2012-November/019928.html90
1 files changed, 90 insertions, 0 deletions
diff --git a/zarb-ml/mageia-dev/2012-November/019928.html b/zarb-ml/mageia-dev/2012-November/019928.html
new file mode 100644
index 000000000..c65d7124d
--- /dev/null
+++ b/zarb-ml/mageia-dev/2012-November/019928.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-dev] [soft-commits] [6434] Revert commit 6430
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-dev%40mageia.org?Subject=Re%3A%20%5BMageia-dev%5D%20%5Bsoft-commits%5D%20%5B6434%5D%20Revert%20commit%206430&In-Reply-To=%3CCAONrEtZYLtmKHG94tv3G%2BrOqGrD2AYh0SABu%2BZ7ktjK%3DtBpzig%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="019929.html">
+ <LINK REL="Next" HREF="019930.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-dev] [soft-commits] [6434] Revert commit 6430</H1>
+ <B>Thierry Vignaud</B>
+ <A HREF="mailto:mageia-dev%40mageia.org?Subject=Re%3A%20%5BMageia-dev%5D%20%5Bsoft-commits%5D%20%5B6434%5D%20Revert%20commit%206430&In-Reply-To=%3CCAONrEtZYLtmKHG94tv3G%2BrOqGrD2AYh0SABu%2BZ7ktjK%3DtBpzig%40mail.gmail.com%3E"
+ TITLE="[Mageia-dev] [soft-commits] [6434] Revert commit 6430">thierry.vignaud at gmail.com
+ </A><BR>
+ <I>Sun Nov 11 13:35:53 CET 2012</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="019929.html">[Mageia-dev] [changelog] cauldron core/release drakx-installer-stage2-14.50-2.mga3
+</A></li>
+ <LI>Next message: <A HREF="019930.html">[Mageia-dev] Small project for a Python programmer
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#19928">[ date ]</a>
+ <a href="thread.html#19928">[ thread ]</a>
+ <a href="subject.html#19928">[ subject ]</a>
+ <a href="author.html#19928">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>On 11 November 2012 12:44, &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-dev">root at mageia.org</A>&gt; wrote:
+&gt;<i> Revision 6434 Author neoclust Date 2012-11-11 12:44:08 +0100 (Sun, 11 Nov
+</I>&gt;<i> 2012)
+</I>&gt;<i>
+</I>&gt;<i> Log Message
+</I>&gt;<i>
+</I>&gt;<i> Revert commit 6430
+</I>
+NOOOOOOOOOOOOOO!!!!!
+
+Stop doing that.
+Though I wasn't fond of your first commit, once it's there, don't
+revert it since now
+both'll get in the way of svn/git blame.
+Next time ask before doing such a thing (for both first &amp; second commit).
+
+See you
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="019929.html">[Mageia-dev] [changelog] cauldron core/release drakx-installer-stage2-14.50-2.mga3
+</A></li>
+ <LI>Next message: <A HREF="019930.html">[Mageia-dev] Small project for a Python programmer
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#19928">[ date ]</a>
+ <a href="thread.html#19928">[ thread ]</a>
+ <a href="subject.html#19928">[ subject ]</a>
+ <a href="author.html#19928">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-dev">More information about the Mageia-dev
+mailing list</a><br>
+</body></html>
t'>68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001489.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001490.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001491.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001492.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001493.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001494.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001495.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001496.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001497.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001498.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001499.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001500.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001501.html121
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001502.html6711
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001503.html1424
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001504.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001505.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001506.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001507.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001508.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001509.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001510.html64
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001511.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001512.html6058
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001513.html11447
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001514.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001515.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001516.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001517.html123
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001518.html167
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001519.html148
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001520.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001521.html116
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001522.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001523.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001524.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001525.html64
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001526.html63
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001527.html63
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001528.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001529.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001530.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001531.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001532.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001533.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001534.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001535.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001536.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001537.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001538.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001539.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001540.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001541.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001542.html109
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001543.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001544.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001545.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001546.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001547.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001548.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001549.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001550.html135
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001551.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001552.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001553.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001554.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001555.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001556.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001557.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001558.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001559.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001560.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001561.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001562.html138
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001563.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001564.html362
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001565.html1188
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001566.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001567.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001568.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001569.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001570.html149
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001571.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001572.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001573.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001574.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001575.html135
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001576.html162
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001577.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001578.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001579.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001580.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001581.html161
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001582.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001583.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001584.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001585.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001586.html110
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001587.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001588.html118
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001589.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001590.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001591.html111
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001592.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001593.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001594.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001595.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001596.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001597.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001598.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001599.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001600.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001601.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001602.html137
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001603.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001604.html6093
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001605.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001606.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001607.html139
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001608.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001609.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001610.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001611.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001612.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001613.html112
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001614.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001615.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001616.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001617.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001618.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001619.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001620.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001621.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001622.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001623.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001624.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001625.html525
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001626.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001627.html151
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001628.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001629.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001630.html125
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001631.html206
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001632.html476
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001633.html277
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001634.html125
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001635.html119
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001636.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001637.html452
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001638.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001639.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001640.html158
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001641.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001642.html124
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001643.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001644.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001645.html112
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001646.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001647.html113
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001648.html645
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001649.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001650.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001651.html2263
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001652.html134
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001653.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001654.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001655.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001656.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001657.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001658.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001659.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001660.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001661.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001662.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001663.html141
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001664.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001665.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001666.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001667.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001668.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001669.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001670.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001671.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001672.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001673.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001674.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001675.html163
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001676.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001677.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001678.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001679.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001680.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001681.html109
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001682.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001683.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001684.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001685.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001686.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001687.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001688.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001689.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001690.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001691.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001692.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001693.html527
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001694.html235
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001695.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001696.html138
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001697.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001698.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001699.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001700.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001701.html112
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001702.html111
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001703.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001704.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001705.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001706.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001707.html186
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001708.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001709.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001710.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001711.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001712.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001713.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001714.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001715.html144
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001716.html159
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001717.html501
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001718.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001719.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001720.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001721.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001722.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001723.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001724.html111
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001725.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001726.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001727.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001728.html111
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001729.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001730.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001731.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001732.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001733.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001734.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001735.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001736.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001737.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001738.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001739.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001740.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001741.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001742.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001743.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001744.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001745.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001746.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001747.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001748.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001749.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001750.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001751.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001752.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001753.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001754.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001755.html116
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001756.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001757.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001758.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001759.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001760.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001761.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001762.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001763.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001764.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001765.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001766.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001767.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001768.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001769.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001770.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001771.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001772.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001773.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001774.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001775.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001776.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001777.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001778.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001779.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001780.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001781.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001782.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001783.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001784.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001785.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001786.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001787.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001788.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001789.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001790.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001791.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001792.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001793.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001794.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001795.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001796.html141
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001797.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001798.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001799.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001800.html64
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001801.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001802.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001803.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001804.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001805.html177
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001806.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001807.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001808.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001809.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001810.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001811.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001812.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001813.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001814.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001815.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001816.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001817.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001818.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001819.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001820.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001821.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001822.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001823.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001824.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001825.html244
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001826.html113
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001827.html147
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001828.html766
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001829.html157
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001830.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001831.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001832.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001833.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001834.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001835.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001836.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001837.html64
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001838.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001839.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001840.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001841.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001842.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001843.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001844.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001845.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001846.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001847.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001848.html185
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001849.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001850.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001851.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001852.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001853.html110
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001854.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001855.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001856.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001857.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001858.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001859.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001860.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001861.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001862.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001863.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001864.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001865.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001866.html141
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001867.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001868.html183
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001869.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001870.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001871.html128
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001872.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001873.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001874.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001875.html123
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001876.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001877.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001878.html114
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001879.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001880.html119
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001881.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001882.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001883.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001884.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001885.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001886.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001887.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001888.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001889.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001890.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001891.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001892.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001893.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001894.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001895.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001896.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001897.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001898.html3114
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001899.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001900.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001901.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001902.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001903.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001904.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001905.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001906.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001907.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001908.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001909.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001910.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001911.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001912.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001913.html127
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001914.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001915.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001916.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001917.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001918.html114
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001919.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001920.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001921.html111
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001922.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001923.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001924.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001925.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001926.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001927.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001928.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001929.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001930.html223
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001931.html251
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001932.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001933.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001934.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001935.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001936.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001937.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001938.html110
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001939.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001940.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001941.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001942.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001943.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001944.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001945.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001946.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001947.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001948.html116
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001949.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001950.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001951.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001952.html138
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001953.html165
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001954.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001955.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001956.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001957.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001958.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001959.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001960.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001961.html121
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001962.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001963.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001964.html110
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001965.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001966.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001967.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001968.html69
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001969.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001970.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001971.html133
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001972.html130
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001973.html114
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001974.html137
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001975.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001976.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001977.html130
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001978.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001979.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001980.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001981.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001982.html197
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001983.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001984.html139
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001985.html123
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001986.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001987.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001988.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001989.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001990.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001991.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001992.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001993.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001994.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001995.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001996.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001997.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001998.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/001999.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002000.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002001.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002002.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002003.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002004.html109
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002005.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002006.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002007.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002008.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002009.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002010.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002011.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002012.html332
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002013.html175
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002014.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002015.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002016.html121
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002017.html158
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002018.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002019.html109
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002020.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002021.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002022.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002023.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002024.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002025.html200
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002026.html124
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002027.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002028.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002029.html347
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002030.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002031.html136
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002032.html144
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002033.html133
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002034.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002035.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002036.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002037.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002038.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002039.html142
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002040.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002041.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002042.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002043.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002044.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002045.html221
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002046.html114
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002047.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002048.html144
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002049.html128
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002050.html491
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002051.html118
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002052.html157
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002053.html156
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002054.html178
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002055.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002056.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002057.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002058.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002059.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002060.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002061.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002062.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002063.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002064.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002065.html197
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002066.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002067.html116
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002068.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002069.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002070.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002071.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002072.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002073.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002074.html149
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002075.html112
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002076.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002077.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002078.html129
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002079.html112
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002080.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002081.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002082.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002083.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002084.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002085.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002086.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002087.html130
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002088.html136
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002089.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002090.html189
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002091.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002092.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002093.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002094.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002095.html123
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002096.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002097.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002098.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002099.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002100.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002101.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002102.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002103.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002104.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002105.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002106.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002107.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002108.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002109.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002110.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002111.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002112.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002113.html164
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002114.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002115.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002116.html367
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002117.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002118.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002119.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002120.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002121.html151
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002122.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002123.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002124.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002125.html168
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002126.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002127.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002128.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002129.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002130.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002131.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002132.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002133.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002134.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002135.html112
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002136.html123
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002137.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002138.html126
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002139.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002140.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002141.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002142.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002143.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002144.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002145.html134
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002146.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002147.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002148.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002149.html142
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002150.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002151.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002152.html125
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002153.html138
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002154.html182
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002155.html195
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002156.html214
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002157.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002158.html118
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002159.html122
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002160.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002161.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002162.html120
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002163.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002164.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002165.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002166.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002167.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002168.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002169.html147
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002170.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002171.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002172.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002173.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002174.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002175.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002176.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002177.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002178.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002179.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002180.html146
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002181.html136
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002182.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002183.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002184.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002185.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002186.html174
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002187.html116
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002188.html140
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002189.html109
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002190.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002191.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002192.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002193.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002194.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002195.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002196.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002197.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002198.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002199.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002200.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002201.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002202.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002203.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002204.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002205.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002206.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002207.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002208.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002209.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002210.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002211.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002212.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002213.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002214.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002215.html156
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002216.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002217.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002218.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002219.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002220.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002221.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002222.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002223.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002224.html121
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002225.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002226.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002227.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002228.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002229.html153
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002230.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002231.html117
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002232.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002233.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002234.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002235.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002236.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002237.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002238.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002239.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002240.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002241.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002242.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002243.html150
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002244.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002245.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002246.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002247.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002248.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002249.html123
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002250.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002251.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002252.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002253.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002254.html82
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002255.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002256.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002257.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002258.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002259.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002260.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002261.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002262.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002263.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002264.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002265.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002266.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002267.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002268.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002269.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002270.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002271.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002272.html134
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002273.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002274.html111
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002275.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002276.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002277.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002278.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002279.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002280.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002281.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002282.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002283.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002284.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002285.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002286.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002287.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002288.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002289.html64
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002290.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002291.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002292.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002293.html144
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002294.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002295.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002296.html117
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002297.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002298.html113
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002299.html169
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002300.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002301.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002302.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002303.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002304.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002305.html294
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002306.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002307.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002308.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002309.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002310.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002311.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002312.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002313.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002314.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002315.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002316.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002317.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002318.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002319.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002320.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002321.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002322.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002323.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002324.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002325.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002326.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002327.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002328.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002329.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002330.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002331.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002332.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002333.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002334.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002335.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002336.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002337.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002338.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002339.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002340.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002341.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002342.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002343.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002344.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002345.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002346.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002347.html331
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002348.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002349.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002350.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002351.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002352.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002353.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002354.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002355.html216
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002356.html146
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002357.html121
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002358.html109
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002359.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002360.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002361.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002362.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002363.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002364.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002365.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002366.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002367.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002368.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002369.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002370.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002371.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002372.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002373.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002374.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002375.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002376.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002377.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002378.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002379.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002380.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002381.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002382.html91
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002383.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002384.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002385.html168
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002386.html171
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002387.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002388.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002389.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002390.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002391.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002392.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002393.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002394.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002395.html83
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002396.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002397.html65
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002398.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002399.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002400.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002401.html108
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002402.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002403.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002404.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002405.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002406.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002407.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002408.html63
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002409.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002410.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002411.html75
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002412.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002413.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002414.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002415.html81
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002416.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002417.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002418.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002419.html125
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002420.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002421.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002422.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002423.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002424.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002425.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002426.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002427.html79
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002428.html84
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002429.html97
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002430.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002431.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002432.html96
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002433.html66
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002434.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002435.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002436.html102
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002437.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002438.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002439.html67
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002440.html71
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002441.html129
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002442.html95
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002443.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002444.html76
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002445.html80
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002446.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002447.html173
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002448.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002449.html116
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002450.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002451.html94
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002452.html113
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002453.html101
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002454.html92
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002455.html100
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002456.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002457.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002458.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002459.html90
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002460.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002461.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002462.html118
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002463.html124
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002464.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002465.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002466.html105
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002467.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002468.html88
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002469.html103
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002470.html115
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002471.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002472.html98
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002473.html114
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002474.html106
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002475.html173
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002476.html87
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002477.html93
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002478.html104
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002479.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002480.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002481.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002482.html74
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002483.html99
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002484.html72
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002485.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002486.html73
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002487.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002488.html245
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002489.html85
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002490.html63
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002491.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002492.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002493.html89
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002494.html64
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002495.html107
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002496.html86
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002497.html68
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002498.html70
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002499.html78
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/002500.html77
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/author.html5192
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/date.html5192
l---------zarb-ml/mageia-sysadm/2011-January/index.html1
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/subject.html5192
-rw-r--r--zarb-ml/mageia-sysadm/2011-January/thread.html6535
1035 files changed, 160499 insertions, 0 deletions
diff --git a/zarb-ml/mageia-sysadm/2011-January/001471.html b/zarb-ml/mageia-sysadm/2011-January/001471.html
new file mode 100644
index 000000000..332d9edd3
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001471.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for alamut.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20alamut.mageia.org&In-Reply-To=%3C20110102070212.F2A3E41621%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+
+ <LINK REL="Next" HREF="001472.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for alamut.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20alamut.mageia.org&In-Reply-To=%3C20110102070212.F2A3E41621%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for alamut.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Sun Jan 2 08:02:12 CET 2011</I>
+ <P><UL>
+
+ <LI>Next message: <A HREF="001472.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1471">[ date ]</a>
+ <a href="thread.html#1471">[ thread ]</a>
+ <a href="subject.html#1471">[ subject ]</a>
+ <a href="author.html#1471">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Sun Jan 02 08:02:12 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Sun Jan 02 08:02:12 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+
+ <LI>Next message: <A HREF="001472.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1471">[ date ]</a>
+ <a href="thread.html#1471">[ thread ]</a>
+ <a href="subject.html#1471">[ subject ]</a>
+ <a href="author.html#1471">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001472.html b/zarb-ml/mageia-sysadm/2011-January/001472.html
new file mode 100644
index 000000000..0ca7e1cac
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001472.html
@@ -0,0 +1,187 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [LONG] new server to name and password handling
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C1294016440.2046.59.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001471.html">
+ <LINK REL="Next" HREF="001499.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [LONG] new server to name and password handling</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C1294016440.2046.59.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [LONG] new server to name and password handling">misc at zarb.org
+ </A><BR>
+ <I>Mon Jan 3 02:00:40 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001471.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001499.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1472">[ date ]</a>
+ <a href="thread.html#1472">[ thread ]</a>
+ <a href="subject.html#1472">[ subject ]</a>
+ <a href="author.html#1472">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi,
+Good news, since we have all been good boys and girls ( at least, I
+was ), some presents were left under Christmas tree ( or whatever is
+used for your local celebration if any ).
+
+Anne just told me that a new server will be donated, sponsored by
+Online.net, thanks to Raphael Gertz efforts. The specs ( in french, I
+can translate if Babelfish is not enough ) are here :
+<A HREF="http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml">http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml</A>
+
+Primary use would likely be &quot;iso creation&quot;, a task that requires some
+disk and memory ( and is quite important to do ).
+
+So this bring us some problems :
+
+- the name. Last person to choose was Olivier Blin for friteuse, the
+forum vm ( that still didn't got installed, for those that want to
+know ) and the next one should be decided by Buchan Milne.
+
+So Buchan it is up to you, and you need to design your successor from
+the list of 1 person, Olivier Thauvin, who is the last remaining admin
+in my list. And then, we start to 0 again, aka the full list.
+
+
+- the installation. I volunteered to install it, and add it to puppet
+( and while on it, document it on the wiki ), but I would wish some
+input on the partition table :
+
+ - use raid 1 or raid 0 ( or both as suggested by Nanar, ie raid 1+0 ) ?
+ - lvm, or no lvm, or partial lvm ?
+ - raid or lvm stripping, mirroring ?
+ - ext4, others ?
+
+One of the issue is that the web panel do not support lvm. So I propose
+this :
+
+- 20g, no lvm, for the main system, on ext4
+- the rest as a big raid 0, or raid 1+0 array.
+in the array, we add a big lvm, splitted among
+ - mirror of rpm, around 50 go
+ - swap, around 5 go
+ - iso, around X go per run. ( with X to be calculated later or asked to
+someone who know ).
+
+
+Why raid 0 ( or 1+0 ) ? The server main use will be iso creation ( for
+now ), which mean &quot;lots of I/O&quot;. And that's the main and only reason to
+use raid 0. But if we can have also some redundancy to avoid issue that
+plagued mandriva iso creation ( aka, cascade failure of the iso creation
+server ), it could be nice.
+
+Why lvm ? For flexibility, if we decide to add other services to the
+server ( think virtualisation, there is 8 CPU and there is maybe a 2nd
+ip ). But adding others services on raid 0 may not be a smart idea on
+the other hand, so maybe using raid 1+0 would be nice too.
+
+
+- the access to the web interface. As the server is hosted at online.net
+datacenter and we do not have access, we need to use the web panel to
+reboot and so one ( or IPMI ). We ( ie, anne and me ) have a
+login/password for that. So we need to store it somewhere so members of
+a strictly defined group ( likely admins, but surely also member of the
+board/council ) can access, and no one else can. This mean that the
+password is changed when a member of the group leave the group, and
+something like every year, to avoid problem in case of password
+theft/lose.
+
+While I trust everybody who will receive it to not misuse the password,
+I am not trusting people who could steal the laptop, or people who could
+unlawfully access to it. I do use encrypted partition on my laptop, I
+know not everybody do ( for obvious reason like &quot;this reduce my battery
+life by 1 hour&quot; and &quot;this is broken on installation on mdv&quot; and others
+good reason ).
+
+So we need to :
+- define the list of login/password/url to store there. On top of my
+head, I would say :
+ - web interface for online.net ( anne and I )
+ - impi interface password ( not set yet )
+ - bios password, if any, ( I think we didn't set them )
+ - drac interface of alamut ( I think we did set them, and so damien,
+boklm, me and potentially maat know it )
+ - root password of servers ( can be changed )
+ - dns domain at gandi.net, ( romain should have it )
+
+- decide who should have access. Maybe more than one group should be
+required. I would also add a similar system for the access to outside
+services, like twitter account, etc. ( and that's one more reason to
+prefer hosted service ). While such services are important, losing
+facebook account would be less a problem than the dns name.
+
+- decide how often we change the passwords ( for those that ca be
+changed remotely ), and a process to make sure it was done. Maybe
+somewhere to note when it was done. Or decide to not change it if this
+is too tedious.
+
+- find a system to store them
+ - must be usable offline
+ - should not requires to distribute a master password
+ - must store everything encrypted ( in case of compromission )
+ - must be able to be transmitted over a unsecure channel ( ie, the
+internet )
+ - should be as seamless as possible ( ie, if we requires people to
+download a file, majority will forget to do it ).
+ - must be free software, using a good encryption system ( like not
+3DES ), etc, etc.
+ - a nice addition would be to use our ldap, or ssh keys
+I haven't looked, nor do I have much ideas on that part, so do not be
+shy, express yourself, what do people use in their job ( or
+assimilated ).
+
+At my first mission, we had physical access everywhere so the password
+handling was not a big issue, and used a gpg password file on 2 servers
+( and we used some memory trick to keep the root password of the 20
+servers ).
+
+On another job, we used a php interface for that. I lost the name of the
+web application. It was hosted in our office, with a shared password
+given to employees.
+
+And for zarb.org, we use a quite complex system with a file password.gpg
+encrypted with a key given to admin, with a pass phrase meaning &quot;apple
+pie with cream&quot; in navajo or chinese, something like that.
+
+Obviously, no procedures were set to change any password nowhere :)
+( or at least, not disclosed to me )
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001471.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001499.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1472">[ date ]</a>
+ <a href="thread.html#1472">[ thread ]</a>
+ <a href="subject.html#1472">[ subject ]</a>
+ <a href="author.html#1472">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001473.html b/zarb-ml/mageia-sysadm/2011-January/001473.html
new file mode 100644
index 000000000..6ed943ed5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001473.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [652] add mageiatools repository
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B652%5D%20add%20mageiatools%20repository&In-Reply-To=%3C20110103180040.B18E24178D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001731.html">
+ <LINK REL="Next" HREF="001474.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [652] add mageiatools repository</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B652%5D%20add%20mageiatools%20repository&In-Reply-To=%3C20110103180040.B18E24178D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [652] add mageiatools repository">root at mageia.org
+ </A><BR>
+ <I>Mon Jan 3 19:00:40 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001731.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001474.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1473">[ date ]</a>
+ <a href="thread.html#1473">[ thread ]</a>
+ <a href="subject.html#1473">[ subject ]</a>
+ <a href="author.html#1473">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 652
+Author: boklm
+Date: 2011-01-03 19:00:40 +0100 (Mon, 03 Jan 2011)
+Log Message:
+-----------
+add mageiatools repository
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/vhost_repository.conf
+
+Modified: puppet/modules/buildsystem/templates/vhost_repository.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/vhost_repository.conf 2010-12-21 19:36:10 UTC (rev 651)
++++ puppet/modules/buildsystem/templates/vhost_repository.conf 2011-01-03 18:00:40 UTC (rev 652)
+@@ -8,6 +8,7 @@
+ ServerName repository.&lt;%= domain %&gt;
+ DocumentRoot &lt;%= repository_root %&gt;
+ Alias /mandriva/ &quot;/distrib/mandriva/&quot;
++ Alias /mageiatools/ &quot;/distrib/mageiatools/&quot;
+ &lt;Directory &lt;%= repository_root %&gt;&gt;
+ Order deny,allow
+ Deny from all
+@@ -24,4 +25,9 @@
+ Allow from .&lt;%= domain %&gt;
+ Options Indexes FollowSymLinks
+ &lt;/Directory&gt;
++ &lt;Directory /distrib/mageiatools&gt;
++ Order deny,allow
++ Allow from all
++ Options Indexes FollowSymLinks
++ &lt;/Directory&gt;
+ &lt;/VirtualHost&gt;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110103/3d460159/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001731.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001474.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1473">[ date ]</a>
+ <a href="thread.html#1473">[ thread ]</a>
+ <a href="subject.html#1473">[ subject ]</a>
+ <a href="author.html#1473">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001474.html b/zarb-ml/mageia-sysadm/2011-January/001474.html
new file mode 100644
index 000000000..cf3c9740d
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001474.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] DNS update and redirection
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3CAANLkTimGj%2Bww1iU88%3Dk7DNVzRNmziEBhxe63EhRgtFLK%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001473.html">
+ <LINK REL="Next" HREF="001475.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] DNS update and redirection</H1>
+ <B>Romain d'Alverny</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3CAANLkTimGj%2Bww1iU88%3Dk7DNVzRNmziEBhxe63EhRgtFLK%40mail.gmail.com%3E"
+ TITLE="[Mageia-sysadm] DNS update and redirection">rdalverny at gmail.com
+ </A><BR>
+ <I>Mon Jan 3 21:28:05 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001473.html">[Mageia-sysadm] [652] add mageiatools repository
+</A></li>
+ <LI>Next message: <A HREF="001475.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1474">[ date ]</a>
+ <a href="thread.html#1474">[ thread ]</a>
+ <a href="subject.html#1474">[ subject ]</a>
+ <a href="author.html#1474">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi there,
+
+as notified here
+(<A HREF="https://mageia.org/pipermail/mageia-webteam/2011-January/000087.html">https://mageia.org/pipermail/mageia-webteam/2011-January/000087.html</A>
+) we moved the donation pages from donate.mageia.org to
+www.mageia.org.
+
+We need to update the DNS record for donate.mageia.org: we redirect to
+a new donate.mageia.org vhost somewhere, which will just host a
+rewrite rule along this line:
+
+ RewriteRule ^/(.*)/$ <A HREF="http://www.mageia.org/$1/donate/">http://www.mageia.org/$1/donate/</A> [R,L]
+
+(or, even simplest, if the above is too time consuming, we might just
+as well redirect/rewrite donate.mageia.org to www.mageia.org).
+
+What do you think? Can we do that?
+
+Thanks.
+
+Romain
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001473.html">[Mageia-sysadm] [652] add mageiatools repository
+</A></li>
+ <LI>Next message: <A HREF="001475.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1474">[ date ]</a>
+ <a href="thread.html#1474">[ thread ]</a>
+ <a href="subject.html#1474">[ subject ]</a>
+ <a href="author.html#1474">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001475.html b/zarb-ml/mageia-sysadm/2011-January/001475.html
new file mode 100644
index 000000000..9d4ad908d
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001475.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] DNS update and redirection
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3C1294089684.25290.11.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001474.html">
+ <LINK REL="Next" HREF="001476.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] DNS update and redirection</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3C1294089684.25290.11.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] DNS update and redirection">misc at zarb.org
+ </A><BR>
+ <I>Mon Jan 3 22:21:24 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001474.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001476.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1475">[ date ]</a>
+ <a href="thread.html#1475">[ thread ]</a>
+ <a href="subject.html#1475">[ subject ]</a>
+ <a href="author.html#1475">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le lundi 03 janvier 2011 &#224; 21:28 +0100, Romain d'Alverny a &#233;crit :
+&gt;<i> Hi there,
+</I>&gt;<i>
+</I>&gt;<i> as notified here
+</I>&gt;<i> (<A HREF="https://mageia.org/pipermail/mageia-webteam/2011-January/000087.html">https://mageia.org/pipermail/mageia-webteam/2011-January/000087.html</A>
+</I>&gt;<i> ) we moved the donation pages from donate.mageia.org to
+</I>&gt;<i> www.mageia.org.
+</I>&gt;<i>
+</I>&gt;<i> We need to update the DNS record for donate.mageia.org: we redirect to
+</I>&gt;<i> a new donate.mageia.org vhost somewhere, which will just host a
+</I>&gt;<i> rewrite rule along this line:
+</I>&gt;<i>
+</I>&gt;<i> RewriteRule ^/(.*)/$ <A HREF="http://www.mageia.org/$1/donate/">http://www.mageia.org/$1/donate/</A> [R,L]
+</I>
+I would add R=permanent, to ease the work of search engine ( even if I
+have no slight idea if this would really help them, but I assume that
+following http norm is the best we can do ).
+
+Shouldn't we also set some logs to see if we have traffic on this
+vhost ?
+
+&gt;<i> (or, even simplest, if the above is too time consuming, we might just
+</I>&gt;<i> as well redirect/rewrite donate.mageia.org to www.mageia.org).
+</I>
+A single rewriterule is not what gonna take ressources, when compared to
+some others software.
+
+&gt;<i> What do you think? Can we do that?
+</I>
+Well, we can, I guess we can host it on alamut.
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001474.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001476.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1475">[ date ]</a>
+ <a href="thread.html#1475">[ thread ]</a>
+ <a href="subject.html#1475">[ subject ]</a>
+ <a href="author.html#1475">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001476.html b/zarb-ml/mageia-sysadm/2011-January/001476.html
new file mode 100644
index 000000000..0a0ce8eb2
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001476.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] DNS update and redirection
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3CAANLkTi%3DduWs37L%2BPAVMkC41F27cQEPdYjgd3HAzok1qg%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001475.html">
+ <LINK REL="Next" HREF="001524.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] DNS update and redirection</H1>
+ <B>Romain d'Alverny</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3CAANLkTi%3DduWs37L%2BPAVMkC41F27cQEPdYjgd3HAzok1qg%40mail.gmail.com%3E"
+ TITLE="[Mageia-sysadm] DNS update and redirection">rdalverny at gmail.com
+ </A><BR>
+ <I>Mon Jan 3 22:24:09 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001475.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001524.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1476">[ date ]</a>
+ <a href="thread.html#1476">[ thread ]</a>
+ <a href="subject.html#1476">[ subject ]</a>
+ <a href="author.html#1476">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>On Mon, Jan 3, 2011 at 22:21, Michael Scherer &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">misc at zarb.org</A>&gt; wrote:
+&gt;<i> Le lundi 03 janvier 2011 &#224; 21:28 +0100, Romain d'Alverny a &#233;crit :
+</I>&gt;&gt;<i> &#160; &#160; RewriteRule ^/(.*)/$ <A HREF="http://www.mageia.org/$1/donate/">http://www.mageia.org/$1/donate/</A> [R,L]
+</I>&gt;<i>
+</I>&gt;<i> I would add R=permanent, to ease the work of search engine ( even if I
+</I>&gt;<i> have no slight idea if this would really help them, but I assume that
+</I>&gt;<i> following http norm is the best we can do ).
+</I>&gt;<i>
+</I>&gt;<i> Shouldn't we also set some logs to see if we have traffic on this
+</I>&gt;<i> vhost ?
+</I>
+Yes, that would allow to know right away if/when we need to just cut this off.
+
+&gt;&gt;<i> What do you think? Can we do that?
+</I>&gt;<i>
+</I>&gt;<i> Well, we can, I guess we can host it on alamut.
+</I>
+Great! Thanks.
+
+Romain
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001475.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001524.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1476">[ date ]</a>
+ <a href="thread.html#1476">[ thread ]</a>
+ <a href="subject.html#1476">[ subject ]</a>
+ <a href="author.html#1476">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001477.html b/zarb-ml/mageia-sysadm/2011-January/001477.html
new file mode 100644
index 000000000..1a69ed504
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001477.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104040520.1F4DA417F3%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001524.html">
+ <LINK REL="Next" HREF="001478.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104040520.1F4DA417F3%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 05:05:20 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001524.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001478.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1477">[ date ]</a>
+ <a href="thread.html#1477">[ thread ]</a>
+ <a href="subject.html#1477">[ subject ]</a>
+ <a href="author.html#1477">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 05:05:19 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 05:05:19 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001524.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001478.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1477">[ date ]</a>
+ <a href="thread.html#1477">[ thread ]</a>
+ <a href="subject.html#1477">[ subject ]</a>
+ <a href="author.html#1477">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001478.html b/zarb-ml/mageia-sysadm/2011-January/001478.html
new file mode 100644
index 000000000..1e66913d6
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001478.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104043525.954BC417F8%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001477.html">
+ <LINK REL="Next" HREF="001479.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104043525.954BC417F8%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 05:35:25 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001477.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001479.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1478">[ date ]</a>
+ <a href="thread.html#1478">[ thread ]</a>
+ <a href="subject.html#1478">[ subject ]</a>
+ <a href="author.html#1478">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 05:35:25 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: DELETE FROM &quot;fact_values&quot; WHERE (&quot;id&quot; IN (403974,403975,403976,403977,403978,403979,403980,403981,403982,403983,403984,403985,403986,403987,403988,403989,403990,403991,403992,403993,403994,403995,403996,403997,403998,403999,404000,404001,404002,404003,404004,404005,404006,404007,404008,404009,404010,404011,404012,404013,404014,404015,404016,404017,404018,404019,404020,404021,404022,404023,404024))
+Tue Jan 04 05:35:25 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001477.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001479.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1478">[ date ]</a>
+ <a href="thread.html#1478">[ thread ]</a>
+ <a href="subject.html#1478">[ subject ]</a>
+ <a href="author.html#1478">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001479.html b/zarb-ml/mageia-sysadm/2011-January/001479.html
new file mode 100644
index 000000000..e3572db9e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001479.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104043525.CDF3D417EB%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001478.html">
+ <LINK REL="Next" HREF="001480.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104043525.CDF3D417EB%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 05:35:25 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001478.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001480.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1479">[ date ]</a>
+ <a href="thread.html#1479">[ thread ]</a>
+ <a href="subject.html#1479">[ subject ]</a>
+ <a href="author.html#1479">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 05:35:25 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 05:35:25 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001478.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001480.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1479">[ date ]</a>
+ <a href="thread.html#1479">[ thread ]</a>
+ <a href="subject.html#1479">[ subject ]</a>
+ <a href="author.html#1479">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001480.html b/zarb-ml/mageia-sysadm/2011-January/001480.html
new file mode 100644
index 000000000..d193fde10
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001480.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104050531.B2D0B417FD%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001479.html">
+ <LINK REL="Next" HREF="001482.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104050531.B2D0B417FD%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 06:05:31 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001479.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001482.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1480">[ date ]</a>
+ <a href="thread.html#1480">[ thread ]</a>
+ <a href="subject.html#1480">[ subject ]</a>
+ <a href="author.html#1480">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 06:05:31 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: DELETE FROM &quot;fact_values&quot; WHERE (&quot;id&quot; IN (403974,403975,403976,403977,403978,403979,403980,403981,403982,403983,403984,403985,403986,403987,403988,403989,403990,403991,403992,403993,403994,403995,403996,403997,403998,403999,404000,404001,404002,404003,404004,404005,404006,404007,404008,404009,404010,404011,404012,404013,404014,404015,404016,404017,404018,404019,404020,404021,404022,404023,404024))
+Tue Jan 04 06:05:31 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001479.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001482.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1480">[ date ]</a>
+ <a href="thread.html#1480">[ thread ]</a>
+ <a href="subject.html#1480">[ subject ]</a>
+ <a href="author.html#1480">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001481.html b/zarb-ml/mageia-sysadm/2011-January/001481.html
new file mode 100644
index 000000000..131d1676a
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001481.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104053541.6BE9A41802%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001482.html">
+ <LINK REL="Next" HREF="001483.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104053541.6BE9A41802%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 06:35:41 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001482.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001483.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1481">[ date ]</a>
+ <a href="thread.html#1481">[ thread ]</a>
+ <a href="subject.html#1481">[ subject ]</a>
+ <a href="author.html#1481">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 06:35:40 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 06:35:41 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001482.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001483.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1481">[ date ]</a>
+ <a href="thread.html#1481">[ thread ]</a>
+ <a href="subject.html#1481">[ subject ]</a>
+ <a href="author.html#1481">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001482.html b/zarb-ml/mageia-sysadm/2011-January/001482.html
new file mode 100644
index 000000000..6429d78a8
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001482.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104053540.E8907417F5%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001480.html">
+ <LINK REL="Next" HREF="001481.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104053540.E8907417F5%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 06:35:40 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001480.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001481.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1482">[ date ]</a>
+ <a href="thread.html#1482">[ thread ]</a>
+ <a href="subject.html#1482">[ subject ]</a>
+ <a href="author.html#1482">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 06:35:40 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: INSERT INTO &quot;fact_values&quot; (&quot;created_at&quot;, &quot;updated_at&quot;, &quot;value&quot;, &quot;fact_name_id&quot;, &quot;host_id&quot;) VALUES('2011-01-04 06:35:40', '2011-01-04 06:35:40', 'X8DTN', 62, 5)
+Tue Jan 04 06:35:40 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001480.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001481.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1482">[ date ]</a>
+ <a href="thread.html#1482">[ thread ]</a>
+ <a href="subject.html#1482">[ subject ]</a>
+ <a href="author.html#1482">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001483.html b/zarb-ml/mageia-sysadm/2011-January/001483.html
new file mode 100644
index 000000000..6fec9665e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001483.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104063556.4A66E4180C%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001481.html">
+ <LINK REL="Next" HREF="001484.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104063556.4A66E4180C%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 07:35:56 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001481.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001484.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1483">[ date ]</a>
+ <a href="thread.html#1483">[ thread ]</a>
+ <a href="subject.html#1483">[ subject ]</a>
+ <a href="author.html#1483">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 07:35:55 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: DELETE FROM &quot;fact_values&quot; WHERE (&quot;id&quot; IN (405056,405057,405058,405059,405060,405061,405062,405063,405064,405065,405066,405067,405068,405069,405070,405071,405072,405073,405074,405075,405076,405077,405078,405079,405080,405081,405082,405083,405084,405085,405086,405087,405088,405089,405090,405091,405092,405093,405094,405095,405096,405097,405098,405099,405100,405101,405102,405103,405104,405105,405106))
+Tue Jan 04 07:35:55 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001481.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001484.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1483">[ date ]</a>
+ <a href="thread.html#1483">[ thread ]</a>
+ <a href="subject.html#1483">[ subject ]</a>
+ <a href="author.html#1483">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001484.html b/zarb-ml/mageia-sysadm/2011-January/001484.html
new file mode 100644
index 000000000..3f1eefd8f
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001484.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104063556.8FF1C417FF%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001483.html">
+ <LINK REL="Next" HREF="001485.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104063556.8FF1C417FF%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 07:35:56 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001483.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001485.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1484">[ date ]</a>
+ <a href="thread.html#1484">[ thread ]</a>
+ <a href="subject.html#1484">[ subject ]</a>
+ <a href="author.html#1484">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 07:35:56 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 07:35:56 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001483.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001485.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1484">[ date ]</a>
+ <a href="thread.html#1484">[ thread ]</a>
+ <a href="subject.html#1484">[ subject ]</a>
+ <a href="author.html#1484">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001485.html b/zarb-ml/mageia-sysadm/2011-January/001485.html
new file mode 100644
index 000000000..4e2b8fbc9
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001485.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104070602.C9F8141811%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001484.html">
+ <LINK REL="Next" HREF="001486.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104070602.C9F8141811%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 08:06:02 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001484.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001486.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1485">[ date ]</a>
+ <a href="thread.html#1485">[ thread ]</a>
+ <a href="subject.html#1485">[ subject ]</a>
+ <a href="author.html#1485">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 08:06:02 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: DELETE FROM &quot;fact_values&quot; WHERE (&quot;id&quot; IN (405056,405057,405058,405059,405060,405061,405062,405063,405064,405065,405066,405067,405068,405069,405070,405071,405072,405073,405074,405075,405076,405077,405078,405079,405080,405081,405082,405083,405084,405085,405086,405087,405088,405089,405090,405091,405092,405093,405094,405095,405096,405097,405098,405099,405100,405101,405102,405103,405104,405105,405106))
+Tue Jan 04 08:06:02 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001484.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001486.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1485">[ date ]</a>
+ <a href="thread.html#1485">[ thread ]</a>
+ <a href="subject.html#1485">[ subject ]</a>
+ <a href="author.html#1485">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001486.html b/zarb-ml/mageia-sysadm/2011-January/001486.html
new file mode 100644
index 000000000..c88d85b48
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001486.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104070603.24FAC4180E%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001485.html">
+ <LINK REL="Next" HREF="001487.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104070603.24FAC4180E%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 08:06:03 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001485.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001487.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1486">[ date ]</a>
+ <a href="thread.html#1486">[ thread ]</a>
+ <a href="subject.html#1486">[ subject ]</a>
+ <a href="author.html#1486">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 08:06:02 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 08:06:02 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001485.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001487.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1486">[ date ]</a>
+ <a href="thread.html#1486">[ thread ]</a>
+ <a href="subject.html#1486">[ subject ]</a>
+ <a href="author.html#1486">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001487.html b/zarb-ml/mageia-sysadm/2011-January/001487.html
new file mode 100644
index 000000000..74e536947
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001487.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104073609.4F12341816%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001486.html">
+ <LINK REL="Next" HREF="001488.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104073609.4F12341816%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 08:36:09 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001486.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001488.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1487">[ date ]</a>
+ <a href="thread.html#1487">[ thread ]</a>
+ <a href="subject.html#1487">[ subject ]</a>
+ <a href="author.html#1487">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 08:36:08 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: DELETE FROM &quot;fact_values&quot; WHERE (&quot;id&quot; IN (405056,405057,405058,405059,405060,405061,405062,405063,405064,405065,405066,405067,405068,405069,405070,405071,405072,405073,405074,405075,405076,405077,405078,405079,405080,405081,405082,405083,405084,405085,405086,405087,405088,405089,405090,405091,405092,405093,405094,405095,405096,405097,405098,405099,405100,405101,405102,405103,405104,405105,405106))
+Tue Jan 04 08:36:08 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001486.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001488.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1487">[ date ]</a>
+ <a href="thread.html#1487">[ thread ]</a>
+ <a href="subject.html#1487">[ subject ]</a>
+ <a href="author.html#1487">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001488.html b/zarb-ml/mageia-sysadm/2011-January/001488.html
new file mode 100644
index 000000000..22ed577f9
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001488.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104073609.9F6DB41809%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001487.html">
+ <LINK REL="Next" HREF="001490.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104073609.9F6DB41809%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 08:36:09 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001487.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001490.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1488">[ date ]</a>
+ <a href="thread.html#1488">[ thread ]</a>
+ <a href="subject.html#1488">[ subject ]</a>
+ <a href="author.html#1488">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 08:36:09 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 08:36:09 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001487.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001490.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1488">[ date ]</a>
+ <a href="thread.html#1488">[ thread ]</a>
+ <a href="subject.html#1488">[ subject ]</a>
+ <a href="author.html#1488">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001489.html b/zarb-ml/mageia-sysadm/2011-January/001489.html
new file mode 100644
index 000000000..a69d0b92a
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001489.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104080616.1842D4181B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001490.html">
+ <LINK REL="Next" HREF="001491.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104080616.1842D4181B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 09:06:16 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001490.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001491.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1489">[ date ]</a>
+ <a href="thread.html#1489">[ thread ]</a>
+ <a href="subject.html#1489">[ subject ]</a>
+ <a href="author.html#1489">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 09:06:15 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 09:06:15 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001490.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001491.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1489">[ date ]</a>
+ <a href="thread.html#1489">[ thread ]</a>
+ <a href="subject.html#1489">[ subject ]</a>
+ <a href="author.html#1489">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001490.html b/zarb-ml/mageia-sysadm/2011-January/001490.html
new file mode 100644
index 000000000..59b06cedb
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001490.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104080615.8D89A4181B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001488.html">
+ <LINK REL="Next" HREF="001489.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104080615.8D89A4181B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 09:06:15 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001488.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001489.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1490">[ date ]</a>
+ <a href="thread.html#1490">[ thread ]</a>
+ <a href="subject.html#1490">[ subject ]</a>
+ <a href="author.html#1490">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 09:06:15 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: INSERT INTO &quot;fact_values&quot; (&quot;created_at&quot;, &quot;updated_at&quot;, &quot;value&quot;, &quot;fact_name_id&quot;, &quot;host_id&quot;) VALUES('2011-01-04 09:06:15', '2011-01-04 09:06:15', 'X8DTN', 62, 5)
+Tue Jan 04 09:06:15 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001488.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001489.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1490">[ date ]</a>
+ <a href="thread.html#1490">[ thread ]</a>
+ <a href="subject.html#1490">[ subject ]</a>
+ <a href="author.html#1490">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001491.html b/zarb-ml/mageia-sysadm/2011-January/001491.html
new file mode 100644
index 000000000..14cc6d7ac
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001491.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104083621.8293541820%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001489.html">
+ <LINK REL="Next" HREF="001492.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104083621.8293541820%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 09:36:21 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001489.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001492.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1491">[ date ]</a>
+ <a href="thread.html#1491">[ thread ]</a>
+ <a href="subject.html#1491">[ subject ]</a>
+ <a href="author.html#1491">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 09:36:21 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: INSERT INTO &quot;fact_values&quot; (&quot;created_at&quot;, &quot;updated_at&quot;, &quot;value&quot;, &quot;fact_name_id&quot;, &quot;host_id&quot;) VALUES('2011-01-04 09:36:21', '2011-01-04 09:36:21', 'X8DTN', 62, 5)
+Tue Jan 04 09:36:21 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001489.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001492.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1491">[ date ]</a>
+ <a href="thread.html#1491">[ thread ]</a>
+ <a href="subject.html#1491">[ subject ]</a>
+ <a href="author.html#1491">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001492.html b/zarb-ml/mageia-sysadm/2011-January/001492.html
new file mode 100644
index 000000000..93d2dc273
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001492.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104083622.128C441820%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001491.html">
+ <LINK REL="Next" HREF="001493.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104083622.128C441820%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 09:36:22 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001491.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001493.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1492">[ date ]</a>
+ <a href="thread.html#1492">[ thread ]</a>
+ <a href="subject.html#1492">[ subject ]</a>
+ <a href="author.html#1492">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 09:36:21 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 09:36:21 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001491.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001493.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1492">[ date ]</a>
+ <a href="thread.html#1492">[ thread ]</a>
+ <a href="subject.html#1492">[ subject ]</a>
+ <a href="author.html#1492">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001493.html b/zarb-ml/mageia-sysadm/2011-January/001493.html
new file mode 100644
index 000000000..49e5de383
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001493.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104090627.7934D41825%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001492.html">
+ <LINK REL="Next" HREF="001494.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104090627.7934D41825%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 10:06:27 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001492.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001494.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1493">[ date ]</a>
+ <a href="thread.html#1493">[ thread ]</a>
+ <a href="subject.html#1493">[ subject ]</a>
+ <a href="author.html#1493">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 10:06:27 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: INSERT INTO &quot;fact_values&quot; (&quot;created_at&quot;, &quot;updated_at&quot;, &quot;value&quot;, &quot;fact_name_id&quot;, &quot;host_id&quot;) VALUES('2011-01-04 10:06:27', '2011-01-04 10:06:27', 'X8DTN', 62, 5)
+Tue Jan 04 10:06:27 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001492.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001494.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1493">[ date ]</a>
+ <a href="thread.html#1493">[ thread ]</a>
+ <a href="subject.html#1493">[ subject ]</a>
+ <a href="author.html#1493">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001494.html b/zarb-ml/mageia-sysadm/2011-January/001494.html
new file mode 100644
index 000000000..f67babb7b
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001494.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104090628.011B241825%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001493.html">
+ <LINK REL="Next" HREF="001495.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104090628.011B241825%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 10:06:27 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001493.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001495.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1494">[ date ]</a>
+ <a href="thread.html#1494">[ thread ]</a>
+ <a href="subject.html#1494">[ subject ]</a>
+ <a href="author.html#1494">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 10:06:27 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 10:06:27 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001493.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001495.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1494">[ date ]</a>
+ <a href="thread.html#1494">[ thread ]</a>
+ <a href="subject.html#1494">[ subject ]</a>
+ <a href="author.html#1494">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001495.html b/zarb-ml/mageia-sysadm/2011-January/001495.html
new file mode 100644
index 000000000..010644f08
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001495.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104093633.6CFFC41813%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001494.html">
+ <LINK REL="Next" HREF="001496.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104093633.6CFFC41813%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 10:36:33 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001494.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001496.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1495">[ date ]</a>
+ <a href="thread.html#1495">[ thread ]</a>
+ <a href="subject.html#1495">[ subject ]</a>
+ <a href="author.html#1495">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 10:36:33 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: SQLite3::BusyException: database is locked: INSERT INTO &quot;fact_values&quot; (&quot;created_at&quot;, &quot;updated_at&quot;, &quot;value&quot;, &quot;fact_name_id&quot;, &quot;host_id&quot;) VALUES('2011-01-04 10:36:33', '2011-01-04 10:36:33', 'X8DTN', 62, 5)
+Tue Jan 04 10:36:33 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001494.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001496.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1495">[ date ]</a>
+ <a href="thread.html#1495">[ thread ]</a>
+ <a href="subject.html#1495">[ subject ]</a>
+ <a href="author.html#1495">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001496.html b/zarb-ml/mageia-sysadm/2011-January/001496.html
new file mode 100644
index 000000000..15be2db6c
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001496.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104093633.F33BE4182A%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001495.html">
+ <LINK REL="Next" HREF="001497.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104093633.F33BE4182A%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 10:36:33 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001495.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001497.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1496">[ date ]</a>
+ <a href="thread.html#1496">[ thread ]</a>
+ <a href="subject.html#1496">[ subject ]</a>
+ <a href="author.html#1496">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 10:36:33 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 10:36:33 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001495.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001497.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1496">[ date ]</a>
+ <a href="thread.html#1496">[ thread ]</a>
+ <a href="subject.html#1496">[ subject ]</a>
+ <a href="author.html#1496">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001497.html b/zarb-ml/mageia-sysadm/2011-January/001497.html
new file mode 100644
index 000000000..90431cab7
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001497.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for valstar.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104100642.8FBF24182C%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001496.html">
+ <LINK REL="Next" HREF="001498.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for valstar.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20valstar.mageia.org&In-Reply-To=%3C20110104100642.8FBF24182C%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for valstar.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 11:06:42 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001496.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001498.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1497">[ date ]</a>
+ <a href="thread.html#1497">[ thread ]</a>
+ <a href="subject.html#1497">[ subject ]</a>
+ <a href="author.html#1497">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 11:06:42 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Tue Jan 04 11:06:42 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001496.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001498.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1497">[ date ]</a>
+ <a href="thread.html#1497">[ thread ]</a>
+ <a href="subject.html#1497">[ subject ]</a>
+ <a href="author.html#1497">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001498.html b/zarb-ml/mageia-sysadm/2011-January/001498.html
new file mode 100644
index 000000000..173962ad2
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001498.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for champagne.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104124745.539304184B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001497.html">
+ <LINK REL="Next" HREF="001502.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for champagne.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20champagne.mageia.org&In-Reply-To=%3C20110104124745.539304184B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for champagne.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Tue Jan 4 13:47:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001497.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001502.html">[Mageia-sysadm] [202] add repsys
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1498">[ date ]</a>
+ <a href="thread.html#1498">[ thread ]</a>
+ <a href="subject.html#1498">[ subject ]</a>
+ <a href="author.html#1498">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Tue Jan 04 13:47:15 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: getaddrinfo: Temporary failure in name resolution
+Tue Jan 04 13:47:15 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001497.html">[Mageia-sysadm] Puppet Report for valstar.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001502.html">[Mageia-sysadm] [202] add repsys
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1498">[ date ]</a>
+ <a href="thread.html#1498">[ thread ]</a>
+ <a href="subject.html#1498">[ subject ]</a>
+ <a href="author.html#1498">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001499.html b/zarb-ml/mageia-sysadm/2011-January/001499.html
new file mode 100644
index 000000000..0f2c917d7
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001499.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [LONG] new server to name and password handling
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C20110104154553.GA22099%40maude.comedia.it%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001472.html">
+ <LINK REL="Next" HREF="001504.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [LONG] new server to name and password handling</H1>
+ <B>Luca Berra</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C20110104154553.GA22099%40maude.comedia.it%3E"
+ TITLE="[Mageia-sysadm] [LONG] new server to name and password handling">bluca at vodka.it
+ </A><BR>
+ <I>Tue Jan 4 16:45:53 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001472.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001504.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1499">[ date ]</a>
+ <a href="thread.html#1499">[ thread ]</a>
+ <a href="subject.html#1499">[ subject ]</a>
+ <a href="author.html#1499">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>On Mon, Jan 03, 2011 at 02:00:40AM +0100, Michael Scherer wrote:
+&gt;<i>Online.net, thanks to Raphael Gertz efforts. The specs ( in french, I
+</I>&gt;<i>can translate if Babelfish is not enough ) are here :
+</I>&gt;<i><A HREF="http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml">http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml</A>
+</I>&gt;<i>
+</I>&gt;<i>Why raid 0 ( or 1+0 ) ? The server main use will be iso creation ( for
+</I>
+the dell R210 in the specs only has space for two SATA drives (uning the
+integrated Perc Raid Controller)
+so it will probably be configurd as a HW mirror, and that's it.
+
+
+--
+Luca Berra -- <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">bluca at vodka.it</A>
+</PRE>
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001472.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001504.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1499">[ date ]</a>
+ <a href="thread.html#1499">[ thread ]</a>
+ <a href="subject.html#1499">[ subject ]</a>
+ <a href="author.html#1499">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001500.html b/zarb-ml/mageia-sysadm/2011-January/001500.html
new file mode 100644
index 000000000..90bdcba1a
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001500.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [203] tag version 1.9
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B203%5D%20tag%20version%201.9&In-Reply-To=%3C20110104161045.5A0AB4186B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001502.html">
+ <LINK REL="Next" HREF="001501.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [203] tag version 1.9</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B203%5D%20tag%20version%201.9&In-Reply-To=%3C20110104161045.5A0AB4186B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [203] tag version 1.9">root at mageia.org
+ </A><BR>
+ <I>Tue Jan 4 17:10:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001502.html">[Mageia-sysadm] [202] add repsys
+</A></li>
+ <LI>Next message: <A HREF="001501.html">[Mageia-sysadm] [204] fix problem with python threads on 2010.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1500">[ date ]</a>
+ <a href="thread.html#1500">[ thread ]</a>
+ <a href="subject.html#1500">[ subject ]</a>
+ <a href="author.html#1500">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 203
+Author: boklm
+Date: 2011-01-04 17:10:45 +0100 (Tue, 04 Jan 2011)
+Log Message:
+-----------
+tag version 1.9
+
+Added Paths:
+-----------
+ build_system/repsys/tags/1.9/
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110104/f08d39f2/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001502.html">[Mageia-sysadm] [202] add repsys
+</A></li>
+ <LI>Next message: <A HREF="001501.html">[Mageia-sysadm] [204] fix problem with python threads on 2010.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1500">[ date ]</a>
+ <a href="thread.html#1500">[ thread ]</a>
+ <a href="subject.html#1500">[ subject ]</a>
+ <a href="author.html#1500">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001501.html b/zarb-ml/mageia-sysadm/2011-January/001501.html
new file mode 100644
index 000000000..2f36e1dc6
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001501.html
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [204] fix problem with python threads on 2010.1
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B204%5D%20fix%20problem%20with%20python%20threads%20on%202010.1&In-Reply-To=%3C20110104161553.F09254186C%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001500.html">
+ <LINK REL="Next" HREF="001503.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [204] fix problem with python threads on 2010.1</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B204%5D%20fix%20problem%20with%20python%20threads%20on%202010.1&In-Reply-To=%3C20110104161553.F09254186C%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [204] fix problem with python threads on 2010.1">root at mageia.org
+ </A><BR>
+ <I>Tue Jan 4 17:15:53 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001500.html">[Mageia-sysadm] [203] tag version 1.9
+</A></li>
+ <LI>Next message: <A HREF="001503.html">[Mageia-sysadm] [205] version 1.9.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1501">[ date ]</a>
+ <a href="thread.html#1501">[ thread ]</a>
+ <a href="subject.html#1501">[ subject ]</a>
+ <a href="author.html#1501">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 204
+Author: boklm
+Date: 2011-01-04 17:15:53 +0100 (Tue, 04 Jan 2011)
+Log Message:
+-----------
+fix problem with python threads on 2010.1
+
+Modified Paths:
+--------------
+ build_system/repsys/trunk/CHANGES
+ build_system/repsys/trunk/RepSys/binrepo.py
+ build_system/repsys/trunk/repsys
+
+Modified: build_system/repsys/trunk/CHANGES
+===================================================================
+--- build_system/repsys/trunk/CHANGES 2011-01-04 16:10:45 UTC (rev 203)
++++ build_system/repsys/trunk/CHANGES 2011-01-04 16:15:53 UTC (rev 204)
+@@ -1,4 +1,7 @@
+-* Development
++* 1.9.1-binrepo
++- fix problem with python threads on 2010.1
++
++* 1.9-binrepo
+ - added support to &quot;binary repository&quot;
+ - added new commands upload, up and del to help handling tarballs in the
+ binaries repository
+
+Modified: build_system/repsys/trunk/RepSys/binrepo.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/binrepo.py 2011-01-04 16:10:45 UTC (rev 203)
++++ build_system/repsys/trunk/RepSys/binrepo.py 2011-01-04 16:15:53 UTC (rev 204)
+@@ -297,6 +297,7 @@
+ def update_sources_threaded(*args, **kwargs):
+ t = threading.Thread(target=update_sources, args=args, kwargs=kwargs)
+ t.start()
++ t.join()
+ return t
+
+ def upload(path, message=None):
+
+Modified: build_system/repsys/trunk/repsys
+===================================================================
+--- build_system/repsys/trunk/repsys 2011-01-04 16:10:45 UTC (rev 203)
++++ build_system/repsys/trunk/repsys 2011-01-04 16:15:53 UTC (rev 204)
+@@ -4,7 +4,7 @@
+ import getopt
+ import sys
+
+-VERSION=&quot;1.9-binrepo&quot;
++VERSION=&quot;1.9.1-binrepo&quot;
+
+ HELP = &quot;&quot;&quot;\
+ Usage: repsys COMMAND [COMMAND ARGUMENTS]
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110104/62a507a0/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001500.html">[Mageia-sysadm] [203] tag version 1.9
+</A></li>
+ <LI>Next message: <A HREF="001503.html">[Mageia-sysadm] [205] version 1.9.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1501">[ date ]</a>
+ <a href="thread.html#1501">[ thread ]</a>
+ <a href="subject.html#1501">[ subject ]</a>
+ <a href="author.html#1501">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001502.html b/zarb-ml/mageia-sysadm/2011-January/001502.html
new file mode 100644
index 000000000..98dc62068
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001502.html
@@ -0,0 +1,6711 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [202] add repsys
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B202%5D%20add%20repsys&In-Reply-To=%3C20110104160944.A36404186B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001498.html">
+ <LINK REL="Next" HREF="001500.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [202] add repsys</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B202%5D%20add%20repsys&In-Reply-To=%3C20110104160944.A36404186B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [202] add repsys">root at mageia.org
+ </A><BR>
+ <I>Tue Jan 4 17:09:44 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001498.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001500.html">[Mageia-sysadm] [203] tag version 1.9
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1502">[ date ]</a>
+ <a href="thread.html#1502">[ thread ]</a>
+ <a href="subject.html#1502">[ subject ]</a>
+ <a href="author.html#1502">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 202
+Author: boklm
+Date: 2011-01-04 17:09:44 +0100 (Tue, 04 Jan 2011)
+Log Message:
+-----------
+add repsys
+
+Added Paths:
+-----------
+ build_system/repsys/
+ build_system/repsys/branches/
+ build_system/repsys/tags/
+ build_system/repsys/trunk/
+ build_system/repsys/trunk/BRANCH
+ build_system/repsys/trunk/CHANGES
+ build_system/repsys/trunk/MANIFEST.in
+ build_system/repsys/trunk/README
+ build_system/repsys/trunk/README.LDAP
+ build_system/repsys/trunk/RepSys/
+ build_system/repsys/trunk/RepSys/ConfigParser.py
+ build_system/repsys/trunk/RepSys/__init__.py
+ build_system/repsys/trunk/RepSys/binrepo.py
+ build_system/repsys/trunk/RepSys/cgi/
+ build_system/repsys/trunk/RepSys/cgi/__init__.py
+ build_system/repsys/trunk/RepSys/cgi/soapserver.py
+ build_system/repsys/trunk/RepSys/cgi/submit.py
+ build_system/repsys/trunk/RepSys/cgi/xmlrpcserver.py
+ build_system/repsys/trunk/RepSys/cgiutil.py
+ build_system/repsys/trunk/RepSys/command.py
+ build_system/repsys/trunk/RepSys/commands/
+ build_system/repsys/trunk/RepSys/commands/__init__.py
+ build_system/repsys/trunk/RepSys/commands/authoremail.py
+ build_system/repsys/trunk/RepSys/commands/changed.py
+ build_system/repsys/trunk/RepSys/commands/ci.py
+ build_system/repsys/trunk/RepSys/commands/co.py
+ build_system/repsys/trunk/RepSys/commands/create.py
+ build_system/repsys/trunk/RepSys/commands/del.py
+ build_system/repsys/trunk/RepSys/commands/editlog.py
+ build_system/repsys/trunk/RepSys/commands/getspec.py
+ build_system/repsys/trunk/RepSys/commands/getsrpm.py
+ build_system/repsys/trunk/RepSys/commands/log.py
+ build_system/repsys/trunk/RepSys/commands/markrelease.py
+ build_system/repsys/trunk/RepSys/commands/patchspec.py
+ build_system/repsys/trunk/RepSys/commands/putsrpm.py
+ build_system/repsys/trunk/RepSys/commands/rpmlog.py
+ build_system/repsys/trunk/RepSys/commands/submit.py
+ build_system/repsys/trunk/RepSys/commands/switch.py
+ build_system/repsys/trunk/RepSys/commands/sync.py
+ build_system/repsys/trunk/RepSys/commands/up.py
+ build_system/repsys/trunk/RepSys/commands/upload.py
+ build_system/repsys/trunk/RepSys/layout.py
+ build_system/repsys/trunk/RepSys/log.py
+ build_system/repsys/trunk/RepSys/mirror.py
+ build_system/repsys/trunk/RepSys/plugins/
+ build_system/repsys/trunk/RepSys/plugins/__init__.py
+ build_system/repsys/trunk/RepSys/plugins/ldapusers.py
+ build_system/repsys/trunk/RepSys/plugins/sample.py.txt
+ build_system/repsys/trunk/RepSys/rpmutil.py
+ build_system/repsys/trunk/RepSys/simplerpm.py
+ build_system/repsys/trunk/RepSys/svn.py
+ build_system/repsys/trunk/RepSys/util.py
+ build_system/repsys/trunk/create-srpm
+ build_system/repsys/trunk/default.chlog
+ build_system/repsys/trunk/repsys
+ build_system/repsys/trunk/repsys-example.conf
+ build_system/repsys/trunk/repsys-ssh
+ build_system/repsys/trunk/repsys.8
+ build_system/repsys/trunk/repsys.conf
+ build_system/repsys/trunk/revno.chlog
+ build_system/repsys/trunk/setup.cfg
+ build_system/repsys/trunk/setup.py
+
+Added: build_system/repsys/trunk/BRANCH
+===================================================================
+--- build_system/repsys/trunk/BRANCH (rev 0)
++++ build_system/repsys/trunk/BRANCH 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,419 @@
++================================
++The detached binaries repository
++================================
++
++.. contents::
++
++A brief description
++===================
++
++Ideally, all binaries from packages sources (ie. all the binary files inside
++SOURCES/) will be placed in another subversion repository. This repository
++is called &quot;tarballs repository&quot;, &quot;binaries repository&quot; or just &quot;binrepo&quot;.
++It will contain mostly the same directory structure of the main repository,
++but instead of having SOURCES and SPECS, it will only have a SOURCES
++directory. Every copy/move operation should happen in both repositories.
++
++In order to allow deceasing binaries from older distributions, each stable
++distro will have its own subversion repository for binary files. repsys
++knows how to access these binrepos by checking which URL defined in the
++&quot;[binrepo]&quot; section of the configuration file matches the path-part of the
++repository being accessed. (see open issues)
++
++The package changelogs will be generated from SVN commit logs in the main
++&quot;plaintext&quot; repository (&quot;txtrepo&quot; for short) only. Old changelogs will be
++preserved, as even empty revisions are preserved in the binaries-filtering
++conversion.
++
++
++Mapping repositories states
++---------------------------
++
++In order to allow the use of `repsys {getsrpm,co} -r REV`, repsys will have
++to use a reference in the text repo which will be used to know in what
++state was the binrepo when a binary was uploaded.
++
++We cannot use direct revision number mapping through properties/files/etc
++mainly because we may have multiple binaries repositories, and eventually
++they can be filtered for reducing space, thus can't ensure revisions will
++survive. Thus another mechanism which relies on dates instead of revisions
++numbers is needed.
++
++When a binary is uploaded to the binrepo, the file `sha1.lst` is updated to
++have the files's hash and commited in the main text repo. This file will be
++used as the reference when the user uses -r REV on repsys. repsys will
++checkout the package in the main text repo with -r REV and then will use
++the &quot;Last Changed Date&quot; of `sha1.lst` to checkout the binrepo part. Thus,
++`sha1.lst` should be always commited to the main text repository *after* the
++corresponding binary files have been commited to the binrepo. Hooks in the
++main repository may be used to try to enforce this, by checking if the files
++changed in `sha1.lst` are already commited in the corresponding binrepo.
++
++Computation of `sha1.lst` is unlikely to be an issue:
++
++- it should not happen too often for any given package
++- it takes[0] less than 10s to sha1sum all SOURCES of openoffice.org-3.1-1mdv2010.0.src.rpm
++- it probably takes way less than the time to upload the file into the repository
++- it can be computed in parallel to the binrepo commit, and probably finish
++ before that, thus ready by the time `sha1.lst` should be commited
++- users don't need to verify the SHA1s &quot;everytime&quot;, but the build system
++ does, thus Repsys can default to not verify and avoid wasting users' time
++
++The use of `sha1.lst` has the valuable property of tying the state of the main
++repository and the binrepo. With it, at getsrpm time of a package
++submission we can verify the SHA1 of the SOURCES-bin, and be sure that
++either the package will be built with the expected state, or early fail the
++build. It also allows for verifying binaries without trusting the binrepo,
++which may be useful if we consider using an unversioned plain filesystem
++storage in the future (for old distros or whatever), or at &quot;client side&quot;,
++which maintainers may find useful.
++
++[0]: In a single core AMD Athlon(tm) 3800+ (2400Mhz)
++
++Mapping of revisions using SVN properties
++-----------------------------------------
++
++Alternatively to using the above &quot;sha1.lst scheme&quot;, the revision mapping
++between the main repository and a binrepo could be done using subversion
++properties. This could be done by making every commit to binrepos also
++cause a corresponding commit in the main text repository to happen, which
++would update a property recording the current date. That is, a subversion
++property in the main text repository would be kept, such that for any given
++main repository revision, the corresponding state of the binrepos is
++obtainable (using the registered date).
++
++This would be &quot;more transparent&quot;, as it can be maintened simply by using
++subversion hooks, without user intervention. OTOH, as every time the user
++commits to a binrepo this would result in a commit in the main repository,
++it would require the user to &quot;svn up&quot; the directories from there before
++commiting, after every binrepo commit. Also, this might result in a big
++number of &quot;bogus&quot; commits to the main repository, which could be seen as log
++pollution, and may potentially increase space usage etc..
++
++Why a new repository without the tarballs
++==========================================
++
++- the current svn repository is too large, hard to manage
++- big binary files (in general, &quot;tarballs&quot;) history is of little value in
++ the distro development, we care much more about our specs, patches,
++ configurations, etc.; nonetheless, those big files we don't care much for
++ take the most resources and make backups and restoration in case of
++ failure very expensive, much more so than the more valuable data
++- there is no easy way to strip undesired tarballs without recreating the
++ whole repository
++- fedora and ubuntu have separated repositories, so we must have it too!
++
++Numbers
++-------
++
++Current repository is +390000 revisions and ~340Gb big, while the bzip2ed
++dumps backup for it takes about a bit more than half that size (FIXME:
++estimative, can't check in the backup server right now). Current txtrepo
++with the same number of revisions is ~180Gb big, takes about 2-3 days to be
++imported, while the gzipped full dump backup for it currently takes ~1.2Gb.
++Initial binrepo for Cooker (only `current/` packages' branches) took ~28Gb
++in disk, gzipped full dump for it takes ~25Gb, took about 5h30m to be
++populated from the current in use repository (&quot;oldrepo&quot;).
++
++
++Drawbacks of this layout
++=========================
++
++- (always) everything that changes the single-repository usage increases the chance
++ of failure and make things more complicated.
++- subversion can't be used alone as easily as the current scheme allows
++- copying binaries between distro branches may not be &quot;svn-cheap&quot; anymore
++ (unless they're in the same binrepo)
++- ...
++
++
++Open issues
++============
++
++Multiple binrepos dont allow us to have one permanent URL
++---------------------------------------------------------
++
++We would have to update the configuration files from all the users in order
++to add a new stable repository. spuk suggests to use properties in the main
++text repo that would point to the right repository locations.
++
++How to handle failures when operating on more repositores?
++----------------------------------------------------------
++
++binrepos should replicate the structure of the main text repo. What we
++should do if the markrelease succeeds in the binrepo, but fails in the main
++text repo?
++
++R: Markrelease must be done first in the txtrepo. If it fails there &quot;we're
++in trouble&quot; (though currently, we just miss it[0]). When the markrelease is
++done in the txtrepo, we can do markrelease in the binrepo using '-r {DATE}',
++using the markrelease date in the txtrepo as '{DATE}'.
++
++[0] We should add transaction support for markrelease. The transaction could
++be stored out of the packages SVN (another SVN, a DB, a txt file, etc.), and
++would work like:
++
++0. mark beginning of markrelease, early failing the package build if it fails
++1. do markrelease
++2. mark sucessful end of markrelease
++ or mark failed markrelease, so we can replay it later
++
++
++Interesting use cases (first phase)
++===================================
++
++repsys co 2008.1/mutt
++---------------------
++
++- repsys checkouts
++ <A HREF="http://svn.mandriva.com/svn/packages/updates/2008.1/mutt/current">http://svn.mandriva.com/svn/packages/updates/2008.1/mutt/current</A> to the
++ mutt directory
++
++- repsys checkouts
++ <A HREF="http://svn.mandriva.com/svn/binrepo/updates/2008.1/mutt/current/SOURCES">http://svn.mandriva.com/svn/binrepo/updates/2008.1/mutt/current/SOURCES</A>
++ into mutt/SOURCES-bin
++
++- creates symlinks for all files found in SOURCES-bin/ into ../SOURCES/
++
++ (rpm doesn't handle symlinks, this allows us to have explicit links and
++ proper src.rpm generates by rpmbuild)
++
++In case the path doesn't exist in the binrepo it will not fail, as we may
++have not imported all packages or the repository is not prepared to work on
++this model, etc.
++
++markrelease of a package
++------------------------
++
++::
++
++ $ repsys markrelease
++
++- will copy current/ to releases/VERSION/RELEASE, as usual
++
++- will copy current/ to releases/, on the binrepo too
++
++Optionally, markrelease could create revprops indicating which is the
++revision of current/ on the binrepo that represents the tarballs that are
++being tagged.
++
++
++Use cases to be implemented after the first phase
++=================================================
++
++upgrading to a newer version of the package
++-------------------------------------------
++
++::
++
++ $ cd bla/SOURCES/
++ $ wget <A HREF="http://prdownloads.sourceforge.net/bla/bla-1.6.tar.bz2">http://prdownloads.sourceforge.net/bla/bla-1.6.tar.bz2</A>
++ $ repsys add bla-1.6.0.tar.bz2
++
++- repsys notices this is a tarball (checking filename and/or file size)
++
++- repsys will move the file to SOURCES-bin/, create the symlink, and svn-add
++ it to the working copy
++
++ $ # the user updates the spec
++
++ $ repsys rm SOURCES/bla-1.5.1.tar.bz2
++
++- it will remove the symlink and run svn rm on
++ SOURCES-bin/bla-1.6.0.tar.bz2::
++
++ $ cd ../ # package top dir
++ $ repsys ci
++
++- repsys will commit the new tarball on SOURCES-bin/ and then on the rest
++ of the working copy
++
++repsys sync would perform these steps too.
++
++importing a package
++-------------------
++
++ $ repsys putsrpm mypkg.src.rpm
++
++- repsys will open the src.rpm
++
++- will look for tarballs inside SOURCES/ and import them to
++ <A HREF="http://svn.mandriva.com/svn/binrepo/cooker/mypkg/current/SOURCES/">http://svn.mandriva.com/svn/binrepo/cooker/mypkg/current/SOURCES/</A>
++
++- will move the tarballs out of SOURCES and import the remaining files to
++ <A HREF="http://svn.mandriva.com/svn/packages/cooker/mypkg/current/">http://svn.mandriva.com/svn/packages/cooker/mypkg/current/</A>
++
++- will do whatever else putsrpm already does
++
++TODO
++=====
++
++First phase
++-----------
++
++- upload
++- markrelease
++- putsrpm
++- getsrpm
++
++
++Second phase
++------------
++
++- up
++- sync
++
++Rejected or postponed ideas
++===========================
++
++Use of a plain filesystem storage for the tarballs
++--------------------------------------------------
++
++This was planned, then rejected. It becomes too complicated when thinking
++about markrelease, and mapping SVN revisions in the main repository to
++binaries versions in the &quot;tarballs storage&quot;, basically requiring
++implementing VCS-like features on top of filesystem. Would also require
++implementing another authentication and access scheme. The main feature
++would be ease of removing old binaries, which isn't much of a point because
++we don't know precisely what and when we want to remove, so may end up not
++removing much files anyway.
++
++Use of a plain unversioned filesystem storage for the tarballs
++--------------------------------------------------------------
++
++Different than the previous one, this would mean not relying at all on
++binary files history keeping. Structure could be something simple like::
++
++ packages/${pkg:0:1}/$pkg/$tarball
++
++This alternative does not suffice for Cooker, nor for supported distros, for
++which we want history. It could, however, at some point be used for &quot;very
++old&quot; distros, for which we may have lost interest in keeping *binaries*
++history (package history will kept &quot;forever&quot; in the main SVN repository).
++Alternatively, &quot;resetting&quot; an SVN binrepo (i.e. recreate the repository) to
++contain only the latest tarballs would probably take about the same amount
++of space, anyway...
++
++Open tarballs repository
++------------------------
++
++This idea is not really rejected. It does not go against splitting txtrepo
++and binrepo, but rather complement this idea, where the
++open-tarballs-repository would take the place of the binrepo. The txtrepo
++would still be used +- the same way. This repository could be used
++selectively, for packages where it makes sense, while most packages could be
++kept &quot;closed&quot;, still as tarballs.
++
++Use of externals for more seamless Subversion usage
++---------------------------------------------------
++
++This idea is not discarded, but it just provides easiness. OTOH, it makes
++things more complicated:
++
++- markrelease: externals would have to be updated in order to make it point
++ to the tagged version in the binrepo, otherwise changes in
++ <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">current at binrepo</A> would change older releases;
++- branching whole distro: even though subversion now supports &quot;relative
++ externals&quot;, we would have to update the URLs for *every* package on the
++ distro, as the path to reach the binrepo spans the local distribution
++ directory;
++- keeping externals up-to-date (as stated above and below)
++- authentication and access control: only markrelease action done by the
++ build system should be allowed to change externals (so what about importing
++ new packages?)
++- just a convenience, we don't need and shouldn't rely on externals for
++ running the build system, while most people will use the repositories via
++ Repsys, so why spend time to implement and keep it?
++- &quot;svn co&quot; works transparently, cool, but &quot;svn co -r N&quot; does not, otherwise
++ every change in the binrepo would require svn:externals to be updated in
++ the respective package;
++- it does not solve the problem of creating and handling symlinks between
++ SOURCES and SOURCES-bin.
++
++Keeping svn:externals updated for every package has almost the same cost of
++keeping the `sha1.lst` updated, with the difference that in the latter we
++would not have to update every package when creating distro branches.
++
++Use of &quot;external&quot; xdelta to save space on binaries
++--------------------------------------------------
++
++But how? First idea is this could be done by defining a protocol and
++assuming repository manipulation with repsys (for ease). Repsys could
++xdelta tarballs and add it to SVN with a special filename, then use it when
++checking out. Would require a policy/algorithm on when to ditch old whole
++binaries, too (i.e. hopefully wouldn't need to be handled manually by the
++maintainer). Also, this is something complemental to splitting the
++repository, so we may do it later, for binrepos.
++
++
++The Future
++==========
++
++- Open tarballs repositories
++
++ - suited for GIT, maybe multi-VCS
++ - incremental move
++ - not everything will be suited for this, must handle all cases or be
++ optional
++
++- Xdelta
++
++
++Deployment
++==========
++
++The current repository will be kept around for a while, in readonly state.
++Initial binrepos will be populated with the binaries in the `current/`
++branches of packages.
++
++The binrepo mappings config might be kept in a fixed subversion revision
++property (revision 0?).
++
++Rough steps
++-----------
++
++- check for agreement between subversion repository filters for binaries,
++ and repsys
++- upgrade repsys everywhere
++
++ - kenobi
++ - cluster nodes
++ - raoh
++ - titan
++
++- populate the binrepos for each supported distro, from a specific revision
++ of oldrepo, and mass commmit the corresponding `sha1.lst` in txtrepo for
++ every package
++
++ - set svn:date revprop of the `sha1.lst` mass commit to the date of the
++ oldrepo revision
++ - before mass commiting the `sha1.lst`, possibly freeze oldrepo, check
++ for changes to sources after the selected revision, and update the
++ binrepo as necessary
++
++- check Secteam scripts, make needed changes to get them ready (non
++ critical)
++- set up the new repositories
++
++ - hook for filtering of disallowed (binary) files in main repository
++ - binrepos mappings
++
++- make the new main + binrepos repositories available, but readonly
++
++ - keep new main repository in sync with the old repository with hooks
++
++- make current repository readonly and enable verification of sha1.lst at
++ package submission time
++
++- make sure new main repository and old repository are in sync
++
++ - resync binrepos with the old repository as needed
++
++- final tests
++
++ - change something
++ - submit
++ - etc.
++
++- make the new repositories writeable
++
+
+Added: build_system/repsys/trunk/CHANGES
+===================================================================
+--- build_system/repsys/trunk/CHANGES (rev 0)
++++ build_system/repsys/trunk/CHANGES 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,163 @@
++* Development
++- added support to &quot;binary repository&quot;
++- added new commands upload, up and del to help handling tarballs in the
++ binaries repository
++
++* 1.9
++- really fixed -M
++- new command log: shows the svn log for a given package
++- added option -s to co, to allow checking out only SPECS
++- use a better message when checking out from the mirror
++- show the path where getspec wrote the spec file
++
++* 1.8
++- make the -M option work again
++- sync now adds the spec file (pointed by blino)
++- fixed putsrpm to not create old log files for packages without changelog
++- submit now can fetch the revision number if not specified (it also shows
++ the author and the first line of the commit)
++- allow submitting many packages at once, even without support on server
++ side (the same behavior as running repsys submit for each package)
++- append a parameter sid=UUID for every set of packages submitted
++- strip username from package URL on submit (#53939)
++- clearer error message when svn co fails
++- svn authentication errors are handled, pointing to the wiki page on
++ configuration
++- svn commands will not be shown on error messages, unless using --debug
++- repsys uses the wrapper repsys-ssh for svn, to handle signals and also
++ set BatchMode
++- added the configuration option svn-env
++- show the error from rpm when fetching the version from a spec fails
++
++* 1.7
++- dropped all authenticated access support: subversion authentication has
++ been broken for a long time and the workarounds weren't decent. It will
++ be back in 1.7.x.
++- added configuration option svn-command in the global section, allowing
++ to replace the default svn command
++- force svn+<A HREF="ssh://">ssh://</A> URLs to be in BatchMode, in order to not have any
++ interactivity at all with ssh
++- fixed incompatibility with Python-2.4 on urlparse
++- fixed emptylog message, which was not being shown when needed
++- distributions can be specified by using &lt;distro&gt;/&lt;package&gt; in all
++ commands
++- allow submitting many packages at once (#28352)
++- package revisions in submit are now specified with <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">name at nnn</A>
++- the user can define groups of packages to be submitted in the section
++ &quot;submit-groups&quot;
++- make 'repsys submit' without package name or revision number work again
++- added option --distro to submit
++- make putsrpm work again
++- added subcommand import as an alias to putsrpm
++- template: hide the first release when it has only invisible lines
++- added initial man page
++- allow resorting changelog entries through the config option sort in the
++ log section
++- added rpmlog options: -o to append the old changelog, -p to append the
++ changelog found in the spec, and -s to resort all changelog entries
++- rpmlog, getsrpm, getspec and changed will use the mirror if enabled
++- don't hide authors with only the first revision SILENTed (#41117)
++- fixed bad url used when using -v in getsrpm
++- if REPSYS_CONF is set, /etc/repsys.conf and ~/.repsys/config will not be
++ readed anymore
++- sort the final changelog by enabling the option sort in the log section
++- merge the changelog found in the spec by enabling the option merge-spec
++ in the log section
++- changed the built-in template to the current default.chlog
++- added option -d to repsys sync, to download the missing source files
++- added option -F to repsys ci to set a log message file
++- added option --strict to getsrpm to check if the revision provided
++ matches the package URL;
++- changed the default command to build SRPMs to rpmbuild
++- added configuration option rpmbuild to the section helper, to define the
++ command used to build packages
++- added boolean configuration option strict-revision in the submit
++ section, to allow forcing the use of --strict
++- added option --list in create-srpm to list the available targets
++- make submit -l work on svn+<A HREF="ssh://">ssh://</A> targets
++- the fix for the unreleased commits problem in the previous release was
++ wrong, really fixed it
++- moved all configuration options that will hardly be changed to
++ repsys-example.conf; we now have a shorter repsys.conf
++- fixed the use of <A HREF="file:///">file:///</A> URLs when using just the package name
++- allow using submit with package URLs having usernames
++- don't give the wrong message &quot;invalid command 'CMD'&quot; when this is not
++ the case
++- added more help messages in subcommands
++
++* 1.6.19
++- added complement for SILENT: CLOG, which hides everything that does not
++ start with this token
++- fixed generation of unreleased commits, it was using the previous
++ markrelease revision as reference
++- added option -o to 'co' to disable the use of mirror when checking out
++
++* 1.6.18
++- added the subcommand &quot;switch&quot; to help with mirrors support
++- initialize plugins in create-srpm too
++- changelog: perform less svn calls to obtain release number and oldlog
++- changelog: show epoch even in the entry not released
++- changelog: make default.chlog compatible with cheetah-2
++- make &quot;sync&quot; compatible with rpm-4.4.8 behavior
++- &quot;co&quot; don't use mirror when URL is provided
++- &quot;ci&quot; don't relocate back to mirrors after commit (should use switch)
++- ldapusers: added options ldap-uri and ldap-starttls
++- fixed use of __import__, incompatible with python2.4 in plugin support
++- fixed bug of wrong paths when using mirrors
++
++* 1.6.17
++- brought from mdvsys world the sync command
++- ldapusers: the configuration format has changed, now it uses python
++ template strings
++- ldapusers: many fixes: better error messages, ldap-port working, results
++ contain only the fields needed, unbinding after search, filters are
++ escaped
++
++* 1.6.16
++- introduced the plugin ldapusers: repsys user data obtained from LDAP;
++ this plugin is builtin
++- added support to plugins, and the hability to wrap configuration sections
++- added workaround in the template to ignore empty releases
++- added initial support to mirrors, as requested by mrl; it required the
++ new subcommand &quot;ci&quot;
++- changelogs from misc/ will come from HEAD and should be escaped (%%)
++
++* 1.6.15
++- empty changelog entries are now shown, with a EMPTYLOG tag to allow
++ rpmlint warn the developer about it
++- check (and warn) if a temporary package has already been removed before
++ trying to remove it
++
++* 1.6.2b
++- make submit pass --define options to create-srpm script
++- print error message when create-srpm fails
++- make get_srpm return the srpms list
++- add upload-srpm support in create-srpm
++
++* 1.6.2a
++- moved revision-offset to [log] section and added a comment
++
++* 1.6.2
++- reimplemented the option -n for rpmlog, which now uses the svn option
++ --limit.
++- added the option revision-offset, for the Zero Day Revision issue.
++- small fix in main repsys help message
++
++* 1.6.1
++- added option url-map, as an workaround for svn+<A HREF="ssh://">ssh://</A> urls problems
++- added configuration sectiom &quot;helper&quot;
++- added getsrpm-mdk and create-srpm to setup.py
++- added option -r to submit
++
++* 1.6.0
++- improved markrelease command line parsing
++- changelogs entries are now groupped by author, and sorted by revision
++ number
++- the changelog now is generated using the Cheetah Template Engine, to
++ allow quick modifications without spending time reading code and
++ introducing new bugs
++- consequently, was added an option &quot;-T &lt;file&gt;&quot; to rpmlog and getsrpm to
++ allow choosing the path of the template to be used
++- added options noauth=0, and baseurl=None in order to disable the
++ authentication in some url schemes (<A HREF="http://">http://</A> and <A HREF="file://">file://</A>)
++- replaced some &quot;cl&quot; references to &quot;mdv&quot;
+
+Added: build_system/repsys/trunk/MANIFEST.in
+===================================================================
+--- build_system/repsys/trunk/MANIFEST.in (rev 0)
++++ build_system/repsys/trunk/MANIFEST.in 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,10 @@
++recursive-include RepSys *.py
++include RepSys/plugins/*.txt
++include repsys repsys.conf MANIFEST.in
++include repsys.8
++include README
++include CHANGES
++include README.LDAP
++include repsys-example.conf
++include *.chlog
++include create-srpm repsys-ssh
+
+Added: build_system/repsys/trunk/README
+===================================================================
+--- build_system/repsys/trunk/README (rev 0)
++++ build_system/repsys/trunk/README 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,12 @@
++repsys is the tool used to manage RPM packages in a subversion repository.
++It is used to create, tag releases, generate .src.rpm, generate changelog,
++and request new package releases for build. It mostly acts as a interface
++to svn(1) commands and small task scripts run that on the build system side
++over ssh(1).
++
++For more information, see repsys(8) and
++<A HREF="http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem">http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem</A>
++
++The discussion on the development of repsys takes place on the
++&quot;maintainers&quot; mailing list:
++<A HREF="http://wiki.mandriva.com/en/Development/Mailinglists">http://wiki.mandriva.com/en/Development/Mailinglists</A>
+
+Added: build_system/repsys/trunk/README.LDAP
+===================================================================
+--- build_system/repsys/trunk/README.LDAP (rev 0)
++++ build_system/repsys/trunk/README.LDAP 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,61 @@
++A Repsys plugin for obtaining users from a LDAP server.
++
++In order to enable the plugin, the user must define the following
++options in the [global] section of repsys.conf:
++
++ ldap-uri [required if ldap-server is unset]
++ the URI of the server, you can refer to more than one server by
++ adding more URIs separated by spaces::
++
++ ldap-uri = <A HREF="ldap://ldap.network/">ldap://ldap.network/</A> <A HREF="ldaps://backup.network:22389/">ldaps://backup.network:22389/</A>
++
++ ldap-server [required if ldap-uri is unset]
++ the host name of the LDAP server
++ ldap-port [optional] [default: 389]
++ the port of the LDAP server
++ ldap-base [required]
++ the base DN where the search will be performed
++ ldap-binddn [optional] [default: empty]
++ the DN used to bind
++ ldap-bindpw [optional] [default: empty]
++ the password used to bind
++ ldap-starttls [optional] [default: no]
++ use &quot;yes&quot; or &quot;no&quot; to enable or disable the use of the STARTTLS
++ LDAP extension
++ ldap-filterformat [optional]
++ [default: (&amp;(objectClass=inetOrgPerson)(uid=$username))]
++ RFC-2254 filter string used in the search of the user entry.
++ Note that this is a python template string and will have the
++ user name as parameter. For example:
++
++ ldap-filterformat = (&amp;(objectClass=inetOrgPerson)(uid=$username))
++
++ Will result in the search filter:
++
++ (&amp;(objectClass=inetOrgPerson)(uid=john))
++
++ ldap-resultformat [optional] [default: $cn &lt;$mail&gt;]
++ This is a python template string. This string will be
++ formatted using one dict object containing the fields
++ returned in the LDAP search, for example:
++
++ &gt;&gt;&gt; format = Template(&quot;$cn &lt;$mail&gt;&quot;)
++ &gt;&gt;&gt; d = search(basedn, filter)
++ &gt;&gt;&gt; d
++ {&quot;cn&quot;: &quot;John Doe&quot;, &quot;mail&quot;: &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">john at mandriva.org</A>&quot;,
++ &quot;uidNumber&quot;: &quot;1290&quot;, &quot;loginShell&quot;: &quot;/bin/bash&quot;,
++ ... many other attributes ... }
++ &gt;&gt;&gt; value = format.substitute(d)
++ &gt;&gt;&gt; print value
++ John Doe &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">john at mandriva.org</A>&gt;
++
++ Note that only the first value of the attributes will be
++ used.
++
++When the searched option is not found, it will try in repsys.conf. All
++the values found. (including from repsys.conf) will be cached between
++each configuration access.
++
++This plugin requires the package python-ldap.
++
++For more information, look <A HREF="http://qa.mandriva.com/show_bug.cgi?id=30549">http://qa.mandriva.com/show_bug.cgi?id=30549</A>
+
+Added: build_system/repsys/trunk/RepSys/ConfigParser.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/ConfigParser.py (rev 0)
++++ build_system/repsys/trunk/RepSys/ConfigParser.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,434 @@
++&quot;&quot;&quot;
++This is a heavily hacked version of ConfigParser to keep the order in
++which options and sections are read, and allow multiple options with
++the same key.
++&quot;&quot;&quot;
++from __future__ import generators
++import string, types
++import re
++
++__all__ = [&quot;NoSectionError&quot;,&quot;DuplicateSectionError&quot;,&quot;NoOptionError&quot;,
++ &quot;InterpolationError&quot;,&quot;InterpolationDepthError&quot;,&quot;ParsingError&quot;,
++ &quot;MissingSectionHeaderError&quot;,&quot;ConfigParser&quot;,
++ &quot;MAX_INTERPOLATION_DEPTH&quot;]
++
++DEFAULTSECT = &quot;DEFAULT&quot;
++
++MAX_INTERPOLATION_DEPTH = 10
++
++# exception classes
++class Error(Exception):
++ def __init__(self, msg=''):
++ self._msg = msg
++ Exception.__init__(self, msg)
++ def __repr__(self):
++ return self._msg
++ __str__ = __repr__
++
++class NoSectionError(Error):
++ def __init__(self, section):
++ Error.__init__(self, 'No section: %s' % section)
++ self.section = section
++
++class DuplicateSectionError(Error):
++ def __init__(self, section):
++ Error.__init__(self, &quot;Section %s already exists&quot; % section)
++ self.section = section
++
++class NoOptionError(Error):
++ def __init__(self, option, section):
++ Error.__init__(self, &quot;No option `%s' in section: %s&quot; %
++ (option, section))
++ self.option = option
++ self.section = section
++
++class InterpolationError(Error):
++ def __init__(self, reference, option, section, rawval):
++ Error.__init__(self,
++ &quot;Bad value substitution:\n&quot;
++ &quot;\tsection: [%s]\n&quot;
++ &quot;\toption : %s\n&quot;
++ &quot;\tkey : %s\n&quot;
++ &quot;\trawval : %s\n&quot;
++ % (section, option, reference, rawval))
++ self.reference = reference
++ self.option = option
++ self.section = section
++
++class InterpolationDepthError(Error):
++ def __init__(self, option, section, rawval):
++ Error.__init__(self,
++ &quot;Value interpolation too deeply recursive:\n&quot;
++ &quot;\tsection: [%s]\n&quot;
++ &quot;\toption : %s\n&quot;
++ &quot;\trawval : %s\n&quot;
++ % (section, option, rawval))
++ self.option = option
++ self.section = section
++
++class ParsingError(Error):
++ def __init__(self, filename):
++ Error.__init__(self, 'File contains parsing errors: %s' % filename)
++ self.filename = filename
++ self.errors = []
++
++ def append(self, lineno, line):
++ self.errors.append((lineno, line))
++ self._msg = self._msg + '\n\t[line %2d]: %s' % (lineno, line)
++
++class MissingSectionHeaderError(ParsingError):
++ def __init__(self, filename, lineno, line):
++ Error.__init__(
++ self,
++ 'File contains no section headers.\nfile: %s, line: %d\n%s' %
++ (filename, lineno, line))
++ self.filename = filename
++ self.lineno = lineno
++ self.line = line
++
++class ConfigParser:
++ def __init__(self, defaults=None):
++ # Options are stored in __sections_list like this:
++ # [(sectname, [(optname, optval), ...]), ...]
++ self.__sections_list = []
++ self.__sections_dict = {}
++ if defaults is None:
++ self.__defaults = {}
++ else:
++ self.__defaults = defaults
++
++ def defaults(self):
++ return self.__defaults
++
++ def sections(self):
++ return self.__sections_dict.keys()
++
++ def has_section(self, section):
++ return self.__sections_dict.has_key(section)
++
++ def options(self, section):
++ self.__sections_dict[section]
++ try:
++ opts = self.__sections_dict[section].keys()
++ except KeyError:
++ raise NoSectionError(section)
++ return self.__defaults.keys()+opts
++
++ def read(self, filenames):
++ if type(filenames) in types.StringTypes:
++ filenames = [filenames]
++ for filename in filenames:
++ try:
++ fp = open(filename)
++ except IOError:
++ continue
++ self.__read(fp, filename)
++ fp.close()
++
++ def readfp(self, fp, filename=None):
++ if filename is None:
++ try:
++ filename = fp.name
++ except AttributeError:
++ filename = '&lt;???&gt;'
++ self.__read(fp, filename)
++
++ def set(self, section, option, value):
++ if self.__sections_dict.has_key(section):
++ sectdict = self.__sections_dict[section]
++ sectlist = []
++ self.__sections_list.append((section, sectlist))
++ elif section == DEFAULTSECT:
++ sectdict = self.__defaults
++ sectlist = None
++ else:
++ sectdict = {}
++ self.__sections_dict[section] = sectdict
++ sectlist = []
++ self.__sections_list.append((section, sectlist))
++ xform = self.optionxform(option)
++ sectdict[xform] = value
++ if sectlist is not None:
++ sectlist.append([xform, value])
++
++ def get(self, section, option, raw=0, vars=None):
++ d = self.__defaults.copy()
++ try:
++ d.update(self.__sections_dict[section])
++ except KeyError:
++ if section != DEFAULTSECT:
++ raise NoSectionError(section)
++ if vars:
++ d.update(vars)
++ option = self.optionxform(option)
++ try:
++ rawval = d[option]
++ except KeyError:
++ raise NoOptionError(option, section)
++ if raw:
++ return rawval
++ return self.__interpolate(rawval, d)
++
++ def getall(self, section, option, raw=0, vars=None):
++ option = self.optionxform(option)
++ values = []
++ d = self.__defaults.copy()
++ if section != DEFAULTSECT:
++ for sectname, options in self.__sections_list:
++ if sectname == section:
++ for optname, value in options:
++ if optname == option:
++ values.append(value)
++ d[optname] = value
++ if raw:
++ return values
++ if vars:
++ d.update(vars)
++ for i in len(values):
++ values[i] = self.__interpolate(values[i], d)
++ return values
++
++ def walk(self, section, option=None, raw=0, vars=None):
++ # Build dictionary for interpolation
++ try:
++ d = self.__sections_dict[section].copy()
++ except KeyError:
++ if section == DEFAULTSECT:
++ d = {}
++ else:
++ raise NoSectionError(section)
++ d.update(self.__defaults)
++ if vars:
++ d.update(vars)
++
++ # Start walking
++ if option:
++ option = self.optionxform(option)
++ if section != DEFAULTSECT:
++ for sectname, options in self.__sections_list:
++ if sectname == section:
++ for optname, value in options:
++ if not option or optname == option:
++ if not raw:
++ value = self.__interpolate(value, d)
++ yield (optname, value)
++
++ def __interpolate(self, value, vars):
++ rawval = value
++ depth = 0
++ while depth &lt; 10:
++ depth = depth + 1
++ if value.find(&quot;%(&quot;) &gt;= 0:
++ try:
++ value = value % vars
++ except KeyError, key:
++ raise InterpolationError(key, option, section, rawval)
++ else:
++ break
++ if value.find(&quot;%(&quot;) &gt;= 0:
++ raise InterpolationDepthError(option, section, rawval)
++ return value
++
++ def __get(self, section, conv, option):
++ return conv(self.get(section, option))
++
++ def getint(self, section, option):
++ return self.__get(section, string.atoi, option)
++
++ def getfloat(self, section, option):
++ return self.__get(section, string.atof, option)
++
++ def getboolean(self, section, option):
++ states = {'1': 1, 'yes': 1, 'true': 1, 'on': 1,
++ '0': 0, 'no': 0, 'false': 0, 'off': 0}
++ v = self.get(section, option)
++ if not states.has_key(v.lower()):
++ raise ValueError, 'Not a boolean: %s' % v
++ return states[v.lower()]
++
++ def optionxform(self, optionstr):
++ #return optionstr.lower()
++ return optionstr
++
++ def has_option(self, section, option):
++ &quot;&quot;&quot;Check for the existence of a given option in a given section.&quot;&quot;&quot;
++ if not section or section == &quot;DEFAULT&quot;:
++ return self.__defaults.has_key(option)
++ elif not self.has_section(section):
++ return 0
++ else:
++ option = self.optionxform(option)
++ return self.__sections_dict[section].has_key(option)
++
++ SECTCRE = re.compile(r'\[(?P&lt;header&gt;[^]]+)\]')
++ OPTCRE = re.compile(r'(?P&lt;option&gt;\S+)\s*(?P&lt;vi&gt;[:=])\s*(?P&lt;value&gt;.*)$')
++
++ def __read(self, fp, fpname):
++ cursectdict = None # None, or a dictionary
++ optname = None
++ lineno = 0
++ e = None # None, or an exception
++ while 1:
++ line = fp.readline()
++ if not line:
++ break
++ lineno = lineno + 1
++ # comment or blank line?
++ if line.strip() == '' or line[0] in '#;':
++ continue
++ if line.split()[0].lower() == 'rem' \
++ and line[0] in &quot;rR&quot;: # no leading whitespace
++ continue
++ # continuation line?
++ if line[0] in ' \t' and cursectdict is not None and optname:
++ value = line.strip()
++ if value:
++ k = self.optionxform(optname)
++ cursectdict[k] = &quot;%s\n%s&quot; % (cursectdict[k], value)
++ cursectlist[-1][1] = &quot;%s\n%s&quot; % (cursectlist[-1][1], value)
++ # a section header or option header?
++ else:
++ # is it a section header?
++ mo = self.SECTCRE.match(line)
++ if mo:
++ sectname = mo.group('header')
++ if self.__sections_dict.has_key(sectname):
++ cursectdict = self.__sections_dict[sectname]
++ cursectlist = []
++ self.__sections_list.append((sectname, cursectlist))
++ elif sectname == DEFAULTSECT:
++ cursectdict = self.__defaults
++ cursectlist = None
++ else:
++ cursectdict = {}
++ self.__sections_dict[sectname] = cursectdict
++ cursectlist = []
++ self.__sections_list.append((sectname, cursectlist))
++ # So sections can't start with a continuation line
++ optname = None
++ # no section header in the file?
++ elif cursectdict is None:
++ raise MissingSectionHeaderError(fpname, lineno, `line`)
++ # an option line?
++ else:
++ mo = self.OPTCRE.match(line)
++ if mo:
++ optname, vi, optval = mo.group('option', 'vi', 'value')
++ if vi in ('=', ':') and ';' in optval:
++ # ';' is a comment delimiter only if it follows
++ # a spacing character
++ pos = optval.find(';')
++ if pos and optval[pos-1] in string.whitespace:
++ optval = optval[:pos]
++ optval = optval.strip()
++ # allow empty values
++ if optval == '&quot;&quot;':
++ optval = ''
++ xform = self.optionxform(optname)
++ cursectdict[xform] = optval
++ if cursectlist is not None:
++ cursectlist.append([xform, optval])
++ else:
++ # a non-fatal parsing error occurred. set up the
++ # exception but keep going. the exception will be
++ # raised at the end of the file and will contain a
++ # list of all bogus lines
++ if not e:
++ e = ParsingError(fpname)
++ e.append(lineno, `line`)
++ # if any parsing errors occurred, raise an exception
++ if e:
++ raise e
++
++# Here we wrap this hacked ConfigParser into something more useful
++# for us.
++
++import os
++
++class Config:
++ def __init__(self):
++ self._config = ConfigParser()
++ self._wrapped = {}
++ conffiles = []
++ repsys_conf = os.environ.get(&quot;REPSYS_CONF&quot;)
++ if repsys_conf:
++ conffiles.append(repsys_conf)
++ else:
++ conffiles.append(&quot;/etc/repsys.conf&quot;)
++ conffiles.append(os.path.expanduser(&quot;~/.repsys/config&quot;))
++ for file in conffiles:
++ if os.path.isfile(file):
++ self._config.read(file)
++
++ def wrap(self, section, handler, option=None):
++ &quot;&quot;&quot;Set one wrapper for a given section
++
++ The wrapper must be a function
++ f(section, option=None, default=None, walk=False).
++ &quot;&quot;&quot;
++ self._wrapped[section] = handler
++
++ def sections(self):
++ try:
++ return self._config.sections()
++ except Error:
++ return []
++
++ def options(self, section):
++ try:
++ return self._config.options(section)
++ except Error:
++ return []
++
++ def set(self, section, option, value):
++ return self._config.set(section, option, value)
++
++ def walk(self, section, option=None, raw=0, vars=None):
++ handler = self._wrapped.get(section)
++ if handler:
++ return handler(section, option, walk=True)
++ return self._config.walk(section, option, raw, vars)
++
++ def get(self, section, option, default=None, raw=False, wrap=True):
++ if wrap:
++ handler = self._wrapped.get(section)
++ if handler:
++ handler = self._wrapped.get(section)
++ return handler(section, option, default)
++ try:
++ return self._config.get(section, option, raw=raw)
++ except Error:
++ return default
++
++ def getint(self, section, option, default=None):
++ ret = self.get(section, option, default)
++ if type(ret) == type(&quot;&quot;):
++ return int(ret)
++
++ def getbool(self, section, option, default=None):
++ ret = self.get(section, option, default)
++ states = {'1': 1, 'yes': 1, 'true': 1, 'on': 1,
++ '0': 0, 'no': 0, 'false': 0, 'off': 0}
++ if type(ret) == type(&quot;&quot;) and states.has_key(ret.lower()):
++ return states[ret.lower()]
++ return default
++
++def test():
++ config = Config()
++ def handler(section, option=None, default=None, walk=False):
++ d = {&quot;fulano&quot;: &quot;ciclano&quot;,
++ &quot;foolano&quot;: &quot;ceeclano&quot;}
++ if walk:
++ return d.items()
++ elif option in d:
++ return d[option]
++ else:
++ return config.get(section, option, default, wrap=False)
++ config.wrap(&quot;users&quot;, handler=handler)
++ print config.get(&quot;users&quot;, &quot;fulano&quot;) # found in wrapper
++ print config.get(&quot;users&quot;, &quot;andreas&quot;) # found in repsys.conf
++ print config.walk(&quot;users&quot;)
++
++if __name__ == &quot;__main__&quot;:
++ test()
++# vim:ts=4:sw=4:et
+
+Added: build_system/repsys/trunk/RepSys/__init__.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/__init__.py (rev 0)
++++ build_system/repsys/trunk/RepSys/__init__.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,19 @@
++#!/usr/bin/python
++import re
++import os
++import tempfile
++
++import ConfigParser
++
++config = ConfigParser.Config()
++tempfile.tempdir = config.get(&quot;global&quot;, &quot;tempdir&quot;, None) or None # when &quot;&quot;
++del ConfigParser
++
++def disable_mirror(*a, **kw):
++ config.set(&quot;global&quot;, &quot;use-mirror&quot;, &quot;no&quot;)
++
++class Error(Exception): pass
++
++class SilentError(Error): pass
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/binrepo.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/binrepo.py (rev 0)
++++ build_system/repsys/trunk/RepSys/binrepo.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,393 @@
++from RepSys import Error, config, mirror, layout
++from RepSys.util import execcmd, rellink
++from RepSys.svn import SVN
++
++import sys
++import os
++import string
++import stat
++import shutil
++import re
++import tempfile
++import hashlib
++import urlparse
++import threading
++from cStringIO import StringIO
++
++DEFAULT_TARBALLS_REPO = &quot;/tarballs&quot;
++BINARIES_DIR_NAME = &quot;SOURCES&quot;
++BINARIES_CHECKOUT_NAME = &quot;SOURCES-bin&quot;
++
++PROP_USES_BINREPO = &quot;mdv:uses-binrepo&quot;
++PROP_BINREPO_REV = &quot;mdv:binrepo-rev&quot;
++
++BINREPOS_SECTION = &quot;binrepos&quot;
++
++SOURCES_FILE = &quot;sha1.lst&quot;
++
++class ChecksumError(Error):
++ pass
++
++def svn_baseurl(target):
++ svn = SVN()
++ info = svn.info2(target)
++ if info is None:
++ # unversioned resource
++ newtarget = os.path.dirname(target)
++ info = svn.info2(newtarget)
++ assert info is not None, &quot;svn_basedir should not be used with a &quot;\
++ &quot;non-versioned directory&quot;
++ root = info[&quot;Repository Root&quot;]
++ url = info[&quot;URL&quot;]
++ kind = info[&quot;Node Kind&quot;]
++ path = url[len(root):]
++ if kind == &quot;directory&quot;:
++ return url
++ basepath = os.path.dirname(path)
++ baseurl = mirror.normalize_path(url + &quot;/&quot; + basepath)
++ return baseurl
++
++def svn_root(target):
++ svn = SVN()
++ info = svn.info2(target)
++ if info is None:
++ newtarget = os.path.dirname(target)
++ info = svn.info2(newtarget)
++ assert info is not None
++ return info[&quot;Repository Root&quot;]
++
++def enabled(url):
++ #TODO use information from url to find out whether we have a binrepo
++ # available for this url
++ use = config.getbool(&quot;global&quot;, &quot;use-binaries-repository&quot;, False)
++ return use
++
++def default_repo():
++ base = config.get(&quot;global&quot;, &quot;binaries-repository&quot;, None)
++ if base is None:
++ default_parent = config.get(&quot;global&quot;, &quot;default_parent&quot;, None)
++ if default_parent is None:
++ raise Error, &quot;no binaries-repository nor default_parent &quot;\
++ &quot;configured&quot;
++ comps = urlparse.urlparse(default_parent)
++ base = comps[1] + &quot;:&quot; + DEFAULT_TARBALLS_REPO
++ return base
++
++def translate_url(url):
++ url = mirror.normalize_path(url)
++ main = mirror.normalize_path(layout.repository_url())
++ subpath = url[len(main)+1:]
++ # [binrepos]
++ # updates/2009.0 = svn+<A HREF="ssh://svn.mandriva.com/svn/binrepo/20090/">ssh://svn.mandriva.com/svn/binrepo/20090/</A>
++ ## svn+<A HREF="ssh://svn.mandriva.com/svn/packages/2009.0/trafshow/current">ssh://svn.mandriva.com/svn/packages/2009.0/trafshow/current</A>
++ ## would translate to
++ ## svn+<A HREF="ssh://svn.mandriva.com/svn/binrepo/20090/updates/trafshow/current/">ssh://svn.mandriva.com/svn/binrepo/20090/updates/trafshow/current/</A>
++ binbase = None
++ if BINREPOS_SECTION in config.sections():
++ for option, value in config.walk(BINREPOS_SECTION):
++ if subpath.startswith(option):
++ binbase = value
++ break
++ binurl = mirror._joinurl(binbase or default_repo(), subpath)
++ return binurl
++
++def translate_topdir(path):
++ &quot;&quot;&quot;Returns the URL in the binrepo from a given path inside a SVN
++ checkout directory.
++
++ @path: if specified, returns a URL in the binrepo whose path is the
++ same as the path inside the main repository.
++ &quot;&quot;&quot;
++ baseurl = svn_baseurl(path)
++ binurl = translate_url(baseurl)
++ target = mirror.normalize_path(binurl)
++ return target
++
++def is_binary(path):
++ raw = config.get(&quot;binrepo&quot;, &quot;upload-match&quot;,
++ &quot;\.(7z|Z|bin|bz2|cpio|db|deb|egg|gem|gz|jar|jisp|lzma|&quot;\
++ &quot;pdf|pgn\\.gz|pk3|rpm|rpm|run|sdz|smzip|tar|tbz|&quot;\
++ &quot;tbz2|tgz|ttf|uqm|wad|war|xar|xpi|zip)$&quot;)
++ maxsize = config.getint(&quot;binrepo&quot;, &quot;upload-match-size&quot;, &quot;1048576&quot;) # 1MiB
++ expr = re.compile(raw)
++ name = os.path.basename(path)
++ if expr.search(name):
++ return True
++ st = os.stat(path)
++ if st[stat.ST_SIZE] &gt;= maxsize:
++ return True
++ return False
++
++def find_binaries(paths):
++ new = []
++ for path in paths:
++ if os.path.isdir(path):
++ for name in os.listdir(path):
++ fpath = os.path.join(path, name)
++ if is_binary(fpath):
++ new.append(fpath)
++ else:
++ if is_binary(path):
++ new.append(path)
++ return new
++
++def make_symlinks(source, dest):
++ todo = []
++ tomove = []
++ for name in os.listdir(source):
++ path = os.path.join(source, name)
++ if not os.path.isdir(path) and not name.startswith(&quot;.&quot;):
++ destpath = os.path.join(dest, name)
++ linkpath = rellink(path, destpath)
++ if os.path.exists(destpath):
++ if (os.path.islink(destpath) and
++ os.readlink(destpath) == linkpath):
++ continue
++ movepath = destpath + &quot;.repsys-moved&quot;
++ if os.path.exists(movepath):
++ raise Error, &quot;cannot create symlink, %s already &quot;\
++ &quot;exists (%s too)&quot; % (destpath, movepath)
++ tomove.append((destpath, movepath))
++ todo.append((destpath, linkpath))
++ for destpath, movepath in tomove:
++ os.rename(destpath, movepath)
++ for destpath, linkpath in todo:
++ os.symlink(linkpath, destpath)
++
++def download(targetdir, pkgdirurl=None, export=False, show=True,
++ revision=None, symlinks=True, check=False):
++ assert not export or (export and pkgdirurl)
++ svn = SVN()
++ sourcespath = os.path.join(targetdir, &quot;SOURCES&quot;)
++ binpath = os.path.join(targetdir, BINARIES_CHECKOUT_NAME)
++ if pkgdirurl:
++ topurl = translate_url(pkgdirurl)
++ else:
++ topurl = translate_topdir(targetdir)
++ binrev = None
++ if revision:
++ if pkgdirurl:
++ binrev = mapped_revision(pkgdirurl, revision)
++ else:
++ binrev = mapped_revision(targetdir, revision, wc=True)
++ binurl = mirror._joinurl(topurl, BINARIES_DIR_NAME)
++ if export:
++ svn.export(binurl, binpath, rev=binrev, show=show)
++ else:
++ svn.checkout(binurl, binpath, rev=binrev, show=show)
++ if symlinks:
++ make_symlinks(binpath, sourcespath)
++ if check:
++ check_sources(targetdir)
++
++def import_binaries(topdir, pkgname):
++ &quot;&quot;&quot;Import all binaries from a given package checkout
++
++ (with pending svn adds)
++
++ @topdir: the path to the svn checkout
++ &quot;&quot;&quot;
++ svn = SVN()
++ topurl = translate_topdir(topdir)
++ sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
++ bintopdir = tempfile.mktemp(&quot;repsys&quot;)
++ try:
++ svn.checkout(topurl, bintopdir)
++ checkout = True
++ except Error:
++ bintopdir = tempfile.mkdtemp(&quot;repsys&quot;)
++ checkout = False
++ try:
++ bindir = os.path.join(bintopdir, BINARIES_DIR_NAME)
++ if not os.path.exists(bindir):
++ if checkout:
++ svn.mkdir(bindir)
++ else:
++ os.mkdir(bindir)
++ binaries = find_binaries([sourcesdir])
++ update = update_sources_threaded(topdir, added=binaries)
++ for path in binaries:
++ name = os.path.basename(path)
++ binpath = os.path.join(bindir, name)
++ os.rename(path, binpath)
++ try:
++ svn.remove(path)
++ except Error:
++ # file not tracked
++ svn.revert(path)
++ if checkout:
++ svn.add(binpath)
++ log = &quot;imported binaries for %s&quot; % pkgname
++ if checkout:
++ rev = svn.commit(bindir, log=log)
++ else:
++ rev = svn.import_(bintopdir, topurl, log=log)
++ svn.propset(PROP_USES_BINREPO, &quot;yes&quot;, topdir)
++ svn.propset(PROP_BINREPO_REV, str(rev), topdir)
++ update.join()
++ svn.add(sources_path(topdir))
++ finally:
++ shutil.rmtree(bintopdir)
++
++def create_package_dirs(bintopdir):
++ svn = SVN()
++ binurl = mirror._joinurl(bintopdir, BINARIES_DIR_NAME)
++ silent = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
++ message = &quot;%s: created binrepo package structure&quot; % silent
++ svn.mkdir(binurl, log=message, parents=True)
++
++def parse_sources(path):
++ entries = {}
++ f = open(path)
++ for rawline in f:
++ line = rawline.strip()
++ try:
++ sum, name = line.split(None, 1)
++ except ValueError:
++ # failed to unpack, line format error
++ raise Error, &quot;invalid line in sources file: %s&quot; % rawline
++ entries[name] = sum
++ return entries
++
++def check_hash(path, sum):
++ newsum = file_hash(path)
++ if newsum != sum:
++ raise ChecksumError, &quot;different checksums for %s: expected %s, &quot;\
++ &quot;but %s was found&quot; % (path, sum, newsum)
++
++def check_sources(topdir):
++ spath = sources_path(topdir)
++ if not os.path.exists(spath):
++ raise Error, &quot;'%s' was not found&quot; % spath
++ entries = parse_sources(spath)
++ for name, sum in entries.iteritems():
++ fpath = os.path.join(topdir, &quot;SOURCES&quot;, name)
++ check_hash(fpath, sum)
++
++def file_hash(path):
++ sum = hashlib.sha1()
++ f = open(path)
++ while True:
++ block = f.read(4096)
++ if not block:
++ break
++ sum.update(block)
++ f.close()
++ return sum.hexdigest()
++
++def sources_path(topdir):
++ path = os.path.join(topdir, &quot;SOURCES&quot;, SOURCES_FILE)
++ return path
++
++def update_sources(topdir, added=[], removed=[]):
++ path = sources_path(topdir)
++ entries = {}
++ if os.path.isfile(path):
++ entries = parse_sources(path)
++ f = open(path, &quot;w&quot;) # open before calculating hashes
++ for name in removed:
++ entries.pop(removed)
++ for added_path in added:
++ name = os.path.basename(added_path)
++ entries[name] = file_hash(added_path)
++ for name in sorted(entries):
++ f.write(&quot;%s %s\n&quot; % (entries[name], name))
++ f.close()
++
++def update_sources_threaded(*args, **kwargs):
++ t = threading.Thread(target=update_sources, args=args, kwargs=kwargs)
++ t.start()
++ return t
++
++def upload(path, message=None):
++ from RepSys.rpmutil import getpkgtopdir
++ svn = SVN()
++ if not os.path.exists(path):
++ raise Error, &quot;not found: %s&quot; % path
++ # XXX check if the path is under SOURCES/
++ paths = find_binaries([path])
++ if not paths:
++ raise Error, &quot;'%s' does not seem to have any tarballs&quot; % path
++ topdir = getpkgtopdir()
++ bintopdir = translate_topdir(topdir)
++ binurl = mirror._joinurl(bintopdir, BINARIES_DIR_NAME)
++ sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
++ bindir = os.path.join(topdir, BINARIES_CHECKOUT_NAME)
++ silent = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
++ if not os.path.exists(bindir):
++ try:
++ download(topdir, show=False)
++ except Error:
++ # possibly the package does not exist
++ # (TODO check whether it is really a 'path not found' error)
++ pass
++ if not os.path.exists(bindir):
++ create_package_dirs(bintopdir)
++ svn.propset(PROP_USES_BINREPO, &quot;yes&quot;, topdir)
++ svn.commit(topdir, log=&quot;%s: created binrepo structure&quot; % silent)
++ download(topdir, show=False)
++ for path in paths:
++ if svn.info2(path):
++ sys.stderr.write(&quot;'%s' is already tracked by svn, ignoring\n&quot; %
++ path)
++ continue
++ name = os.path.basename(path)
++ binpath = os.path.join(bindir, name)
++ os.rename(path, binpath)
++ svn.add(binpath)
++ if not message:
++ message = &quot;%s: new binary files %s&quot; % (silent, &quot; &quot;.join(paths))
++ make_symlinks(bindir, sourcesdir)
++ update = update_sources_threaded(topdir, added=paths)
++ rev = svn.commit(binpath, log=message)
++ svn.propset(PROP_BINREPO_REV, str(rev), topdir)
++ sources = sources_path(topdir)
++ svn.add(sources)
++ update.join()
++ svn.commit(topdir + &quot; &quot; + sources, log=message, nonrecursive=True)
++
++def mapped_revision(target, revision, wc=False):
++ &quot;&quot;&quot;Maps a txtrepo revision to a binrepo datespec
++
++ This datespec can is intended to be used by svn .. -r DATE.
++
++ @target: a working copy path or a URL
++ @revision: if target is a URL, the revision number used when fetching
++ svn info
++ @wc: if True indicates that 'target' must be interpreted as a
++ the path of a svn working copy, otherwise it is handled as a URL
++ &quot;&quot;&quot;
++ svn = SVN()
++ binrev = None
++ if wc:
++ spath = sources_path(target)
++ if os.path.exists(spath):
++ infolines = svn.info(spath, xml=True)
++ if infolines:
++ rawinfo = &quot;&quot;.join(infolines) # arg!
++ found = re.search(&quot;&lt;date&gt;(.*?)&lt;/date&gt;&quot;, rawinfo).groups()
++ date = found[0]
++ else:
++ raise Error, &quot;bogus 'svn info' for '%s'&quot; % spath
++ else:
++ raise Error, &quot;'%s' was not found&quot; % spath
++ else:
++ url = mirror._joinurl(target, sources_path(&quot;&quot;))
++ date = svn.propget(&quot;svn:date&quot;, url, rev=revision, revprop=True)
++ if not date:
++ raise Error, &quot;no valid date available for '%s'&quot; % url
++ binrev = &quot;{%s}&quot; % date
++ return binrev
++
++def markrelease(sourceurl, releasesurl, version, release, revision):
++ svn = SVN()
++ binrev = mapped_revision(sourceurl, revision)
++ binsource = translate_url(sourceurl)
++ binreleases = translate_url(releasesurl)
++ versiondir = mirror._joinurl(binreleases, version)
++ dest = mirror._joinurl(versiondir, release)
++ svn.mkdir(binreleases, noerror=1, log=&quot;created directory for releases&quot;)
++ svn.mkdir(versiondir, noerror=1, log=&quot;created directory for version %s&quot; % version)
++ svn.copy(binsource, dest, rev=binrev,
++ log=&quot;%%markrelease ver=%s rel=%s rev=%s binrev=%s&quot; % (version, release,
++ revision, binrev))
+
+Added: build_system/repsys/trunk/RepSys/cgi/__init__.py
+===================================================================
+Added: build_system/repsys/trunk/RepSys/cgi/soapserver.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/cgi/soapserver.py (rev 0)
++++ build_system/repsys/trunk/RepSys/cgi/soapserver.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,93 @@
++#!/usr/bin/python
++from RepSys import Error, config
++from RepSys.rpmutil import get_srpm
++from RepSys.cgiutil import CgiError, get_targets
++import sys
++import os
++
++try:
++ import NINZ.dispatch
++except ImportError:
++ NINZ = None
++
++class SoapIface:
++ def author_email(self, author):
++ return config.get(&quot;users&quot;, author)
++
++ def submit_package(self, packageurl, packagerev, targetname):
++ username = os.environ.get(&quot;REMOTE_USER&quot;)
++ packager = config.get(&quot;users&quot;, username)
++ if not packager:
++ raise CgiError, &quot;your email was not found&quot;
++ elif not packagerev:
++ raise CgiError, &quot;no revision provided&quot;
++ elif not targetname:
++ raise CgiError, &quot;no target provided&quot;
++ else:
++ targetname = targetname.lower()
++ for target in get_targets():
++ if target.name.lower() == targetname:
++ break
++ else:
++ raise CgiError, &quot;target not found&quot;
++ try:
++ tmp = int(packagerev)
++ except ValueError:
++ raise CgiError, &quot;invalid revision provided&quot;
++ for allowed in target.allowed:
++ if packageurl.startswith(allowed):
++ break
++ else:
++ raise CgiError, &quot;%s is not allowed for this target&quot; \
++ % packageurl
++ get_srpm(packageurl,
++ revision=packagerev,
++ targetdirs=target.target,
++ packager=packager,
++ revname=1,
++ svnlog=1,
++ scripts=target.scripts)
++ return 1
++
++ def submit_targets(self):
++ return [x.name for x in get_targets()]
++
++TEMPLATE = &quot;&quot;&quot;\
++Content-type: text/html
++
++&lt;html&gt;
++&lt;head&gt;
++&lt;title&gt;Repository system SOAP server&lt;/title&gt;
++&lt;/head&gt;
++&lt;body bgcolor=&quot;white&quot;&gt;
++&lt;br&gt;
++&lt;hr&gt;
++&lt;center&gt;
++&lt;b&gt;%(message)s&lt;/b&gt;
++&lt;/center&gt;
++&lt;hr&gt;
++&lt;/body&gt;
++&lt;/html&gt;
++&quot;&quot;&quot;
++
++def show(msg=&quot;&quot;, error=0):
++ if error:
++ msg = '&lt;font color=&quot;red&quot;&gt;%s&lt;/font&gt;' % msg
++ print TEMPLATE % {&quot;message&quot;:msg}
++
++def main():
++ if not os.environ.has_key('REQUEST_METHOD'):
++ sys.stderr.write(&quot;error: this program is meant to be used as a cgi\n&quot;)
++ sys.exit(1)
++ if not NINZ:
++ show(&quot;NINZ is not properly installed in this system&quot;, error=1)
++ sys.exit(1)
++ username = os.environ.get(&quot;REMOTE_USER&quot;)
++ method = os.environ.get(&quot;REQUEST_METHOD&quot;)
++ if not username or method != &quot;POST&quot;:
++ show(&quot;This is a SOAP interface!&quot;, error=1)
++ sys.exit(1)
++
++ NINZ.dispatch.AsCGI(modules=(SoapIface(),))
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/cgi/submit.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/cgi/submit.py (rev 0)
++++ build_system/repsys/trunk/RepSys/cgi/submit.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,119 @@
++#!/usr/bin/python
++from RepSys import Error, config
++from RepSys.rpmutil import get_srpm
++from RepSys.cgiutil import CgiError, get_targets
++import cgi
++import sys
++import os
++
++TEMPLATE = &quot;&quot;&quot;\
++&lt;html&gt;
++&lt;head&gt;
++&lt;title&gt;Repository package submission system&lt;/title&gt;
++&lt;/head&gt;
++&lt;body bgcolor=&quot;white&quot;&gt;
++&lt;table cellspacing=0 cellpadding=0 border=0 width=&quot;100%%&quot;&gt;
++ &lt;tr bgcolor=&quot;#020264&quot;&gt;&lt;td align=&quot;left&quot; valign=&quot;middle&quot;&gt;&lt;img src=&quot;<A HREF="http://qa.mandriva.com/mandriva.png">http://qa.mandriva.com/mandriva.png</A>&quot; hspace=0 border=0 alt=&quot;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
++&lt;/table&gt;
++&lt;br&gt;
++&lt;hr&gt;
++&lt;center&gt;
++&lt;b&gt;%(message)s&lt;/b&gt;
++&lt;br&gt;&lt;br&gt;
++&lt;form method=&quot;POST&quot; action=&quot;&quot;&gt;
++&lt;table&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;
++ Package URL:&lt;br&gt;
++ &lt;input name=&quot;packageurl&quot; size=&quot;60&quot; value=&quot;svn+<A HREF="ssh://cvs.mandriva.com/svn/mdv/cooker/">ssh://cvs.mandriva.com/svn/mdv/cooker/</A>&quot;&gt;&lt;br&gt;
++ &lt;small&gt;Ex. svn+<A HREF="ssh://cvs.mandriva.com/svn/mdv/cooker/pkgname&lt;/small">ssh://cvs.mandriva.com/svn/mdv/cooker/pkgname&lt;/small</A>&gt;&lt;br&gt;
++ &lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;
++ Revision:&lt;br&gt;
++ &lt;input name=&quot;packagerev&quot; size=&quot;10&quot; value=&quot;&quot;&gt;&lt;br&gt;
++ &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
++ &lt;br&gt;
++ Package target:&lt;br&gt;
++ &lt;select name=&quot;target&quot; size=5&gt;
++ %(targetoptions)s
++ &lt;/select&gt;&lt;br&gt;
++ &lt;br&gt;
++ &lt;input type=&quot;submit&quot; value=&quot;Submit package&quot;&gt;
++&lt;/form&gt;
++&lt;/center&gt;
++&lt;hr/&gt;
++&lt;/body&gt;
++&lt;/html&gt;
++&quot;&quot;&quot;
++
++def get_targetoptions():
++ s = &quot;&quot;
++ selected = &quot; selected&quot;
++ for target in get_targets():
++ s += '&lt;option value=&quot;%s&quot;%s&gt;%s&lt;/option&gt;' \
++ % (target.name, selected, target.name)
++ selected = &quot;&quot;
++ return s
++
++def show(msg=&quot;&quot;, error=0):
++ if error:
++ msg = '&lt;font color=&quot;red&quot;&gt;%s&lt;/font&gt;' % msg
++ print TEMPLATE % {&quot;message&quot;:msg, &quot;targetoptions&quot;:get_targetoptions()}
++
++def submit_packages(packager):
++ form = cgi.FieldStorage()
++ packageurl = form.getfirst(&quot;packageurl&quot;, &quot;&quot;).strip()
++ packagerev = form.getfirst(&quot;packagerev&quot;, &quot;&quot;).strip()
++ if not packageurl:
++ show()
++ elif not packagerev:
++ raise CgiError, &quot;No revision provided!&quot;
++ else:
++ targetname = form.getfirst(&quot;target&quot;)
++ if not targetname:
++ raise CgiError, &quot;No target selected!&quot;
++ for target in get_targets():
++ if target.name == targetname:
++ break
++ else:
++ raise CgiError, &quot;Target not found!&quot;
++ try:
++ tmp = int(packagerev)
++ except ValueError:
++ raise CgiError, &quot;Invalid revision provided!&quot;
++ for allowed in target.allowed:
++ if packageurl.startswith(allowed):
++ break
++ else:
++ raise CgiError, &quot;%s is not allowed for this target!&quot; % packageurl
++ get_srpm(packageurl,
++ revision=packagerev,
++ targetdirs=target.target,
++ packager=packager,
++ revname=1,
++ svnlog=1,
++ scripts=target.scripts)
++ show(&quot;Package submitted!&quot;)
++
++def main():
++ if not os.environ.has_key('REQUEST_METHOD'):
++ sys.stderr.write(&quot;error: this program is meant to be used as a cgi\n&quot;)
++ sys.exit(1)
++ print &quot;Content-type: text/html\n\n&quot;
++ try:
++ username = os.environ.get(&quot;REMOTE_USER&quot;)
++ method = os.environ.get(&quot;REQUEST_METHOD&quot;)
++ if not username or method != &quot;POST&quot;:
++ show()
++ else:
++ useremail = config.get(&quot;users&quot;, username)
++ if not useremail:
++ raise CgiError, \
++ &quot;Your email was not found. Contact the administrator!&quot;
++ submit_packages(useremail)
++ except CgiError, e:
++ show(str(e), error=1)
++ except Error, e:
++ error = str(e)
++ show(error[0].upper()+error[1:], error=1)
++ except:
++ cgi.print_exception()
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/cgi/xmlrpcserver.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/cgi/xmlrpcserver.py (rev 0)
++++ build_system/repsys/trunk/RepSys/cgi/xmlrpcserver.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,111 @@
++#!/usr/bin/python
++from RepSys import Error, config
++from RepSys.rpmutil import get_srpm
++from RepSys.cgiutil import CgiError, get_targets
++import sys
++import os
++
++import xmlrpclib, cgi
++
++class XmlRpcIface:
++ def author_email(self, author):
++ return config.get(&quot;users&quot;, author)
++
++ def submit_package(self, packageurl, packagerev, targetname):
++ username = os.environ.get(&quot;REMOTE_USER&quot;)
++ packager = config.get(&quot;users&quot;, username)
++ if not packager:
++ raise CgiError, &quot;your email was not found&quot;
++ elif not packagerev:
++ raise CgiError, &quot;no revision provided&quot;
++ elif not targetname:
++ raise CgiError, &quot;no target provided&quot;
++ else:
++ targetname = targetname.lower()
++ for target in get_targets():
++ if target.name.lower() == targetname:
++ break
++ else:
++ raise CgiError, &quot;target not found&quot;
++ try:
++ tmp = int(packagerev)
++ except ValueError:
++ raise CgiError, &quot;invalid revision provided&quot;
++ for allowed in target.allowed:
++ if packageurl.startswith(allowed):
++ break
++ else:
++ raise CgiError, &quot;%s is not allowed for this target&quot; \
++ % packageurl
++ get_srpm(packageurl,
++ revision=packagerev,
++ targetdirs=target.target,
++ packager=packager,
++ revname=1,
++ svnlog=1,
++ scripts=target.scripts)
++ return 1
++
++ def submit_targets(self):
++ return [x.name for x in get_targets()]
++
++TEMPLATE = &quot;&quot;&quot;\
++Content-type: text/html
++
++&lt;html&gt;
++&lt;head&gt;
++&lt;title&gt;Repository system SOAP server&lt;/title&gt;
++&lt;/head&gt;
++&lt;body bgcolor=&quot;white&quot;&gt;
++&lt;br&gt;
++&lt;hr&gt;
++&lt;center&gt;
++&lt;b&gt;%(message)s&lt;/b&gt;
++&lt;/center&gt;
++&lt;hr&gt;
++&lt;/body&gt;
++&lt;/html&gt;
++&quot;&quot;&quot;
++
++def show(msg=&quot;&quot;, error=0):
++ if error:
++ msg = '&lt;font color=&quot;red&quot;&gt;%s&lt;/font&gt;' % msg
++ print TEMPLATE % {&quot;message&quot;:msg}
++
++def main():
++ if not os.environ.has_key('REQUEST_METHOD'):
++ sys.stderr.write(&quot;error: this program is meant to be used as a cgi\n&quot;)
++ sys.exit(1)
++ username = os.environ.get(&quot;REMOTE_USER&quot;)
++ method = os.environ.get(&quot;REQUEST_METHOD&quot;)
++ if not username or method != &quot;POST&quot;:
++ show(&quot;This is a XMLRPC interface!&quot;, error=1)
++ sys.exit(1)
++
++ iface = XmlRpcIface()
++
++ response = &quot;&quot;
++ try:
++ form = cgi.FieldStorage()
++ parms, method = xmlrpclib.loads(form.value)
++ meth = getattr(iface, method)
++ response = (meth(*parms),)
++ except CgiError, e:
++ msg = str(e)
++ try:
++ msg = msg.decode(&quot;iso-8859-1&quot;)
++ except UnicodeError:
++ pass
++ response = xmlrpclib.Fault(1, msg)
++ except Exception, e:
++ msg = str(e)
++ try:
++ msg = msg.decode(&quot;iso-8859-1&quot;)
++ except UnicodeError:
++ pass
++ response = xmlrpclib.Fault(1, msg)
++
++ sys.stdout.write(&quot;Content-type: text/xml\n\n&quot;)
++ sys.stdout.write(xmlrpclib.dumps(response, methodresponse=1))
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/cgiutil.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/cgiutil.py (rev 0)
++++ build_system/repsys/trunk/RepSys/cgiutil.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,53 @@
++#!/usr/bin/python
++from RepSys import Error, config
++from RepSys.svn import SVN
++from RepSys.ConfigParser import NoSectionError
++import time
++import re
++
++class CgiError(Error): pass
++
++class SubmitTarget:
++ def __init__(self):
++ self.name = &quot;&quot;
++ self.target = &quot;&quot;
++ self.macros = []
++ self.allowed = []
++ self.scripts = []
++
++TARGETS = []
++
++def parse_macrosref(refs, config):
++ macros = []
++ for name in refs:
++ secname = &quot;macros %s&quot; % name
++ try:
++ macros.extend(config.walk(secname, raw=True))
++ except NoSectionError:
++ raise Error, &quot;missing macros section &quot; \
++ &quot;%r in configuration&quot; % secname
++ return macros
++
++def get_targets():
++ global TARGETS
++ if not TARGETS:
++ target = SubmitTarget()
++ targetoptions = {}
++ submit_re = re.compile(&quot;^submit\s+(.+)$&quot;)
++ for section in config.sections():
++ m = submit_re.match(section)
++ if m:
++ target = SubmitTarget()
++ target.name = m.group(1)
++ for option, value in config.walk(section):
++ if option in (&quot;target&quot;, &quot;allowed&quot;, &quot;scripts&quot;):
++ setattr(target, option, value.split())
++ elif option == &quot;rpm-macros&quot;:
++ refs = value.split()
++ target.macros = parse_macrosref(refs, config)
++ else:
++ raise Error, &quot;unknown [%s] option %s&quot; % (section, option)
++ TARGETS.append(target)
++ return TARGETS
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/command.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/command.py (rev 0)
++++ build_system/repsys/trunk/RepSys/command.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,61 @@
++#!/usr/bin/python
++from RepSys import SilentError, Error, config
++import sys, os
++import urlparse
++import optparse
++
++__all__ = [&quot;OptionParser&quot;, &quot;do_command&quot;, &quot;default_parent&quot;]
++
++class CapitalizeHelpFormatter(optparse.IndentedHelpFormatter):
++
++ def format_usage(self, usage):
++ return optparse.IndentedHelpFormatter \
++ .format_usage(self, usage).capitalize()
++
++ def format_heading(self, heading):
++ return optparse.IndentedHelpFormatter \
++ .format_heading(self, heading).capitalize()
++
++class OptionParser(optparse.OptionParser):
++
++ def __init__(self, usage=None, help=None, **kwargs):
++ if not &quot;formatter&quot; in kwargs:
++ kwargs[&quot;formatter&quot;] = CapitalizeHelpFormatter()
++ optparse.OptionParser.__init__(self, usage, **kwargs)
++ self._overload_help = help
++
++ def format_help(self, formatter=None):
++ if self._overload_help:
++ return self._overload_help
++ else:
++ return optparse.OptionParser.format_help(self, formatter)
++
++ def error(self, msg):
++ raise Error, msg
++
++def do_command(parse_options_func, main_func):
++ try:
++ opt = parse_options_func()
++ main_func(**opt.__dict__)
++ except SilentError:
++ sys.exit(1)
++ except Error, e:
++ sys.stderr.write(&quot;error: %s\n&quot; % str(e))
++ sys.exit(1)
++ except KeyboardInterrupt:
++ sys.stderr.write(&quot;interrupted\n&quot;)
++ sys.stderr.flush()
++ sys.exit(1)
++
++def default_parent(url):
++ if url.find(&quot;://&quot;) == -1:
++ default_parent = config.get(&quot;global&quot;, &quot;default_parent&quot;)
++ if not default_parent:
++ raise Error, &quot;received a relative url, &quot; \
++ &quot;but default_parent was not setup&quot;
++ parsed = list(urlparse.urlparse(default_parent))
++ parsed[2] = os.path.normpath(parsed[2] + &quot;/&quot; + url)
++ url = urlparse.urlunparse(parsed)
++ return url
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/__init__.py
+===================================================================
+Added: build_system/repsys/trunk/RepSys/commands/authoremail.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/authoremail.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/authoremail.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,37 @@
++#!/usr/bin/python
++from RepSys import Error, config
++from RepSys.command import *
++import sys
++import getopt
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys authoremail [OPTIONS] AUTHOR
++
++Shows the e-mail of an SVN author. It is just a simple interface to access
++the [authors] section of repsys.conf.
++
++Options:
++ -h Show this message
++
++Examples:
++ repsys authoremail john
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ opts, args = parser.parse_args()
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++ opts.author = args[0]
++ return opts
++
++def print_author_email(author):
++ email = config.get(&quot;users&quot;, author)
++ if not email:
++ raise Error, &quot;author not found&quot;
++ print email
++
++def main():
++ do_command(parse_options, print_author_email)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/changed.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/changed.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/changed.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,41 @@
++#!/usr/bin/python
++from RepSys import Error, disable_mirror
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.rpmutil import check_changed
++import getopt
++import sys
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys changed [OPTIONS] URL
++
++Shows if there are pending changes since the last package release.
++
++Options:
++ -a Check all packages in given URL
++ -s Show differences
++ -M Do not use the mirror (use the main repository)
++ -h Show this message
++
++Examples:
++ repsys changed <A HREF="http://repos/svn/cnc/snapshot/foo">http://repos/svn/cnc/snapshot/foo</A>
++ repsys changed -a <A HREF="http://repos/svn/cnc/snapshot">http://repos/svn/cnc/snapshot</A>
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-a&quot;, dest=&quot;all&quot;, action=&quot;store_true&quot;)
++ parser.add_option(&quot;-s&quot;, dest=&quot;show&quot;, action=&quot;store_true&quot;)
++ parser.add_option(&quot;-M&quot;, &quot;--no-mirror&quot;, action=&quot;callback&quot;,
++ callback=disable_mirror)
++ opts, args = parser.parse_args()
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = package_url(args[0])
++ opts.verbose = 1 # Unconfigurable
++ return opts
++
++def main():
++ do_command(parse_options, check_changed)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/ci.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/ci.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/ci.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,35 @@
++#!/usr/bin/python
++from RepSys.command import *
++from RepSys.rpmutil import commit
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys ci [TARGET]
++
++Will commit recent modifications in the package.
++
++The difference between an ordinary &quot;svn ci&quot; and &quot;repsys ci&quot; is that it
++relocates the working copy to the default repository in case the option
++&quot;mirror&quot; is set in repsys.conf.
++
++Options:
++ -h Show this message
++ -m MSG Use the MSG as the log message
++ -F FILE Read log message from FILE
++
++Examples:
++ repsys ci
++ repsys ci SPECS/package.spec SPECS/package-patch.patch
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-m&quot;, dest=&quot;message&quot;, default=None)
++ parser.add_option(&quot;-F&quot;, dest=&quot;logfile&quot;, type=&quot;string&quot;,
++ default=None)
++ opts, args = parser.parse_args()
++ if len(args):
++ opts.target = args[0]
++ return opts
++
++def main():
++ do_command(parse_options, commit)
+
+Added: build_system/repsys/trunk/RepSys/commands/co.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/co.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/co.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,67 @@
++#!/usr/bin/python
++from RepSys import Error, disable_mirror
++from RepSys.command import *
++from RepSys.rpmutil import checkout
++import getopt
++import sys
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys co [OPTIONS] URL [LOCALPATH]
++
++Checkout the package source from the Mandriva repository.
++
++If the 'mirror' option is enabled, the package is obtained from the mirror
++repository.
++
++You can specify the distro branch to checkout from by using distro/pkgname.
++
++Options:
++ -d The distribution branch to checkout from
++ -b The package branch
++ -r REV Revision to checkout
++ -S Do not download sources from the binaries repository
++ -L Do not make symlinks of the binaries downloaded in SOURCES/
++ -s Only checkout the SPECS/ directory
++ -M Do not use the mirror (use the main repository)
++ --check Check integrity of files fetched from the binary repository
++ -h Show this message
++
++Examples:
++ repsys co pkgname
++ repsys co -d 2009.0 pkgname
++ repsys co 2009.0/pkgame
++ repsys co <A HREF="http://repos/svn/cnc/snapshot/foo">http://repos/svn/cnc/snapshot/foo</A>
++ repsys co <A HREF="http://repos/svn/cnc/snapshot/foo">http://repos/svn/cnc/snapshot/foo</A> foo-pkg
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-r&quot;, dest=&quot;revision&quot;)
++ parser.add_option(&quot;-S&quot;, dest=&quot;use_binrepo&quot;, default=True,
++ action=&quot;store_false&quot;)
++ parser.add_option(&quot;--check&quot;, dest=&quot;binrepo_check&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-L&quot;, dest=&quot;binrepo_link&quot;, default=True,
++ action=&quot;store_false&quot;)
++ parser.add_option(&quot;--distribution&quot;, &quot;-d&quot;, dest=&quot;distro&quot;, default=None)
++ parser.add_option(&quot;--branch&quot;, &quot;-b&quot;, dest=&quot;branch&quot;, default=None)
++ parser.add_option(&quot;-s&quot;, &quot;--spec&quot;, dest=&quot;spec&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-M&quot;, &quot;--no-mirror&quot;, action=&quot;callback&quot;,
++ callback=disable_mirror)
++ opts, args = parser.parse_args()
++ if len(args) not in (1, 2):
++ raise Error, &quot;invalid arguments&quot;
++ # here we don't use package_url in order to notify the user we are
++ # using the mirror
++ opts.pkgdirurl = args[0]
++ if len(args) == 2:
++ opts.path = args[1]
++ else:
++ opts.path = None
++ return opts
++
++def main():
++ do_command(parse_options, checkout)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/create.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/create.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/create.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,34 @@
++#!/usr/bin/python
++from RepSys import Error
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.rpmutil import create_package
++import getopt
++import sys
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys create [OPTIONS] URL
++
++Creates the minimal structure of a package in the repository.
++
++Options:
++ -h Show this message
++
++Examples:
++ repsys create newpkg
++ repsys create svn+<A HREF="ssh://svn.mandriva.com/svn/packages/cooker/newpkg">ssh://svn.mandriva.com/svn/packages/cooker/newpkg</A>
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ opts, args = parser.parse_args()
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = package_url(args[0], mirrored=False)
++ opts.verbose = 1 # Unconfigurable
++ return opts
++
++def main():
++ do_command(parse_options, create_package)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/del.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/del.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/del.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,30 @@
++from RepSys import Error
++from RepSys.command import *
++from RepSys.rpmutil import binrepo_delete
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys del [OPTIONS] [PATH]
++
++Remove a given file from the binary sources repository.
++
++Changes in the sources file will be left uncommited.
++
++Options:
++ -c automatically commit the 'sources' file
++ -h help
++
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-c&quot;, dest=&quot;commit&quot;, default=False,
++ action=&quot;store_true&quot;)
++ opts, args = parser.parse_args()
++ if len(args):
++ opts.paths = args
++ else:
++ raise Error, &quot;you need to provide a path&quot;
++ return opts
++
++def main():
++ do_command(parse_options, binrepo_delete)
+
+Added: build_system/repsys/trunk/RepSys/commands/editlog.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/editlog.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/editlog.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,39 @@
++#!/usr/bin/python
++from RepSys import Error
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.svn import SVN
++import re
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys editlog [OPTIONS] [URL] REVISION
++
++Options:
++ -h Show this message
++
++Examples:
++ repsys editlog 14800
++ repsys editlog <A HREF="https://repos/svn/cnc/snapshot">https://repos/svn/cnc/snapshot</A> 14800
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ opts, args = parser.parse_args()
++ if len(args) == 2:
++ pkgdirurl, revision = args
++ elif len(args) == 1:
++ pkgdirurl, revision = &quot;&quot;, args[0]
++ else:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = package_url(pkgdirurl, mirrored=False)
++ opts.revision = re.compile(r&quot;.*?(\d+).*&quot;).sub(r&quot;\1&quot;, revision)
++ return opts
++
++def editlog(pkgdirurl, revision):
++ svn = SVN()
++ svn.propedit(&quot;svn:log&quot;, pkgdirurl, rev=revision)
++
++def main():
++ do_command(parse_options, editlog)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/getspec.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/getspec.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/getspec.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,38 @@
++#!/usr/bin/python
++from RepSys import Error, disable_mirror
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.rpmutil import get_spec
++import getopt
++import sys
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys getspec [OPTIONS] REPPKGURL
++
++Prints the .spec file of a given package.
++
++Options:
++ -t DIR Use DIR as target for spec file (default is &quot;.&quot;)
++ -M Do not use the mirror (use the main repository)
++ -h Show this message
++
++Examples:
++ repsys getspec pkgname
++ repsys getspec svn+<A HREF="ssh://svn.mandriva.com/svn/packages/cooker/pkgname">ssh://svn.mandriva.com/svn/packages/cooker/pkgname</A>
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-t&quot;, dest=&quot;targetdir&quot;, default=&quot;.&quot;)
++ parser.add_option(&quot;-M&quot;, &quot;--no-mirror&quot;, action=&quot;callback&quot;,
++ callback=disable_mirror)
++ opts, args = parser.parse_args()
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = package_url(args[0])
++ return opts
++
++def main():
++ do_command(parse_options, get_spec)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/getsrpm.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/getsrpm.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/getsrpm.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,100 @@
++#!/usr/bin/python
++#
++# This program will extract given version/revision of the named package
++# from the Conectiva Linux repository system.
++#
++from RepSys import Error, config, disable_mirror
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.rpmutil import get_srpm
++import tempfile
++import shutil
++import getopt
++import glob
++import sys
++import os
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys getsrpm [OPTIONS] REPPKGURL
++
++Generates the source RPM (.srpm) file of a given package.
++
++Options:
++ -c Use files in current/ directory (default)
++ -p Use files in pristine/ directory
++ -v VER Use files from the version specified by VER (e.g. 2.2.1-2cl)
++ -r REV Use files from current directory, in revision REV (e.g. 1001)
++ -t DIR Put SRPM file in directory DIR when done (default is &quot;.&quot;)
++ -P USER Define the RPM packager inforamtion to USER
++ -s FILE Run script with &quot;FILE TOPDIR SPECFILE&quot; command
++ -n Rename the package to include the revision number
++ -l Use subversion log to build rpm %changelog
++ -T FILE Template to be used to generate the %changelog
++ -M Do not use the mirror (use the main repository)
++ -h Show this message
++ -S Do not download sources from the binary repository
++ --check Check integrity of files fetched from the binary repository
++ --strict Check if the given revision contains changes in REPPKGURL
++
++Examples:
++ repsys getsrpm python
++ repsys getsrpm -l python
++ repsys getsrpm <A HREF="http://foo.bar/svn/cnc/snapshot/python">http://foo.bar/svn/cnc/snapshot/python</A>
++ repsys getsrpm -p <A HREF="http://foo.bar/svn/cnc/releases/8cl/python">http://foo.bar/svn/cnc/releases/8cl/python</A>
++ repsys getsrpm -r 1001 <A HREF="file:///svn/cnc/snapshot/python">file:///svn/cnc/snapshot/python</A>
++&quot;&quot;&quot;
++
++def mode_callback(option, opt, val, parser, mode):
++ opts = parser.values
++ opts.mode = mode
++ if mode == &quot;version&quot;:
++ try:
++ opts.version, opts.release = val.split(&quot;-&quot;, 1)
++ except ValueError:
++ raise Error, &quot;wrong version, use something like 2.2-1mdk&quot;
++ elif mode == &quot;revision&quot;:
++ opts.revision = val
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.defaults[&quot;mode&quot;] = &quot;current&quot;
++ parser.defaults[&quot;version&quot;] = None
++ parser.defaults[&quot;release&quot;] = None
++ parser.defaults[&quot;revision&quot;] = None
++ parser.defaults[&quot;submit&quot;] = False
++ callback_options = dict(action=&quot;callback&quot;, callback=mode_callback,
++ type=&quot;string&quot;, dest=&quot;__ignore&quot;)
++ parser.add_option(&quot;-c&quot;, callback_kwargs={&quot;mode&quot;: &quot;current&quot;}, nargs=0,
++ **callback_options)
++ parser.add_option(&quot;-p&quot;, callback_kwargs={&quot;mode&quot;: &quot;pristine&quot;}, nargs=0,
++ **callback_options)
++ parser.add_option(&quot;-r&quot;, callback_kwargs={&quot;mode&quot;: &quot;revision&quot;}, nargs=1,
++ **callback_options)
++ parser.add_option(&quot;-v&quot;, callback_kwargs={&quot;mode&quot;: &quot;version&quot;}, nargs=1,
++ **callback_options)
++ parser.add_option(&quot;-t&quot;, dest=&quot;targetdirs&quot;, action=&quot;append&quot;, default=[])
++ parser.add_option(&quot;-s&quot;, dest=&quot;scripts&quot;, action=&quot;append&quot;, default=[])
++ parser.add_option(&quot;-P&quot;, dest=&quot;packager&quot;, default=&quot;&quot;)
++ parser.add_option(&quot;-n&quot;, dest=&quot;revname&quot;, action=&quot;store_true&quot;)
++ parser.add_option(&quot;-l&quot;, dest=&quot;svnlog&quot;, action=&quot;store_true&quot;)
++ parser.add_option(&quot;-T&quot;, dest=&quot;template&quot;, type=&quot;string&quot;, default=None)
++ parser.add_option(&quot;-S&quot;, dest=&quot;use_binrepo&quot;, default=True,
++ action=&quot;store_false&quot;)
++ parser.add_option(&quot;--check&quot;, dest=&quot;binrepo_check&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-M&quot;, &quot;--no-mirror&quot;, action=&quot;callback&quot;,
++ callback=disable_mirror)
++ parser.add_option(&quot;--strict&quot;, dest=&quot;strict&quot;, default=False,
++ action=&quot;store_true&quot;)
++ opts, args = parser.parse_args()
++ del opts.__ignore
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = package_url(args[0])
++ opts.verbose = 1
++ return opts
++
++def main():
++ do_command(parse_options, get_srpm)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/log.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/log.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/log.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,62 @@
++#!/usr/bin/python
++from RepSys import config, mirror, disable_mirror
++from RepSys.command import *
++from RepSys.layout import package_url, checkout_url
++from RepSys.rpmutil import sync
++from RepSys.util import execcmd
++import sys
++import os
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys log [OPTIONS] [PACKAGE]
++
++Shows the SVN log for a given package.
++
++Options:
++ -h Show this message
++ -v Show changed paths
++ -l LIMIT Limit of log entries to show
++ -r REV Show a specific revision
++ -M Do not use the mirror (use the main repository)
++
++Examples:
++ repsys log mutt
++ repsys log 2009.1/mutt
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-v&quot;, dest=&quot;verbose&quot;, action=&quot;store_true&quot;,
++ default=False)
++ parser.add_option(&quot;-l&quot;, &quot;--limit&quot;, dest=&quot;limit&quot;, type=&quot;int&quot;,
++ default=None)
++ parser.add_option(&quot;-r&quot;, dest=&quot;revision&quot;, type=&quot;string&quot;, default=None)
++ parser.add_option(&quot;-M&quot;, &quot;--no-mirror&quot;, action=&quot;callback&quot;,
++ callback=disable_mirror)
++ opts, args = parser.parse_args()
++ if len(args):
++ opts.pkgdirurl = package_url(args[0])
++ else:
++ parser.error(&quot;log requires a package name&quot;)
++ return opts
++
++def svn_log(pkgdirurl, verbose=False, limit=None, revision=None):
++ mirror.info(pkgdirurl)
++ url = checkout_url(pkgdirurl)
++ svncmd = config.get(&quot;global&quot;, &quot;svn-command&quot;, &quot;svn&quot;)
++ args = [svncmd, &quot;log&quot;, url]
++ if verbose:
++ args.append(&quot;-v&quot;)
++ if limit:
++ args.append(&quot;-l&quot;)
++ args.append(limit)
++ if revision:
++ args.append(&quot;-r&quot;)
++ args.append(revision)
++ if os.isatty(sys.stdin.fileno()):
++ args.append(&quot;| less&quot;)
++ rawcmd = &quot; &quot;.join(args)
++ execcmd(rawcmd, show=True)
++
++def main():
++ do_command(parse_options, svn_log)
+
+Added: build_system/repsys/trunk/RepSys/commands/markrelease.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/markrelease.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/markrelease.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,103 @@
++#!/usr/bin/python
++#
++# This program will append a release to the Conectiva Linux package
++# repository system. It's meant to be a startup system to include
++# pre-packaged SRPMS in the repository, thus, you should not commit
++# packages over an ongoing package structure (with changes in current/
++# directory and etc). Also, notice that packages must be included in
++# cronological order.
++#
++from RepSys import Error
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.simplerpm import SRPM
++from RepSys.rpmutil import mark_release
++from RepSys.util import get_auth
++import getopt
++import sys
++import os
++
++HELP = &quot;&quot;&quot;\
++*** WARNING --- You probably SHOULD NOT use this program! --- WARNING ***
++
++Usage: repsys markrelease [OPTIONS] REPPKGURL
++
++This subcommand creates a 'tag' for a given revision of a given package.
++
++The tag will be stored in the directory releases/ inside the package
++structure.
++
++Options:
++ -f FILE Try to extract information from given file
++ -r REV Revision which will be used to make the release copy tag
++ -v VER Version which will be used to make the release copy tag
++ -n Append package name to provided URL
++ -h Show this message
++
++Examples:
++ repsys markrelease -r 68 -v 1.0-1 <A HREF="file://svn/cnc/snapshot/foo">file://svn/cnc/snapshot/foo</A>
++ repsys markrelease -f @68:foo-1.0-1.src.rpm <A HREF="file://svn/cnc/snapshot/foo">file://svn/cnc/snapshot/foo</A>
++ repsys markrelease -r 68 -f foo-1.0.src.rpm <A HREF="file://svn/cnc/snapshot/foo">file://svn/cnc/snapshot/foo</A>
++&quot;&quot;&quot;
++
++def version_callback(option, opt, val, parser):
++ opts = parser.values
++ try:
++ opts.version, opts.release = val.split(&quot;-&quot;, 1)
++ except ValueError:
++ raise Error, &quot;wrong version, use something like 1:2.2-1mdk&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.defaults[&quot;version&quot;] = None
++ parser.defaults[&quot;release&quot;] = None
++ parser.add_option(&quot;-v&quot;, action=&quot;callback&quot;, callback=version_callback,
++ nargs=1, type=&quot;string&quot;, dest=&quot;__ignore&quot;)
++ parser.add_option(&quot;-r&quot;, dest=&quot;revision&quot;)
++ parser.add_option(&quot;-f&quot;, dest=&quot;filename&quot;)
++ parser.add_option(&quot;-n&quot;, dest=&quot;appendname&quot;, action=&quot;store_true&quot;)
++ opts, args = parser.parse_args()
++
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++
++ opts.pkgdirurl = package_url(args[0], mirrored=False)
++
++ filename = opts.filename
++ appendname = opts.appendname
++ del opts.filename, opts.appendname, opts.__ignore
++
++ if filename:
++ if not os.path.isfile(filename):
++ raise Error, &quot;file not found: &quot;+filename
++ if not opts.revision:
++ basename = os.path.basename(filename)
++ end = basename.find(&quot;:&quot;)
++ if basename[0] != &quot;@&quot; or end == -1:
++ raise Error, &quot;couldn't guess revision from filename&quot;
++ opts.revision = basename[1:end]
++ srpm = None
++ if not opts.version:
++ srpm = SRPM(filename)
++ if srpm.epoch:
++ opts.version = &quot;%s:%s&quot; % (srpm.epoch, srpm.version)
++ else:
++ opts.version = srpm.version
++ opts.release = srpm.release
++ if appendname:
++ if not srpm:
++ srpm = SRPM(filename)
++ opts.pkgdirurl = &quot;/&quot;.join([opts.pkgdirurl, srpm.name])
++ elif appendname:
++ raise Error, &quot;option -n requires option -f&quot;
++ elif not opts.revision:
++ raise Error, &quot;no revision provided&quot;
++ elif not opts.version:
++ raise Error, &quot;no version provided&quot;
++ #get_auth()
++ return opts
++
++def main():
++ do_command(parse_options, mark_release)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/patchspec.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/patchspec.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/patchspec.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,38 @@
++#!/usr/bin/python
++#
++# This program will try to patch a spec file from a given package url.
++#
++from RepSys import Error
++from RepSys.rpmutil import patch_spec
++from RepSys.command import *
++from RepSys.layout import package_url
++import getopt
++import sys
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys patchspec [OPTIONS] REPPKGURL PATCHFILE
++
++It will try to patch a spec file from a given package url.
++
++Options:
++ -l LOG Use LOG as log message
++ -h Show this message
++
++Examples:
++ repsys patchspec <A HREF="http://repos/svn/cnc/snapshot/foo">http://repos/svn/cnc/snapshot/foo</A>
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-l&quot;, dest=&quot;log&quot;, default=&quot;&quot;)
++ opts, args = parser.parse_args()
++ if len(args) != 2:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = package_url(args[0], mirrored=False)
++ opts.patchfile = args[1]
++ return opts
++
++def main():
++ do_command(parse_options, patch_spec)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/putsrpm.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/putsrpm.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/putsrpm.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,59 @@
++#!/usr/bin/python
++from RepSys import Error
++from RepSys.command import *
++from RepSys.layout import package_url
++from RepSys.rpmutil import put_srpm
++import getopt
++import sys, os
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys putsrpm [OPTIONS] SOURCERPMS
++
++Will import source RPMs into the SVN repository.
++
++If the package was already imported, it will add the new files and remove
++those not present in the source RPM.
++
++Options:
++ -m LOG Log message used when commiting changes
++ -t Create version-release tag on releases/
++ -b NAME The distribution branch to place it
++ -d URL The URL of base directory where packages will be placed
++ -c URL The URL of the base directory where the changelog will be
++ placed
++ -s Don't strip the changelog from the spec
++ (nor import it into misc/)
++ -n Don't try to rename the spec file
++ -h Show this message
++
++Examples:
++ repsys putsrpm pkg/SRPMS/pkg-2.0-1.src.rpm
++ repsys putsrpm -b 2009.1 foo-1.1-1.src.rpm
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-l&quot;, dest=&quot;logmsg&quot;, default=&quot;&quot;)
++ parser.add_option(&quot;-t&quot;, dest=&quot;markrelease&quot;, action=&quot;store_true&quot;,
++ default=False)
++ parser.add_option(&quot;-s&quot;, dest=&quot;striplog&quot;, action=&quot;store_false&quot;,
++ default=True)
++ parser.add_option(&quot;-b&quot;, dest=&quot;branch&quot;, type=&quot;string&quot;, default=None)
++ parser.add_option(&quot;-d&quot;, dest=&quot;baseurl&quot;, type=&quot;string&quot;, default=None)
++ parser.add_option(&quot;-c&quot;, dest=&quot;baseold&quot;, type=&quot;string&quot;, default=None)
++ parser.add_option(&quot;-n&quot;, dest=&quot;rename&quot;, action=&quot;store_false&quot;,
++ default=True)
++ opts, args = parser.parse_args()
++ opts.srpmfiles = args
++ return opts
++
++def put_srpm_cmd(srpmfiles, markrelease=False, striplog=True, branch=None,
++ baseurl=None, baseold=None, logmsg=None, rename=False):
++ for path in srpmfiles:
++ put_srpm(path, markrelease, striplog, branch, baseurl, baseold,
++ logmsg, rename)
++
++def main():
++ do_command(parse_options, put_srpm_cmd)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/rpmlog.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/rpmlog.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/rpmlog.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,68 @@
++#!/usr/bin/python
++#
++# This program will convert the output of &quot;svn log&quot; to be suitable
++# for usage in an rpm %changelog session.
++#
++from RepSys import Error, layout, disable_mirror
++from RepSys.command import *
++from RepSys.svn import SVN
++from RepSys.log import get_changelog, split_spec_changelog
++from cStringIO import StringIO
++import getopt
++import os
++import sys
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys rpmlog [OPTIONS] REPPKGDIRURL
++
++Prints the RPM changelog of a given package.
++
++Options:
++ -r REV Collect logs from given revision to revision 0
++ -n NUM Output only last NUM entries
++ -T FILE %changelog template file to be used
++ -o Append old package changelog
++ -p Append changelog found in .spec file
++ -s Sort changelog entries, even from the old log
++ -M Do not use the mirror (use the main repository)
++ -h Show this message
++
++Examples:
++ repsys rpmlog python
++ repsys rpmlog <A HREF="http://svn.mandriva.com/svn/packages/cooker/python">http://svn.mandriva.com/svn/packages/cooker/python</A>
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;-r&quot;, dest=&quot;revision&quot;)
++ parser.add_option(&quot;-n&quot;, dest=&quot;size&quot;, type=&quot;int&quot;)
++ parser.add_option(&quot;-T&quot;, &quot;--template&quot;, dest=&quot;template&quot;, type=&quot;string&quot;)
++ parser.add_option(&quot;-o&quot;, dest=&quot;oldlog&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-p&quot;, dest=&quot;usespec&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-s&quot;, dest=&quot;sort&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-M&quot;, &quot;--no-mirror&quot;, action=&quot;callback&quot;,
++ callback=disable_mirror)
++ opts, args = parser.parse_args()
++ if len(args) != 1:
++ raise Error, &quot;invalid arguments&quot;
++ opts.pkgdirurl = layout.package_url(args[0])
++ return opts
++
++def rpmlog(pkgdirurl, revision, size, template, oldlog, usespec, sort):
++ another = None
++ if usespec:
++ svn = SVN()
++ specurl = layout.package_spec_url(pkgdirurl)
++ rawspec = svn.cat(specurl, rev=revision)
++ spec, another = split_spec_changelog(StringIO(rawspec))
++ newlog = get_changelog(pkgdirurl, another=another, rev=revision,
++ size=size, sort=sort, template=template, oldlog=oldlog)
++ sys.stdout.writelines(newlog)
++
++def main():
++ do_command(parse_options, rpmlog)
++
++# vim:sw=4:ts=4:et
+
+Added: build_system/repsys/trunk/RepSys/commands/submit.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/submit.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/submit.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,211 @@
++#!/usr/bin/python
++from RepSys import Error, config, layout, mirror
++from RepSys.svn import SVN
++from RepSys.command import *
++from RepSys.rpmutil import get_spec, get_submit_info
++from RepSys.util import get_auth, execcmd, get_helper
++import urllib
++import getopt
++import sys
++import re
++import subprocess
++import uuid
++
++import xmlrpclib
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys submit [OPTIONS] [URL[@REVISION] ...]
++
++Submits the package from URL to the submit host.
++
++The submit host will try to build the package, and upon successful
++completion will 'tag' the package and upload it to the official
++repositories.
++
++The package name can refer to an alias to a group of packages defined in
++the section submit-groups of the configuration file.
++
++The status of the submit can visualized at:
++
++<A HREF="http://kenobi.mandriva.com/bs/output.php">http://kenobi.mandriva.com/bs/output.php</A>
++
++If no URL and revision are specified, the latest changed revision in the
++package working copy of the current directory will be used.
++
++Options:
++ -t TARGET Submit given package URL to given target
++ -l Just list available targets
++ -r REV Provides a revision number (when not providing as an
++ argument)
++ -s The host in which the package URL will be submitted
++ (defaults to the host in the URL)
++ -a Submit all URLs at once (depends on server-side support)
++ -i SID Use the submit identifier SID
++ -h Show this message
++ --distro The distribution branch where the packages come from
++ --define Defines one variable to be used by the submit scripts
++ in the submit host
++
++Examples:
++ repsys submit
++ repsys submit foo
++ repsys submit 2009.1/foo
++ repsys submit <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">foo at 14800</A> bar <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">baz at 11001</A>
++ repsys submit <A HREF="https://repos/svn/mdv/cooker/foo">https://repos/svn/mdv/cooker/foo</A>
++ repsys submit -l <A HREF="https://repos">https://repos</A>
++ repsys submit 2008.1/<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">my-packages at 11011</A>
++ repsys submit --define section=main/testing -t 2008.1
++&quot;&quot;&quot;
++
++DEFAULT_TARGET = &quot;Cooker&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.defaults[&quot;revision&quot;] = None
++ parser.add_option(&quot;-t&quot;, dest=&quot;target&quot;, default=None)
++ parser.add_option(&quot;-l&quot;, action=&quot;callback&quot;, callback=list_targets)
++ parser.add_option(&quot;-r&quot;, dest=&quot;revision&quot;, type=&quot;string&quot;, nargs=1)
++ parser.add_option(&quot;-s&quot;, dest=&quot;submithost&quot;, type=&quot;string&quot;, nargs=1,
++ default=None)
++ parser.add_option(&quot;-i&quot;, dest=&quot;sid&quot;, type=&quot;string&quot;, nargs=1,
++ default=None)
++ parser.add_option(&quot;-a&quot;, dest=&quot;atonce&quot;, action=&quot;store_true&quot;, default=False)
++ parser.add_option(&quot;--distro&quot;, dest=&quot;distro&quot;, type=&quot;string&quot;,
++ default=None)
++ parser.add_option(&quot;--define&quot;, action=&quot;append&quot;, default=[])
++ opts, args = parser.parse_args()
++ if not args:
++ name, url, rev = get_submit_info(&quot;.&quot;)
++ args = [&quot;%s@%s&quot; % (url, str(rev))]
++ print &quot;Submitting %s at revision %s&quot; % (name, rev)
++ print &quot;URL: %s&quot; % url
++ if opts.revision is not None:
++ # backwards compatibility with the old -r usage
++ if len(args) == 1:
++ args[0] = args[0] + &quot;@&quot; + opts.revision
++ else:
++ raise Error, &quot;can't use -r REV with more than one package name&quot;
++ del opts.revision
++ if len(args) == 2:
++ # prevent from using the old &lt;name&gt; &lt;rev&gt; syntax
++ try:
++ rev = int(args[1])
++ except ValueError:
++ # ok, it is a package name, let it pass
++ pass
++ else:
++ raise Error, &quot;the format &lt;name&gt; &lt;revision&gt; is deprecated, &quot;\
++ &quot;use &lt;name&gt;@&lt;revision&gt; instead&quot;
++ # expand group aliases
++ expanded = []
++ for nameurl in args:
++ expanded.extend(expand_group(nameurl))
++ if expanded != args:
++ print &quot;Submitting: %s&quot; % &quot; &quot;.join(expanded)
++ args = expanded
++ # generate URLs for package names:
++ opts.urls = [mirror.strip_username(
++ layout.package_url(nameurl, distro=opts.distro, mirrored=False))
++ for nameurl in args]
++ # find the revision if not specified:
++ newurls = []
++ for url in opts.urls:
++ if not &quot;@&quot; in url:
++ print &quot;Fetching revision...&quot;
++ courl = layout.checkout_url(url)
++ log = SVN().log(courl, limit=1)
++ if not log:
++ raise Error, &quot;can't find a revision for %s&quot; % courl
++ ci = log[0]
++ print &quot;URL:&quot;, url
++ print &quot;Commit:&quot;,
++ print &quot;%d | %s&quot; % (ci.revision, ci.author),
++ if ci.lines:
++ line = &quot; &quot;.join(ci.lines).strip()
++ if len(line) &gt; 57:
++ line = line[:57] + &quot;...&quot;
++ print &quot;| %s&quot; % line,
++ print
++ url = url + &quot;@&quot; + str(ci.revision)
++ newurls.append(url)
++ opts.urls[:] = newurls
++ # choose a target if not specified:
++ if opts.target is None and opts.distro is None:
++ target = layout.distro_branch(opts.urls[0]) or DEFAULT_TARGET
++ print &quot;Implicit target: %s&quot; % target
++ opts.target = target
++ del opts.distro
++ return opts
++
++def expand_group(group):
++ name, rev = layout.split_url_revision(group)
++ distro = None
++ if &quot;/&quot; in name:
++ distro, name = name.rsplit(&quot;/&quot;, 1)
++ found = config.get(&quot;submit-groups&quot;, name)
++ packages = [group]
++ if found:
++ packages = found.split()
++ if rev:
++ packages = [(&quot;%s@%s&quot; % (package, rev))
++ for package in packages]
++ if distro:
++ packages = [&quot;%s/%s&quot; % (distro, package)
++ for package in packages]
++ return packages
++
++def list_targets(option, opt, val, parser):
++ host = config.get(&quot;submit&quot;, &quot;host&quot;)
++ if host is None:
++ raise Error, &quot;no submit host defined in repsys.conf&quot;
++ createsrpm = get_helper(&quot;create-srpm&quot;)
++ #TODO make it configurable
++ command = &quot;ssh %s %s --list&quot; % (host, createsrpm)
++ execcmd(command, show=True)
++ sys.exit(0)
++
++def submit(urls, target, define=[], submithost=None, atonce=False, sid=None):
++ if submithost is None:
++ submithost = config.get(&quot;submit&quot;, &quot;host&quot;)
++ if submithost is None:
++ # extract the submit host from the svn host
++ type, rest = urllib.splittype(pkgdirurl)
++ host, path = urllib.splithost(rest)
++ user, host = urllib.splituser(host)
++ submithost, port = urllib.splitport(host)
++ del type, user, port, path, rest
++ # runs a create-srpm in the server through ssh, which will make a
++ # copy of the rpm in the export directory
++ createsrpm = get_helper(&quot;create-srpm&quot;)
++ baseargs = [&quot;ssh&quot;, submithost, createsrpm, &quot;-t&quot;, target]
++ if not sid:
++ sid = uuid.uuid4()
++ define.append(&quot;sid=%s&quot; % sid)
++ for entry in reversed(define):
++ baseargs.append(&quot;--define&quot;)
++ baseargs.append(entry)
++ cmdsargs = []
++ if len(urls) == 1:
++ # be compatible with server-side repsys versions older than 1.6.90
++ url, rev = layout.split_url_revision(urls[0])
++ baseargs.append(&quot;-r&quot;)
++ baseargs.append(str(rev))
++ baseargs.append(url)
++ cmdsargs.append(baseargs)
++ elif atonce:
++ cmdsargs.append(baseargs + urls)
++ else:
++ cmdsargs.extend((baseargs + [url]) for url in urls)
++ for cmdargs in cmdsargs:
++ command = subprocess.list2cmdline(cmdargs)
++ status, output = execcmd(command)
++ if status == 0:
++ print &quot;Package submitted!&quot;
++ else:
++ sys.stderr.write(output)
++ sys.exit(status)
++
++def main():
++ do_command(parse_options, submit)
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/commands/switch.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/switch.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/switch.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,33 @@
++#!/usr/bin/python
++from RepSys.command import *
++from RepSys.rpmutil import switch
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys switch [URL]
++
++Relocates the working copy to the base location URL.
++
++If URL is not provided, it will use the option repository from repsys.conf
++as default, or, if the current working copy is already based in
++default_parent, it will use the location from the mirror option from
++repsys.conf.
++
++If the current work is based in another URL, it will use default_parent.
++
++Options:
++ -h Show this message
++
++Examples:
++ repsys switch
++ repsys switch <A HREF="https://mirrors.localnetwork/svn/packages/">https://mirrors.localnetwork/svn/packages/</A>
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ opts, args = parser.parse_args()
++ if len(args):
++ opts.mirrorurl = args[0]
++ return opts
++
++def main():
++ do_command(parse_options, switch)
+
+Added: build_system/repsys/trunk/RepSys/commands/sync.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/sync.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/sync.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,38 @@
++#!/usr/bin/python
++from RepSys.command import *
++from RepSys.rpmutil import sync
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys sync
++
++Will add or remove from the working copy those files added or removed
++in the spec file.
++
++It will not commit the changes.
++
++Options:
++ -c Commit the changes, as in ci
++ --dry-run Print results without changing the working copy
++ --download -d
++ Try to download the source files not found
++ -h Show this message
++
++Examples:
++ repsys sync
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ parser.add_option(&quot;--dry-run&quot;, dest=&quot;dryrun&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-c&quot;, dest=&quot;ci&quot;, default=False,
++ action=&quot;store_true&quot;)
++ parser.add_option(&quot;-d&quot;, &quot;--download&quot;, dest=&quot;download&quot;, default=False,
++ action=&quot;store_true&quot;)
++ opts, args = parser.parse_args()
++ if len(args):
++ opts.target = args[0]
++ return opts
++
++def main():
++ do_command(parse_options, sync)
+
+Added: build_system/repsys/trunk/RepSys/commands/up.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/up.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/up.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,22 @@
++from RepSys import Error
++from RepSys.command import *
++from RepSys.rpmutil import update
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys up [PATH]
++
++Update the package working copy and synchronize all binaries.
++
++Options:
++ -h help
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ opts, args = parser.parse_args()
++ if args:
++ opts.target = args[0]
++ return opts
++
++def main():
++ do_command(parse_options, update)
+
+Added: build_system/repsys/trunk/RepSys/commands/upload.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/commands/upload.py (rev 0)
++++ build_system/repsys/trunk/RepSys/commands/upload.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,28 @@
++from RepSys import Error
++from RepSys.command import *
++from RepSys.rpmutil import upload
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys upload [OPTIONS] [PATH]
++
++Upload a given file to the binary sources repository.
++
++It will also update the contents of the 'binrepo.lst' file and leave it
++uncommited.
++
++If the path is a directory, all the contents of the directory will be
++uploaded or removed.
++
++Options:
++ -h help
++
++&quot;&quot;&quot;
++
++def parse_options():
++ parser = OptionParser(help=HELP)
++ opts, args = parser.parse_args()
++ opts.paths = args
++ return opts
++
++def main():
++ do_command(parse_options, upload)
+
+Added: build_system/repsys/trunk/RepSys/layout.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/layout.py (rev 0)
++++ build_system/repsys/trunk/RepSys/layout.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,207 @@
++&quot;&quot;&quot; Handles repository layout scheme and package URLs.&quot;&quot;&quot;
++
++import os
++import urlparse
++
++from RepSys import Error, config
++from RepSys.svn import SVN
++
++__all__ = [&quot;package_url&quot;, &quot;checkout_url&quot;, &quot;repository_url&quot;, &quot;get_url_revision&quot;]
++
++def layout_dirs():
++ devel_branch = config.get(&quot;global&quot;, &quot;trunk-dir&quot;, &quot;cooker/&quot;)
++ devel_branch = os.path.normpath(devel_branch)
++ branches_dir = config.get(&quot;global&quot;, &quot;branches-dir&quot;, &quot;updates/&quot;)
++ branches_dir = os.path.normpath(branches_dir)
++ return devel_branch, branches_dir
++
++def get_url_revision(url, retrieve=True):
++ &quot;&quot;&quot;Get the revision from a given URL
++
++ If the URL contains an explicit revision number (<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">URL at REV</A>), just use it
++ without even checking if the revision really exists.
++
++ The parameter retrieve defines whether it must ask the SVN server for
++ the revision number or not when it is not found in the URL.
++ &quot;&quot;&quot;
++ url, rev = split_url_revision(url)
++ if rev is None and retrieve:
++ # if no revspec was found, ask the server
++ svn = SVN()
++ rev = svn.revision(url)
++ return rev
++
++def unsplit_url_revision(url, rev):
++ if rev is None:
++ newurl = url
++ else:
++ parsed = list(urlparse.urlparse(url))
++ path = os.path.normpath(parsed[2])
++ parsed[2] = path + &quot;@&quot; + str(rev)
++ newurl = urlparse.urlunparse(parsed)
++ return newurl
++
++def split_url_revision(url):
++ &quot;&quot;&quot;Returns a tuple (url, rev) from an subversion URL with @REV
++
++ If the revision is not present in the URL, rev is None.
++ &quot;&quot;&quot;
++ parsed = list(urlparse.urlparse(url))
++ path = os.path.normpath(parsed[2])
++ dirs = path.rsplit(&quot;/&quot;, 1)
++ lastname = dirs[-1]
++ newname = lastname
++ index = lastname.rfind(&quot;@&quot;)
++ rev = None
++ if index != -1:
++ newname = lastname[:index]
++ rawrev = lastname[index+1:]
++ if rawrev:
++ try:
++ rev = int(rawrev)
++ if rev &lt; 0:
++ raise ValueError
++ except ValueError:
++ raise Error, &quot;invalid revision specification on URL: %s&quot; % url
++ dirs[-1] = newname
++ newpath = &quot;/&quot;.join(dirs)
++ parsed[2] = newpath
++ newurl = urlparse.urlunparse(parsed)
++ return newurl, rev
++
++def checkout_url(pkgdirurl, branch=None, version=None, release=None,
++ releases=False, pristine=False, append_path=None):
++ &quot;&quot;&quot;Get the URL of a branch of the package, defaults to current/
++
++ It tries to preserve revisions in the format @REV.
++ &quot;&quot;&quot;
++ parsed = list(urlparse.urlparse(pkgdirurl))
++ path, rev = split_url_revision(parsed[2])
++ if releases:
++ path = os.path.normpath(path + &quot;/releases&quot;)
++ elif version:
++ assert release is not None
++ path = os.path.normpath(path + &quot;/releases/&quot; + version + &quot;/&quot; + release)
++ elif pristine:
++ path = os.path.join(path, &quot;pristine&quot;)
++ elif branch:
++ path = os.path.join(path, &quot;branches&quot;, branch)
++ else:
++ path = os.path.join(path, &quot;current&quot;)
++ if append_path:
++ path = os.path.join(path, append_path)
++ path = unsplit_url_revision(path, rev)
++ parsed[2] = path
++ newurl = urlparse.urlunparse(parsed)
++ return newurl
++
++def convert_default_parent(url):
++ &quot;&quot;&quot;Removes the cooker/ component from the URL&quot;&quot;&quot;
++ parsed = list(urlparse.urlparse(url))
++ path = os.path.normpath(parsed[2])
++ rest, last = os.path.split(path)
++ parsed[2] = rest
++ newurl = urlparse.urlunparse(parsed)
++ return newurl
++
++def remove_current(pkgdirurl):
++ parsed = list(urlparse.urlparse(pkgdirurl))
++ path = os.path.normpath(parsed[2])
++ rest, last = os.path.split(path)
++ if last == &quot;current&quot;:
++ # FIXME this way we will not allow packages to be named &quot;current&quot;
++ path = rest
++ parsed[2] = path
++ newurl = urlparse.urlunparse(parsed)
++ return newurl
++
++def repository_url(mirrored=False):
++ url = None
++ if mirrored and config.getbool(&quot;global&quot;, &quot;use-mirror&quot;, &quot;yes&quot;):
++ url = config.get(&quot;global&quot;, &quot;mirror&quot;)
++ if url is None:
++ url = config.get(&quot;global&quot;, &quot;repository&quot;)
++ if not url:
++ # compatibility with the default_parent configuration option
++ default_parent = config.get(&quot;global&quot;, &quot;default_parent&quot;)
++ if default_parent is None:
++ raise Error, &quot;you need to set the 'repository' &quot; \
++ &quot;configuration option on repsys.conf&quot;
++ url = convert_default_parent(default_parent)
++ return url
++
++def package_url(name_or_url, version=None, release=None, distro=None,
++ mirrored=True):
++ &quot;&quot;&quot;Returns a tuple with the absolute package URL and its name
++
++ @name_or_url: name, relative path, or URL of the package. In case it is
++ a URL, the URL will just be 'normalized'.
++ @version: the version to be fetched from releases/ (requires release)
++ @release: the release number to be fetched from releases/$version/
++ @distro: the name of the repository branch inside updates/
++ @mirrored: return an URL based on the mirror repository, if enabled
++ &quot;&quot;&quot;
++ from RepSys import mirror
++ if &quot;://&quot; in name_or_url:
++ pkgdirurl = mirror.normalize_path(name_or_url)
++ pkgdirurl = remove_current(pkgdirurl)
++ if mirror.using_on(pkgdirurl) and not mirrored:
++ pkgdirurl = mirror.relocate_path(mirror.mirror_url(),
++ repository_url(), pkgdirurl)
++ else:
++ name = name_or_url
++ devel_branch, branches_dir = layout_dirs()
++ if distro or &quot;/&quot; in name:
++ default_branch = branches_dir
++ if distro:
++ default_branch = os.path.join(default_branch, distro)
++ else:
++ default_branch = devel_branch # cooker
++ path = os.path.join(default_branch, name)
++ parsed = list(urlparse.urlparse(repository_url(mirrored=mirrored)))
++ parsed[2] = os.path.join(parsed[2], path)
++ pkgdirurl = urlparse.urlunparse(parsed)
++ return pkgdirurl
++
++def package_name(pkgdirurl):
++ &quot;&quot;&quot;Returns the package name from a package URL
++
++ It takes care of revision numbers&quot;&quot;&quot;
++ parsed = urlparse.urlparse(pkgdirurl)
++ path, rev = split_url_revision(parsed[2])
++ rest, name = os.path.split(path)
++ return name
++
++def package_spec_url(pkgdirurl, *args, **kwargs):
++ &quot;&quot;&quot;Returns the URL of the specfile of a given package URL
++
++ The parameters are the same used by checkout_url, except append_path.
++ &quot;&quot;&quot;
++ kwargs[&quot;append_path&quot;] = &quot;SPECS/&quot; + package_name(pkgdirurl) + &quot;.spec&quot;
++ specurl = checkout_url(pkgdirurl, *args, **kwargs)
++ return specurl
++
++def distro_branch(pkgdirurl):
++ &quot;&quot;&quot;Tries to guess the distro branch name from a package URL&quot;&quot;&quot;
++ from RepSys.mirror import same_base
++ found = None
++ repo = repository_url()
++ if same_base(repo, pkgdirurl):
++ devel_branch, branches_dir = layout_dirs()
++ repo_path = urlparse.urlparse(repo)[2]
++ devel_path = os.path.join(repo_path, devel_branch)
++ branches_path = os.path.join(repo_path, branches_dir)
++ parsed = urlparse.urlparse(pkgdirurl)
++ path = os.path.normpath(parsed[2])
++ if path.startswith(devel_path):
++ # devel_branch must be before branches_dir in order to allow
++ # devel_branch to be inside branches_dir, as in /branches/cooker
++ _, found = os.path.split(devel_branch)
++ elif path.startswith(branches_path):
++ comps = path.split(&quot;/&quot;)
++ if branches_path == &quot;/&quot;:
++ found = comps[1]
++ elif len(comps) &gt;= 2: # must be at least branch/pkgname
++ found = comps[branches_path.count(&quot;/&quot;)+1]
++ return found
++
+
+Added: build_system/repsys/trunk/RepSys/log.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/log.py (rev 0)
++++ build_system/repsys/trunk/RepSys/log.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,633 @@
++#!/usr/bin/python
++from RepSys import Error, config, layout
++from RepSys.svn import SVN
++from RepSys.util import execcmd
++
++try:
++ from Cheetah.Template import Template
++except ImportError:
++ raise Error, &quot;repsys requires the package python-cheetah&quot;
++
++from cStringIO import StringIO
++
++import sys
++import os
++import re
++import time
++import locale
++import glob
++import tempfile
++import shutil
++import subprocess
++
++
++locale.setlocale(locale.LC_ALL, &quot;C&quot;)
++
++default_template = &quot;&quot;&quot;
++#if not $releases_by_author[-1].visible
++ ## Hide the first release that contains no changes. It must be a
++ ## reimported package and the log gathered from misc/ already should
++ ## contain a correct entry for the version-release:
++ #set $releases_by_author = $releases_by_author[:-1]
++#end if
++#for $rel in $releases_by_author
++* $rel.date $rel.author_name &lt;$rel.author_email&gt; $rel.version-$rel.release
+++ Revision: $rel.revision
++## #if not $rel.released
++##+ Status: not released
++## #end if
++ #if not $rel.visible
+++ rebuild (emptylog)
++ #end if
++ #for $rev in $rel.release_revisions
++ #for $line in $rev.lines
++$line
++ #end for
++ #end for
++
++ #for $author in $rel.authors
++ #if not $author.visible
++ #continue
++ #end if
++ ##alternatively, one could use:
++ ###if $author.email == &quot;root&quot;
++ ## #continue
++ ###end if
++ + $author.name &lt;$author.email&gt;
++ #for $rev in $author.revisions
++ #for $line in $rev.lines
++ $line
++ #end for
++ #end for
++
++ #end for
++#end for
++&quot;&quot;&quot;
++
++def getrelease(pkgdirurl, rev=None, macros=[], exported=None):
++ &quot;&quot;&quot;Tries to obtain the version-release of the package for a
++ yet-not-markrelease revision of the package.
++
++ Is here where things should be changed if &quot;automatic release increasing&quot;
++ will be used.
++ &quot;&quot;&quot;
++ from RepSys.rpmutil import rpm_macros_defs
++ svn = SVN()
++ pkgcurrenturl = os.path.join(pkgdirurl, &quot;current&quot;)
++ specurl = os.path.join(pkgcurrenturl, &quot;SPECS&quot;)
++ if exported is None:
++ tmpdir = tempfile.mktemp()
++ svn.export(specurl, tmpdir, rev=rev)
++ else:
++ tmpdir = os.path.join(exported, &quot;SPECS&quot;)
++ try:
++ found = glob.glob(os.path.join(tmpdir, &quot;*.spec&quot;))
++ if not found:
++ raise Error, &quot;no .spec file found inside %s&quot; % specurl
++ specpath = found[0]
++ options = rpm_macros_defs(macros)
++ command = ((&quot;rpm -q --qf '%%{EPOCH}:%%{VERSION}-%%{RELEASE}\n' &quot;
++ &quot;--specfile %s %s&quot;) %
++ (specpath, options))
++ pipe = subprocess.Popen(command, stdout=subprocess.PIPE,
++ stderr=subprocess.PIPE, shell=True)
++ pipe.wait()
++ output = pipe.stdout.read()
++ error = pipe.stderr.read()
++ if pipe.returncode != 0:
++ raise Error, &quot;Error in command %s: %s&quot; % (command, error)
++ releases = output.split()
++ try:
++ epoch, vr = releases[0].split(&quot;:&quot;, 1)
++ version, release = vr.split(&quot;-&quot;, 1)
++ except ValueError:
++ raise Error, &quot;Invalid command output: %s: %s&quot; % \
++ (command, output)
++ #XXX check if this is the right way:
++ if epoch == &quot;(none)&quot;:
++ ev = version
++ else:
++ ev = epoch + &quot;:&quot; + version
++ return ev, release
++ finally:
++ if exported is None and os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++
++class _Revision:
++ lines = []
++ date = None
++ raw_date = None
++ revision = None
++ author_name = None
++ author_email = None
++
++ def __init__(self, **kwargs):
++ self.__dict__.update(kwargs)
++
++ def __repr__(self):
++ lines = repr(self.lines)[:30] + &quot;...]&quot;
++ line = &quot;&lt;_Revision %d author=%r date=%r lines=%s&gt;&quot; % \
++ (self.revision, self.author, self.date, lines)
++ return line
++
++
++class _Release(_Revision):
++ version = None
++ release = None
++ revisions = []
++ release_revisions = []
++ authors = []
++ visible = False
++
++ def __init__(self, **kwargs):
++ self.revisions = []
++ _Revision.__init__(self, **kwargs)
++
++ def __repr__(self):
++ line = &quot;&lt;_Release v=%s r=%s revs=%r&gt;&quot; % \
++ (self.version, self.release, self.revisions)
++ return line
++
++unescaped_macro_pat = re.compile(r&quot;([^%])%([^%])&quot;)
++
++def escape_macros(text):
++ escaped = unescaped_macro_pat.sub(&quot;\\1%%\\2&quot;, text)
++ return escaped
++
++def format_lines(lines):
++ first = 1
++ entrylines = []
++ perexpr = re.compile(r&quot;([^%])%([^%])&quot;)
++ for line in lines:
++ if line:
++ line = escape_macros(line)
++ if first:
++ first = 0
++ line = line.lstrip()
++ if line[0] != &quot;-&quot;:
++ nextline = &quot;- &quot; + line
++ else:
++ nextline = line
++ elif line[0] != &quot; &quot; and line[0] != &quot;-&quot;:
++ nextline = &quot; &quot; + line
++ else:
++ nextline = line
++ if nextline not in entrylines:
++ entrylines.append(nextline)
++ return entrylines
++
++
++class _Author:
++ name = None
++ email = None
++ revisions = None
++ visible = False
++
++
++def group_releases_by_author(releases):
++ allauthors = []
++ grouped = []
++ for release in releases:
++
++ # group revisions of the release by author
++ authors = {}
++ latest = None
++ for revision in release.revisions:
++ authors.setdefault(revision.author, []).append(revision)
++
++ # create _Authors and sort them by their latest revisions
++ decorated = []
++ for authorname, revs in authors.iteritems():
++ author = _Author()
++ author.name = revs[0].author_name
++ author.email = revs[0].author_email
++ author.revisions = revs
++ # #41117: mark those authors without visible messages
++ author.visible = bool(sum(len(rev.lines) for rev in revs))
++ revlatest = author.revisions[0]
++ # keep the latest revision even for completely invisible
++ # authors (below)
++ if latest is None or revlatest.revision &gt; latest.revision:
++ latest = revlatest
++ if not author.visible:
++ # only sort those visible authors, invisible ones are used
++ # only in &quot;latest&quot;
++ continue
++ decorated.append((revlatest.revision, author))
++ decorated.sort(reverse=1)
++
++ if release.visible:
++ release.authors = [t[1] for t in decorated]
++ firstrel, release.authors = release.authors[0], release.authors[1:]
++ release.author_name = firstrel.name
++ release.author_email = firstrel.email
++ release.release_revisions = firstrel.revisions
++ else:
++ # we don't care about other possible authors in completely
++ # invisible releases
++ firstrev = release.revisions[0]
++ release.author_name = firstrev.author_name
++ release.author_email = firstrev.author_email
++ release.raw_date = firstrev.raw_date
++ release.date = firstrev.date
++
++ release.date = latest.date
++ release.raw_date = latest.raw_date
++ release.revision = latest.revision
++
++ grouped.append(release)
++
++ return grouped
++
++
++def group_revisions_by_author(currentlog):
++ revisions = []
++ last_author = None
++ for entry in currentlog:
++ revision = _Revision()
++ revision.lines = format_lines(entry.lines)
++ revision.raw_date = entry.date
++ revision.date = parse_raw_date(entry.date)
++ revision.revision = entry.revision
++ if entry.author == last_author:
++ revisions[-1].revisions.append(revision)
++ else:
++ author = _Author()
++ author.name, author.email = get_author_name(entry.author)
++ author.revisions = [revision]
++ revisions.append(author)
++ last_author = entry.author
++ return revisions
++
++
++emailpat = re.compile(&quot;(?P&lt;name&gt;.*?)\s*&lt;(?P&lt;email&gt;.*?)&gt;&quot;)
++
++def get_author_name(author):
++ found = emailpat.match(config.get(&quot;users&quot;, author, author))
++ name = ((found and found.group(&quot;name&quot;)) or author)
++ email = ((found and found.group(&quot;email&quot;)) or author)
++ return name, email
++
++def parse_raw_date(rawdate):
++ return time.strftime(&quot;%a %b %d %Y&quot;, rawdate)
++
++def filter_log_lines(lines):
++ # Lines in commit messages beginning with CLOG will be the only shown
++ # in the changelog. These lines will have the CLOG token and blanks
++ # stripped from the beginning.
++ onlylines = None
++ clogstr = config.get(&quot;log&quot;, &quot;unignore-string&quot;)
++ if clogstr:
++ clogre = re.compile(r&quot;(^%s[^ \t]?[ \t])&quot; % clogstr)
++ onlylines = [clogre.sub(&quot;&quot;, line)
++ for line in lines if line.startswith(clogstr)]
++ if onlylines:
++ filtered = onlylines
++ else:
++ # Lines in commit messages containing SILENT at any position will be
++ # skipped; commits with their log messages beggining with SILENT in the
++ # first positionj of the first line will have all lines ignored.
++ ignstr = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
++ if len(lines) and lines[0].startswith(ignstr):
++ return []
++ filtered = [line for line in lines if ignstr not in line]
++ return filtered
++
++
++def make_release(author=None, revision=None, date=None, lines=None,
++ entries=[], released=True, version=None, release=None):
++ rel = _Release()
++ rel.author = author
++ if author:
++ rel.author_name, rel.author_email = get_author_name(author)
++ rel.revision = revision
++ rel.version = version
++ rel.release = release
++ rel.date = (date and parse_raw_date(date)) or None
++ rel.lines = lines
++ rel.released = released
++ rel.visible = False
++ for entry in entries:
++ lines = filter_log_lines(entry.lines)
++ revision = _Revision()
++ revision.revision = entry.revision
++ revision.lines = format_lines(lines)
++ if revision.lines:
++ rel.visible = True
++ revision.date = parse_raw_date(entry.date)
++ revision.raw_date = entry.date
++ revision.author = entry.author
++ (revision.author_name, revision.author_email) = \
++ get_author_name(entry.author)
++ rel.revisions.append(revision)
++ return rel
++
++
++def dump_file(releases, currentlog=None, template=None):
++ templpath = template or config.get(&quot;template&quot;, &quot;path&quot;,
++ &quot;/usr/share/repsys/default.chlog&quot;)
++ params = {}
++ if templpath is None or not os.path.exists(templpath):
++ params[&quot;source&quot;] = default_template
++ sys.stderr.write(&quot;warning: %s not found. using built-in template.\n&quot;%
++ templpath)
++ else:
++ params[&quot;file&quot;] = templpath
++ releases_author = group_releases_by_author(releases)
++ revisions_author = group_revisions_by_author(currentlog)
++ params[&quot;searchList&quot;] = [{&quot;releases_by_author&quot; : releases_author,
++ &quot;releases&quot; : releases,
++ &quot;revisions_by_author&quot;: revisions_author}]
++ t = Template(**params)
++ return t.respond()
++
++
++class InvalidEntryError(Exception):
++ pass
++
++def parse_repsys_entry(revlog):
++ # parse entries in the format:
++ # %repsys &lt;operation&gt;
++ # key: value
++ # ..
++ # &lt;newline&gt;
++ # &lt;comments&gt;
++ #
++ if len(revlog.lines) == 0 or not revlog.lines[0].startswith(&quot;%repsys&quot;):
++ raise InvalidEntryError
++ try:
++ data = {&quot;operation&quot; : revlog.lines[0].split()[1]}
++ except IndexError:
++ raise InvalidEntryError
++ for line in revlog.lines[1:]:
++ if not line:
++ break
++ try:
++ key, value = line.split(&quot;:&quot;, 1)
++ except ValueError:
++ raise InvalidEntryError
++ data[key.strip().lower()] = value.strip() # ???
++ return data
++
++
++def get_revision_offset():
++ try:
++ revoffset = config.getint(&quot;log&quot;, &quot;revision-offset&quot;, 0)
++ except (ValueError, TypeError):
++ raise Error, (&quot;Invalid revision-offset number in configuration &quot;
++ &quot;file(s).&quot;)
++ return revoffset or 0
++
++oldmsgpat = re.compile(
++ r&quot;Copying release (?P&lt;rel&gt;[^\s]+) to (?P&lt;dir&gt;[^\s]+) directory\.&quot;)
++
++def parse_markrelease_log(relentry):
++ if not ((relentry.lines and oldmsgpat.match(relentry.lines[0]) \
++ or parse_repsys_entry(relentry))):
++ raise InvalidEntryError
++ from_rev = None
++ path = None
++ for changed in relentry.changed:
++ if changed[&quot;action&quot;] == &quot;A&quot; and changed[&quot;from_rev&quot;]:
++ from_rev = changed[&quot;from_rev&quot;]
++ path = changed[&quot;path&quot;]
++ break
++ else:
++ raise InvalidEntryError
++ # get the version and release from the names in the path, do not relay
++ # on log messages
++ version, release = path.rsplit(os.path.sep, 3)[-2:]
++ return version, release, from_rev
++
++
++def svn2rpm(pkgdirurl, rev=None, size=None, submit=False,
++ template=None, macros=[], exported=None):
++ concat = config.get(&quot;log&quot;, &quot;concat&quot;, &quot;&quot;).split()
++ revoffset = get_revision_offset()
++ svn = SVN()
++ pkgreleasesurl = layout.checkout_url(pkgdirurl, releases=True)
++ pkgcurrenturl = layout.checkout_url(pkgdirurl)
++ releaseslog = svn.log(pkgreleasesurl, noerror=1)
++ currentlog = svn.log(pkgcurrenturl, limit=size, start=rev,
++ end=revoffset)
++
++ # sort releases by copyfrom-revision, so that markreleases for same
++ # revisions won't look empty
++ releasesdata = []
++ if releaseslog:
++ for relentry in releaseslog[::-1]:
++ try:
++ (version, release, relrevision) = \
++ parse_markrelease_log(relentry)
++ except InvalidEntryError:
++ continue
++ releasesdata.append((relrevision, -relentry.revision, relentry,
++ version, release))
++ releasesdata.sort()
++
++ # collect valid releases using the versions provided by the changes and
++ # the packages
++ prevrevision = 0
++ releases = []
++ for (relrevision, dummy, relentry, version, release) in releasesdata:
++ if prevrevision == relrevision:
++ # ignore older markrelease of the same revision, since they
++ # will have no history
++ continue
++ entries = [entry for entry in currentlog
++ if relrevision &gt;= entry.revision and
++ (prevrevision &lt; entry.revision)]
++ if not entries:
++ #XXX probably a forced release, without commits in current/,
++ # check if this is the right behavior
++ sys.stderr.write(&quot;warning: skipping (possible) release &quot;
++ &quot;%s-%s@%s, no commits since previous markrelease (r%r)\n&quot; %
++ (version, release, relrevision, prevrevision))
++ continue
++
++ release = make_release(author=relentry.author,
++ revision=relentry.revision, date=relentry.date,
++ lines=relentry.lines, entries=entries,
++ version=version, release=release)
++ releases.append(release)
++ prevrevision = relrevision
++
++ # look for commits that have been not submitted (released) yet
++ # this is done by getting all log entries newer (greater revision no.)
++ # than releasesdata[-1] (in the case it exists)
++ if releasesdata:
++ latest_revision = releasesdata[-1][0] # the latest copied rev
++ else:
++ latest_revision = 0
++ notsubmitted = [entry for entry in currentlog
++ if entry.revision &gt; latest_revision]
++ if notsubmitted:
++ # if they are not submitted yet, what we have to do is to add
++ # a release/version number from getrelease()
++ version, release = getrelease(pkgdirurl, macros=macros,
++ exported=exported)
++ toprelease = make_release(entries=notsubmitted, released=False,
++ version=version, release=release)
++ releases.append(toprelease)
++
++ data = dump_file(releases[::-1], currentlog=currentlog, template=template)
++ return data
++
++def _split_changelog(stream):
++ current = None
++ count = 0
++ def finish(entry):
++ lines = entry[2]
++ # strip newlines at the end
++ for i in xrange(len(lines)-1, -1, -1):
++ if lines[i] != &quot;\n&quot;:
++ break
++ del lines[i]
++ return entry
++ for line in stream:
++ if line.startswith(&quot;*&quot;):
++ if current:
++ yield finish(current)
++ fields = line.split()
++ rawdate = &quot; &quot;.join(fields[:5])
++ try:
++ date = time.strptime(rawdate, &quot;* %a %b %d %Y&quot;)
++ except ValueError, e:
++ raise Error, &quot;failed to parse spec changelog: %s&quot; % e
++ curlines = [line]
++ current = (date, count, curlines)
++ # count used to ensure stable sorting when changelog entries
++ # have the same date, otherwise it would also compare the
++ # changelog lines
++ count -= 1
++ elif current:
++ curlines.append(line)
++ else:
++ pass # not good, but ignore
++ if current:
++ yield finish(current)
++
++def sort_changelog(stream):
++ entries = _split_changelog(stream)
++ log = StringIO()
++ for time, count, elines in sorted(entries, reverse=True):
++ log.writelines(elines)
++ log.write(&quot;\n&quot;)
++ return log
++
++def split_spec_changelog(stream):
++ chlog = StringIO()
++ spec = StringIO()
++ found = 0
++ visible = 0
++ for line in stream:
++ if line.startswith(&quot;%changelog&quot;):
++ found = 1
++ elif not found:
++ spec.write(line)
++ elif found:
++ if line.strip():
++ visible = 1
++ chlog.write(line)
++ elif line.startswith(&quot;%&quot;):
++ found = 0
++ spec.write(line)
++ spec.seek(0)
++ if not visible:
++ # when there are only blanks in the changelog, make it empty
++ chlog = StringIO()
++ return spec, chlog
++
++def get_old_log(pkgdirurl):
++ chlog = StringIO()
++ oldurl = config.get(&quot;log&quot;, &quot;oldurl&quot;)
++ if oldurl:
++ svn = SVN()
++ tmpdir = tempfile.mktemp()
++ try:
++ pkgname = layout.package_name(pkgdirurl)
++ pkgoldurl = os.path.join(oldurl, pkgname)
++ try:
++ # we're using HEAD here because fixes in misc/ (oldurl) may
++ # be newer than packages' last changed revision.
++ svn.export(pkgoldurl, tmpdir)
++ except Error:
++ pass
++ else:
++ logfile = os.path.join(tmpdir, &quot;log&quot;)
++ if os.path.isfile(logfile):
++ file = open(logfile)
++ chlog.write(&quot;\n&quot;) # TODO needed?
++ log = file.read()
++ log = escape_macros(log)
++ chlog.write(log)
++ file.close()
++ finally:
++ if os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++ chlog.seek(0)
++ return chlog
++
++def get_changelog(pkgdirurl, another=None, svn=True, rev=None, size=None,
++ submit=False, sort=False, template=None, macros=[], exported=None,
++ oldlog=False):
++ &quot;&quot;&quot;Generates the changelog for a given package URL
++
++ @another: a stream with the contents of a changelog to be merged with
++ the one generated
++ @svn: enable changelog from svn
++ @rev: generate the changelog with the changes up to the given
++ revision
++ @size: the number of revisions to be used (as in svn log --limit)
++ @submit: defines whether the latest unreleased log entries should have
++ the version parsed from the spec file
++ @sort: should changelog entries be reparsed and sorted after appending
++ the oldlog?
++ @template: the path to the cheetah template used to generate the
++ changelog from svn
++ @macros: a list of tuples containing macros to be defined when
++ parsing the version in the changelog
++ @exported: the path of a directory containing an already existing
++ checkout of the package, so that the spec file can be
++ parsed from there
++ @oldlog: if set it will try to append the old changelog file defined
++ in oldurl in repsys.conf
++ &quot;&quot;&quot;
++ newlog = StringIO()
++ if svn:
++ rawsvnlog = svn2rpm(pkgdirurl, rev=rev, size=size, submit=submit,
++ template=template, macros=macros, exported=exported)
++ newlog.write(rawsvnlog)
++ if another:
++ newlog.writelines(another)
++ if oldlog:
++ newlog.writelines(get_old_log(pkgdirurl))
++ if sort:
++ newlog.seek(0)
++ newlog = sort_changelog(newlog)
++ newlog.seek(0)
++ return newlog
++
++def specfile_svn2rpm(pkgdirurl, specfile, rev=None, size=None,
++ submit=False, sort=False, template=None, macros=[], exported=None):
++ fi = open(specfile)
++ spec, oldchlog = split_spec_changelog(fi)
++ fi.close()
++ another = None
++ if config.getbool(&quot;log&quot;, &quot;merge-spec&quot;, False):
++ another = oldchlog
++ sort = sort or config.getbool(&quot;log&quot;, &quot;sort&quot;, False)
++ chlog = get_changelog(pkgdirurl, another=another, rev=rev, size=size,
++ submit=submit, sort=sort, template=template, macros=macros,
++ exported=exported, oldlog=True)
++ fo = open(specfile, &quot;w&quot;)
++ fo.writelines(spec)
++ fo.write(&quot;\n\n%changelog\n&quot;)
++ fo.writelines(chlog)
++ fo.close()
++
++if __name__ == &quot;__main__&quot;:
++ l = svn2rpm(sys.argv[1])
++ print l
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/mirror.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/mirror.py (rev 0)
++++ build_system/repsys/trunk/RepSys/mirror.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,129 @@
++import sys
++import os
++import urlparse
++import urllib
++
++from RepSys import Error, config, layout
++from RepSys.svn import SVN
++
++def mirror_url():
++ mirror = config.get(&quot;global&quot;, &quot;mirror&quot;)
++ return mirror
++
++def normalize_path(url):
++ &quot;&quot;&quot;normalize url for relocate_path needs&quot;&quot;&quot;
++ parsed = urlparse.urlparse(url)
++ path = os.path.normpath(parsed[2])
++ newurl = urlparse.urlunparse((parsed[0], parsed[1], path,
++ parsed[3], parsed[4], parsed[5]))
++ return newurl
++
++def _joinurl(url, relpath):
++ parsed = urlparse.urlparse(url)
++ newpath = os.path.join(parsed[2], relpath)
++ newurl = urlparse.urlunparse((parsed[0], parsed[1], newpath,
++ parsed[3], parsed[4], parsed[5]))
++ return newurl
++
++
++def strip_username(url):
++ parsed = list(urlparse.urlparse(url))
++ _, parsed[1] = urllib.splituser(parsed[1])
++ newurl = urlparse.urlunparse(parsed)
++ return newurl
++
++def same_base(parent, url):
++ &quot;&quot;&quot;returns true if parent is parent of url&quot;&quot;&quot;
++ parent = normalize_path(parent)
++ url = normalize_path(url)
++ url = strip_username(url)
++ return url.startswith(parent)
++
++def relocate_path(oldparent, newparent, url):
++ oldparent = normalize_path(oldparent)
++ newparent = normalize_path(newparent)
++ url = normalize_path(url)
++ subpath = url[len(oldparent)+1:]
++ newurl = _joinurl(newparent, subpath) # subpath usually gets / at begining
++ return newurl
++
++def enabled(wcurl=None):
++ mirror = mirror_url()
++ repository = layout.repository_url()
++ enabled = False
++ if mirror and repository:
++ enabled = True
++ if wcurl and not same_base(mirror, wcurl):
++ enabled = False
++ return enabled
++
++def using_on(url):
++ &quot;&quot;&quot;returnes True if the URL points to the mirror repository&quot;&quot;&quot;
++ mirror = mirror_url()
++ if mirror:
++ using = same_base(mirror, url)
++ else:
++ using = False
++ return using
++
++def info(url, write=False, stream=sys.stderr):
++ if using_on(url):
++ stream.write(&quot;Using the svn mirror.\n&quot;)
++ if write:
++ stream.write(&quot;To be able to commit changes, use &quot;
++ &quot;'repsys switch' first.\n&quot;)
++
++def mirror_relocate(oldparent, newparent, url, wcpath):
++ svn = SVN()
++ newurl = relocate_path(oldparent, newparent, url)
++ svn.switch(newurl, url, path=wcpath, relocate=True)
++ return newurl
++
++def switchto_parent(svn, url, path):
++ &quot;&quot;&quot;Relocates the working copy to default_parent&quot;&quot;&quot;
++ newurl = mirror_relocate(mirror_url(), layout.repository_url(), url, path)
++ return newurl
++
++def switchto_parent_url(url):
++ newurl = relocate_path(mirror_url(), layout.repository_url(), url)
++ return newurl
++
++def switchto_mirror(svn, url, path):
++ newurl = mirror_relocate(layout.repository_url(), mirror_url(), url, path)
++ return newurl
++
++def autoswitch(svn, wcpath, wcurl, newbaseurl=None):
++ &quot;&quot;&quot;Switches between mirror, default_parent, or newbaseurl&quot;&quot;&quot;
++ nobase = False
++ mirror = mirror_url()
++ repository = layout.repository_url()
++ current = repository
++ if repository is None:
++ raise Error, &quot;the option repository from repsys.conf is &quot;\
++ &quot;required&quot;
++ indefault = same_base(repository, wcurl)
++ if not newbaseurl:
++ if not mirror:
++ raise Error, &quot;an URL is needed when the option mirror &quot;\
++ &quot;from repsys.conf is not set&quot;
++ if indefault:
++ chosen = mirror
++ elif same_base(mirror, wcurl):
++ current = mirror
++ chosen = repository
++ else:
++ nobase = True
++ else:
++ if mirror and same_base(mirror, wcurl):
++ current = mirror
++ elif indefault:
++ pass # !!!!
++ else:
++ nobase = True
++ chosen = newbaseurl
++ if nobase:
++ raise Error, &quot;the URL of this working copy is not based in &quot;\
++ &quot;repository nor mirror URLs&quot;
++ assert current != chosen
++ newurl = mirror_relocate(current, chosen, wcurl, wcpath)
++ return newurl
+
+Added: build_system/repsys/trunk/RepSys/plugins/__init__.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/plugins/__init__.py (rev 0)
++++ build_system/repsys/trunk/RepSys/plugins/__init__.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,27 @@
++import os
++
++loaded = {}
++
++def load():
++ # based on smart's plugin system
++ pluginsdir = os.path.dirname(__file__)
++ for entry in os.listdir(pluginsdir):
++ if entry != &quot;__init__.py&quot; and entry.endswith(&quot;.py&quot;):
++ name = entry[:-3]
++ loaded[name] = __import__(&quot;RepSys.plugins.&quot;+name, {}, {},
++ [name])
++ elif os.path.isdir(entry):
++ initfile = os.path.join(entry, &quot;__init__.py&quot;)
++ if os.path.isfile(initfile):
++ loaded[entry] = __import__(&quot;RepSys.plugins.&quot;+entry, {}, {},
++ [entry])
++
++def list():
++ return loaded.keys()
++
++def help(name):
++ from RepSys import Error
++ try:
++ return loaded[name].__doc__
++ except KeyError:
++ raise Error, &quot;plugin %s not found&quot; % name
+
+Added: build_system/repsys/trunk/RepSys/plugins/ldapusers.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/plugins/ldapusers.py (rev 0)
++++ build_system/repsys/trunk/RepSys/plugins/ldapusers.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,189 @@
++&quot;&quot;&quot;
++A Repsys plugin for obtaining users from a LDAP server.
++
++In order to enable the plugin, the user must define the following
++options in the [global] section of repsys.conf:
++
++ ldap-uri [required if ldap-server is unset]
++ the URI of the server, you can refer to more than one server by
++ adding more URIs separated by spaces::
++
++ ldap-uri = <A HREF="ldap://ldap.network/">ldap://ldap.network/</A> <A HREF="ldaps://backup.network:22389/">ldaps://backup.network:22389/</A>
++
++ ldap-server [required if ldap-uri is unset]
++ the host name of the LDAP server
++ ldap-port [optional] [default: 389]
++ the port of the LDAP server
++ ldap-base [required]
++ the base DN where the search will be performed
++ ldap-binddn [optional] [default: empty]
++ the DN used to bind
++ ldap-bindpw [optional] [default: empty]
++ the password used to bind
++ ldap-starttls [optional] [default: no]
++ use &quot;yes&quot; or &quot;no&quot; to enable or disable the use of the STARTTLS
++ LDAP extension
++ ldap-filterformat [optional]
++ [default: (&amp;(objectClass=inetOrgPerson)(uid=$username))]
++ RFC-2254 filter string used in the search of the user entry.
++ Note that this is a python template string and will have the
++ user name as parameter. For example:
++
++ ldap-filterformat = (&amp;(objectClass=inetOrgPerson)(uid=$username))
++
++ Will result in the search filter:
++
++ (&amp;(objectClass=inetOrgPerson)(uid=john))
++
++ ldap-resultformat [optional] [default: $cn &lt;$mail&gt;]
++ This is a python template string. This string will be
++ formatted using one dict object containing the fields
++ returned in the LDAP search, for example:
++
++ &gt;&gt;&gt; format = Template(&quot;$cn &lt;$mail&gt;&quot;)
++ &gt;&gt;&gt; d = search(basedn, filter)
++ &gt;&gt;&gt; d
++ {&quot;cn&quot;: &quot;John Doe&quot;, &quot;mail&quot;: &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">john at mandriva.org</A>&quot;,
++ &quot;uidNumber&quot;: &quot;1290&quot;, &quot;loginShell&quot;: &quot;/bin/bash&quot;,
++ ... many other attributes ... }
++ &gt;&gt;&gt; value = format.substitute(d)
++ &gt;&gt;&gt; print value
++ John Doe &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">john at mandriva.org</A>&gt;
++
++ Note that only the first value of the attributes will be
++ used.
++
++When the searched option is not found, it will try in repsys.conf. All
++the values found. (including from repsys.conf) will be cached between
++each configuration access.
++
++This plugin requires the package python-ldap.
++
++For more information, look <A HREF="http://qa.mandriva.com/show_bug.cgi?id=30549">http://qa.mandriva.com/show_bug.cgi?id=30549</A>
++&quot;&quot;&quot;
++from RepSys import Error, config
++
++import string
++
++users_cache = {}
++
++class LDAPError(Error):
++ def __init__(self, ldaperr):
++ self.ldaperr = ldaperr
++ name = ldaperr.__class__.__name__
++ desc = ldaperr.message[&quot;desc&quot;]
++ self.message = &quot;LDAP error %s: %s&quot; % (name, desc)
++ self.args = self.message,
++
++def strip_entry(entry):
++ &quot;Leave only the first value in all keys in the entry&quot;
++ new = dict((key, value[0]) for key, value in entry.iteritems())
++ return new
++
++def interpolate(optname, format, data):
++ tmpl = string.Template(format)
++ try:
++ return tmpl.substitute(data)
++ except KeyError, e:
++ raise Error, &quot;the key %s was not found in LDAP search, &quot; \
++ &quot;check your %s configuration&quot; % (e, optname)
++ except (TypeError, ValueError), e:
++ raise Error, &quot;LDAP response formatting error: %s. Check &quot; \
++ &quot;your %s configuration&quot; % (e, optname)
++
++def used_attributes(format):
++ class DummyDict:
++ def __init__(self):
++ self.found = []
++ def __getitem__(self, key):
++ self.found.append(key)
++ return key
++ dd = DummyDict()
++ t = string.Template(format)
++ t.safe_substitute(dd)
++ return dd.found
++
++def make_handler():
++ uri = config.get(&quot;global&quot;, &quot;ldap-uri&quot;)
++ if not uri:
++ server = config.get(&quot;global&quot;, &quot;ldap-server&quot;)
++ if not server:
++ # ldap support is not enabled if ldap-uri nor ldap-server are
++ # defined
++ def dummy_wrapper(section, option=None, default=None, walk=False):
++ return config.get(section, option, default, wrap=False)
++ return dummy_wrapper
++
++ try:
++ port = int(config.get(&quot;global&quot;, &quot;ldap-port&quot;, 389))
++ except ValueError:
++ raise Error, &quot;the option ldap-port requires an integer, please &quot;\
++ &quot;check your configuration files&quot;
++ uri = &quot;<A HREF="ldap://%s:%d">ldap://%s:%d</A>&quot; % (server, port)
++
++ basedn = config.get(&quot;global&quot;, &quot;ldap-base&quot;)
++ binddn = config.get(&quot;global&quot;, &quot;ldap-binddn&quot;)
++ bindpw = config.get(&quot;global&quot;, &quot;ldap-bindpw&quot;, &quot;&quot;)
++ filterformat = config.get(&quot;global&quot;, &quot;ldap-filterformat&quot;,
++ &quot;(&amp;(objectClass=inetOrgPerson)(uid=$username))&quot;, raw=1)
++ format = config.get(&quot;global&quot;, &quot;ldap-resultformat&quot;, &quot;$cn &lt;$mail&gt;&quot;, raw=1)
++
++ valid = {&quot;yes&quot;: True, &quot;no&quot;: False}
++ raw = config.get(&quot;global&quot;, &quot;ldap-starttls&quot;, &quot;no&quot;)
++ try:
++ starttls = valid[raw]
++ except KeyError:
++ raise Error, &quot;invalid value %r for ldap-starttls, use &quot;\
++ &quot;'yes' or 'no'&quot; % raw
++
++ try:
++ import ldap
++ except ImportError:
++ raise Error, &quot;LDAP support needs the python-ldap package &quot;\
++ &quot;to be installed&quot;
++ else:
++ from ldap.filter import escape_filter_chars
++
++ def users_wrapper(section, option=None, default=None, walk=False):
++ global users_cache
++ if walk:
++ raise Error, &quot;ldapusers plugin does not support user listing&quot;
++ assert option is not None, \
++ &quot;When not section walking, option is required&quot;
++
++ value = users_cache.get(option)
++ if value is not None:
++ return value
++
++ try:
++ l = ldap.initialize(uri)
++ if starttls:
++ l.start_tls_s()
++ if binddn:
++ l.bind(binddn, bindpw)
++ except ldap.LDAPError, e:
++ raise LDAPError(e)
++ try:
++ data = {&quot;username&quot;: escape_filter_chars(option)}
++ filter = interpolate(&quot;ldap-filterformat&quot;, filterformat, data)
++ attrs = used_attributes(format)
++ try:
++ found = l.search_s(basedn, ldap.SCOPE_SUBTREE, filter,
++ attrlist=attrs)
++ except ldap.LDAPError, e:
++ raise LDAPError(e)
++ if found:
++ dn, entry = found[0]
++ entry = strip_entry(entry)
++ value = interpolate(&quot;ldap-resultformat&quot;, format, entry)
++ else:
++ # issue a warning?
++ value = config.get(section, option, default, wrap=False)
++ users_cache[option] = value
++ return value
++ finally:
++ l.unbind_s()
++
++ return users_wrapper
++
++config.wrap(&quot;users&quot;, handler=make_handler())
+
+Added: build_system/repsys/trunk/RepSys/plugins/sample.py.txt
+===================================================================
+--- build_system/repsys/trunk/RepSys/plugins/sample.py.txt (rev 0)
++++ build_system/repsys/trunk/RepSys/plugins/sample.py.txt 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,14 @@
++# Sample repsys plugin. In order to test it, rename to sample.py
++# vim:ft=python
++from RepSys import config
++
++def users_wrapper(section, option=None, default=None, walk=False):
++ d = {&quot;foolano&quot;: &quot;Foolano De Tal &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">foolano at bla.com</A>&gt;&quot;,
++ &quot;ceeclano&quot;: &quot;Ceeclano Algumacoisa &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">ceeclano at bli.com</A>&gt;&quot;,
++ &quot;beltrano&quot;: &quot;Beltrano Bla &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">beltrano at mail.ru</A>&gt;&quot;}
++ if walk:
++ return d.items()
++
++ return d.get(option, default)
++
++config.wrap(&quot;users&quot;, handler=users_wrapper)
+
+
+Property changes on: build_system/repsys/trunk/RepSys/plugins/sample.py.txt
+___________________________________________________________________
+Added: svn:eol-style
+ + native
+
+Added: build_system/repsys/trunk/RepSys/rpmutil.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/rpmutil.py (rev 0)
++++ build_system/repsys/trunk/RepSys/rpmutil.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,759 @@
++#!/usr/bin/python
++from RepSys import Error, config
++from RepSys import mirror, layout, log, binrepo
++from RepSys.svn import SVN
++from RepSys.simplerpm import SRPM
++from RepSys.util import execcmd
++from RepSys.command import default_parent
++import rpm
++import urlparse
++import tempfile
++import shutil
++import string
++import glob
++import sys
++import os
++
++def get_spec(pkgdirurl, targetdir=&quot;.&quot;, submit=False):
++ svn = SVN()
++ tmpdir = tempfile.mktemp()
++ try:
++ geturl = layout.checkout_url(pkgdirurl, append_path=&quot;SPECS&quot;)
++ mirror.info(geturl)
++ svn.export(&quot;'%s'&quot; % geturl, tmpdir)
++ speclist = glob.glob(os.path.join(tmpdir, &quot;*.spec&quot;))
++ if not speclist:
++ raise Error, &quot;no spec files found&quot;
++ spec = speclist[0]
++ shutil.copy(spec, targetdir)
++ name = os.path.basename(spec)
++ path = os.path.join(targetdir, name)
++ print &quot;Wrote %s&quot; % (name)
++ finally:
++ if os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++
++def rpm_macros_defs(macros):
++ defs = (&quot;--define \&quot;%s %s\&quot;&quot; % macro for macro in macros)
++ args = &quot; &quot;.join(defs)
++ return args
++
++#FIXME move it to another module
++def rev_touched_url(url, rev):
++ svn = SVN()
++ info = svn.info2(url)
++ if info is None:
++ raise Error, &quot;can't fetch svn info about the URL: %s&quot; % url
++ root = info[&quot;Repository Root&quot;]
++ urlpath = url[len(root):]
++ touched = False
++ entries = svn.log(root, start=rev, limit=1)
++ entry = entries[0]
++ for change in entry.changed:
++ path = change.get(&quot;path&quot;)
++ if path and path.startswith(urlpath):
++ touched = True
++ return touched
++
++def get_srpm(pkgdirurl,
++ mode = &quot;current&quot;,
++ targetdirs = None,
++ version = None,
++ release = None,
++ revision = None,
++ packager = &quot;&quot;,
++ revname = 0,
++ svnlog = 0,
++ scripts = [],
++ submit = False,
++ template = None,
++ macros = [],
++ verbose = 0,
++ strict = False,
++ use_binrepo = False,
++ binrepo_check = True):
++ svn = SVN()
++ tmpdir = tempfile.mktemp()
++ topdir = &quot;--define '_topdir %s'&quot; % tmpdir
++ builddir = &quot;--define '_builddir %s/%s'&quot; % (tmpdir, &quot;BUILD&quot;)
++ rpmdir = &quot;--define '_rpmdir %s/%s'&quot; % (tmpdir, &quot;RPMS&quot;)
++ sourcedir = &quot;--define '_sourcedir %s/%s'&quot; % (tmpdir, &quot;SOURCES&quot;)
++ specdir = &quot;--define '_specdir %s/%s'&quot; % (tmpdir, &quot;SPECS&quot;)
++ srcrpmdir = &quot;--define '_srcrpmdir %s/%s'&quot; % (tmpdir, &quot;SRPMS&quot;)
++ patchdir = &quot;--define '_patchdir %s/%s'&quot; % (tmpdir, &quot;SOURCES&quot;)
++
++ try:
++ if mode == &quot;version&quot;:
++ geturl = layout.checkout_url(pkgdirurl, version=version,
++ release=release)
++ elif mode == &quot;pristine&quot;:
++ geturl = layout.checkout_url(pkgdirurl, pristine=True)
++ elif mode == &quot;current&quot; or mode == &quot;revision&quot;:
++ #FIXME we should handle revisions specified using @REV
++ geturl = layout.checkout_url(pkgdirurl)
++ else:
++ raise Error, &quot;unsupported get_srpm mode: %s&quot; % mode
++ strict = strict or config.getbool(&quot;submit&quot;, &quot;strict-revision&quot;, False)
++ if strict and not rev_touched_url(geturl, revision):
++ #FIXME would be nice to have the revision number even when
++ # revision is None
++ raise Error, &quot;the revision %s does not change anything &quot;\
++ &quot;inside %s&quot; % (revision or &quot;HEAD&quot;, geturl)
++ mirror.info(geturl)
++ svn.export(geturl, tmpdir, rev=revision)
++ if use_binrepo:
++ binrepo_check = (binrepo_check or
++ config.getbool(&quot;binrepo&quot;, &quot;getsrpm-check&quot;, False))
++ download_binaries(tmpdir, geturl, revision=revision,
++ export=True, check=binrepo_check)
++ srpmsdir = os.path.join(tmpdir, &quot;SRPMS&quot;)
++ os.mkdir(srpmsdir)
++ specsdir = os.path.join(tmpdir, &quot;SPECS&quot;)
++ speclist = glob.glob(os.path.join(specsdir, &quot;*.spec&quot;))
++ if config.getbool(&quot;srpm&quot;, &quot;run-prep&quot;, False):
++ makefile = os.path.join(tmpdir, &quot;Makefile&quot;)
++ if os.path.exists(makefile):
++ execcmd(&quot;make&quot;, &quot;-C&quot;, tmpdir, &quot;srpm-prep&quot;)
++ if not speclist:
++ raise Error, &quot;no spec files found&quot;
++ spec = speclist[0]
++ if svnlog:
++ submit = not not revision
++ log.specfile_svn2rpm(pkgdirurl, spec, revision, submit=submit,
++ template=template, macros=macros, exported=tmpdir)
++ for script in scripts:
++ #FIXME revision can be &quot;None&quot;
++ status, output = execcmd(script, tmpdir, spec, str(revision),
++ noerror=1)
++ if status != 0:
++ raise Error, &quot;script %s failed&quot; % script
++ if packager:
++ packager = &quot; --define 'packager %s'&quot; % packager
++
++ defs = rpm_macros_defs(macros)
++ sourcecmd = config.get(&quot;helper&quot;, &quot;rpmbuild&quot;, &quot;rpmbuild&quot;)
++ execcmd(&quot;%s -bs --nodeps %s %s %s %s %s %s %s %s %s %s&quot; %
++ (sourcecmd, topdir, builddir, rpmdir, sourcedir, specdir,
++ srcrpmdir, patchdir, packager, spec, defs))
++
++ # copy the generated SRPMs to their target locations
++ targetsrpms = []
++ urlrev = None
++ if revname:
++ urlrev = revision or layout.get_url_revision(geturl)
++ if not targetdirs:
++ targetdirs = (&quot;.&quot;,)
++ srpms = glob.glob(os.path.join(srpmsdir, &quot;*.src.rpm&quot;))
++ if not srpms:
++ # something fishy happened
++ raise Error, &quot;no SRPMS were found at %s&quot; % srpmsdir
++ for srpm in srpms:
++ name = os.path.basename(srpm)
++ if revname:
++ name = &quot;@%s:%s&quot; % (urlrev, name)
++ for targetdir in targetdirs:
++ newpath = os.path.join(targetdir, name)
++ targetsrpms.append(newpath)
++ if os.path.exists(newpath):
++ # should we warn?
++ os.unlink(newpath)
++ shutil.copy(srpm, newpath)
++ if verbose:
++ sys.stderr.write(&quot;Wrote: %s\n&quot; % newpath)
++ return targetsrpms
++ finally:
++ if os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++
++def patch_spec(pkgdirurl, patchfile, log=&quot;&quot;):
++ #FIXME use get_spec
++ svn = SVN()
++ tmpdir = tempfile.mktemp()
++ try:
++ geturl = layout.checkout_url(pkgdirurl, append_path=&quot;SPECS&quot;)
++ svn.checkout(geturl, tmpdir)
++ speclist = glob.glob(os.path.join(tmpdir, &quot;*.spec&quot;))
++ if not speclist:
++ raise Error, &quot;no spec files found&quot;
++ spec = speclist[0]
++ status, output = execcmd(&quot;patch&quot;, spec, patchfile)
++ if status != 0:
++ raise Error, &quot;can't apply patch:\n%s\n&quot; % output
++ else:
++ svn.commit(tmpdir, log=&quot;&quot;)
++ finally:
++ if os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++
++def put_srpm(srpmfile, markrelease=False, striplog=True, branch=None,
++ baseurl=None, baseold=None, logmsg=None, rename=True):
++ svn = SVN()
++ srpm = SRPM(srpmfile)
++ tmpdir = tempfile.mktemp()
++ if baseurl:
++ pkgurl = mirror._joinurl(baseurl, srpm.name)
++ else:
++ pkgurl = layout.package_url(srpm.name, distro=branch,
++ mirrored=False)
++ print &quot;Importing package to %s&quot; % pkgurl
++ try:
++ if srpm.epoch:
++ version = &quot;%s:%s&quot; % (srpm.epoch, srpm.version)
++ else:
++ version = srpm.version
++ versionurl = &quot;/&quot;.join([pkgurl, &quot;releases&quot;, version])
++ releaseurl = &quot;/&quot;.join([versionurl, srpm.release])
++ currenturl = &quot;/&quot;.join([pkgurl, &quot;current&quot;])
++ currentdir = os.path.join(tmpdir, &quot;current&quot;)
++ #FIXME when pre-commit hook fails, there's no clear way to know
++ # what happened
++ ret = svn.mkdir(pkgurl, noerror=1, log=&quot;Created package directory&quot;)
++ if ret or not svn.ls(currenturl, noerror=1):
++ svn.checkout(pkgurl, tmpdir)
++ svn.mkdir(os.path.join(tmpdir, &quot;releases&quot;))
++ svn.mkdir(currentdir)
++ svn.mkdir(os.path.join(currentdir, &quot;SPECS&quot;))
++ svn.mkdir(os.path.join(currentdir, &quot;SOURCES&quot;))
++ #svn.commit(tmpdir,log=&quot;Created package structure.&quot;)
++ version_exists = 1
++ else:
++ if svn.ls(releaseurl, noerror=1):
++ raise Error, &quot;release already exists&quot;
++ svn.checkout(&quot;/&quot;.join([pkgurl, &quot;current&quot;]), tmpdir)
++ svn.mkdir(versionurl, noerror=1,
++ log=&quot;Created directory for version %s.&quot; % version)
++ currentdir = tmpdir
++
++ specsdir = os.path.join(currentdir, &quot;SPECS&quot;)
++ sourcesdir = os.path.join(currentdir, &quot;SOURCES&quot;)
++
++ unpackdir = tempfile.mktemp()
++ os.mkdir(unpackdir)
++ try:
++ srpm.unpack(unpackdir)
++
++ uspecsdir = os.path.join(unpackdir, &quot;SPECS&quot;)
++ usourcesdir = os.path.join(unpackdir, &quot;SOURCES&quot;)
++
++ uspecsentries = os.listdir(uspecsdir)
++ usourcesentries = os.listdir(usourcesdir)
++ specsentries = os.listdir(specsdir)
++ sourcesentries = os.listdir(sourcesdir)
++
++ # Remove old entries
++ for entry in [x for x in specsentries
++ if x not in uspecsentries]:
++ if entry == &quot;.svn&quot;:
++ continue
++ entrypath = os.path.join(specsdir, entry)
++ os.unlink(entrypath)
++ svn.remove(entrypath)
++ for entry in [x for x in sourcesentries
++ if x not in usourcesentries]:
++ if entry == &quot;.svn&quot;:
++ continue
++ entrypath = os.path.join(sourcesdir, entry)
++ os.unlink(entrypath)
++ svn.remove(entrypath)
++
++ # Copy all files
++ execcmd(&quot;cp -rf&quot;, uspecsdir, currentdir)
++ execcmd(&quot;cp -rf&quot;, usourcesdir, currentdir)
++
++ # Add new entries
++ for entry in [x for x in uspecsentries
++ if x not in specsentries]:
++ entrypath = os.path.join(specsdir, entry)
++ svn.add(entrypath)
++ for entry in [x for x in usourcesentries
++ if x not in sourcesentries]:
++ entrypath = os.path.join(sourcesdir, entry)
++ svn.add(entrypath)
++ finally:
++ if os.path.isdir(unpackdir):
++ shutil.rmtree(unpackdir)
++
++ specs = glob.glob(os.path.join(specsdir, &quot;*.spec&quot;))
++ if not specs:
++ raise Error, &quot;no spec file found on %s&quot; % specsdir
++ if len(specs) &gt; 1:
++ raise Error, &quot;more than one spec file found on %s&quot; % specsdir
++ specpath = specs[0]
++ if rename:
++ specfile = os.path.basename(specpath)
++ specname = specfile[:-len(&quot;.spec&quot;)]
++ if specname != srpm.name:
++ newname = srpm.name + &quot;.spec&quot;
++ newpath = os.path.join(specsdir, newname)
++ sys.stderr.write(&quot;warning: renaming spec file to '%s' &quot;
++ &quot;(use -n to disable it)\n&quot; % (newname))
++ os.rename(specpath, newpath)
++ try:
++ svn.remove(specpath)
++ except Error:
++ # file not tracked
++ svn.revert(specpath)
++ svn.add(newpath)
++ specpath = newpath
++
++ if striplog:
++ specpath = specpath
++ fspec = open(specpath)
++ spec, chlog = log.split_spec_changelog(fspec)
++ fspec.close()
++ fspec = open(specpath, &quot;w&quot;)
++ fspec.writelines(spec)
++ fspec.close()
++ chlog.seek(0, os.SEEK_END)
++ if chlog.tell() != 0:
++ chlog.seek(0)
++ #FIXME move it to layout.py
++ oldurl = baseold or config.get(&quot;log&quot;, &quot;oldurl&quot;)
++ pkgoldurl = mirror._joinurl(oldurl, srpm.name)
++ svn.mkdir(pkgoldurl, noerror=1,
++ log=&quot;created old log directory for %s&quot; % srpm.name)
++ logtmp = tempfile.mktemp()
++ try:
++ svn.checkout(pkgoldurl, logtmp)
++ miscpath = os.path.join(logtmp, &quot;log&quot;)
++ fmisc = open(miscpath, &quot;w+&quot;)
++ fmisc.writelines(chlog)
++ fmisc.close()
++ svn.add(miscpath)
++ svn.commit(logtmp,
++ log=&quot;imported old log for %s&quot; % srpm.name)
++ finally:
++ if os.path.isdir(logtmp):
++ shutil.rmtree(logtmp)
++ binrepo.import_binaries(currentdir, srpm.name)
++ svn.commit(tmpdir,
++ log=logmsg or (&quot;imported package %s&quot; % srpm.name))
++ finally:
++ if os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++
++ # Do revision and pristine tag copies
++ pristineurl = layout.checkout_url(pkgurl, pristine=True)
++ svn.remove(pristineurl, noerror=1,
++ log=&quot;Removing previous pristine/ directory.&quot;)
++ currenturl = layout.checkout_url(pkgurl)
++ svn.copy(currenturl, pristineurl,
++ log=&quot;Copying release %s-%s to pristine/ directory.&quot; %
++ (version, srpm.release))
++ if markrelease:
++ svn.copy(currenturl, releaseurl,
++ log=&quot;Copying release %s-%s to releases/ directory.&quot; %
++ (version, srpm.release))
++
++def create_package(pkgdirurl, log=&quot;&quot;, verbose=0):
++ svn = SVN()
++ tmpdir = tempfile.mktemp()
++ try:
++ basename = layout.package_name(pkgdirurl)
++ if verbose:
++ print &quot;Creating package directory...&quot;,
++ sys.stdout.flush()
++ ret = svn.mkdir(pkgdirurl,
++ log=&quot;Created package directory for '%s'.&quot; % basename)
++ if verbose:
++ print &quot;done&quot;
++ print &quot;Checking it out...&quot;,
++ svn.checkout(pkgdirurl, tmpdir)
++ if verbose:
++ print &quot;done&quot;
++ print &quot;Creating package structure...&quot;,
++ svn.mkdir(os.path.join(tmpdir, &quot;current&quot;))
++ svn.mkdir(os.path.join(tmpdir, &quot;current&quot;, &quot;SPECS&quot;))
++ svn.mkdir(os.path.join(tmpdir, &quot;current&quot;, &quot;SOURCES&quot;))
++ if verbose:
++ print &quot;done&quot;
++ print &quot;Committing...&quot;,
++ svn.commit(tmpdir,
++ log=&quot;Created package structure for '%s'.&quot; % basename)
++ print &quot;done&quot;
++ finally:
++ if os.path.isdir(tmpdir):
++ shutil.rmtree(tmpdir)
++
++
++def create_markrelease_log(version, release, revision):
++ log = &quot;&quot;&quot;%%repsys markrelease
++version: %s
++release: %s
++revision: %s
++
++%s&quot;&quot;&quot; % (version, release, revision,
++ (&quot;Copying %s-%s to releases/ directory.&quot; % (version, release)))
++ return log
++
++def mark_release(pkgdirurl, version, release, revision):
++ svn = SVN()
++ releasesurl = layout.checkout_url(pkgdirurl, releases=True)
++ versionurl = &quot;/&quot;.join([releasesurl, version])
++ releaseurl = &quot;/&quot;.join([versionurl, release])
++ currenturl = layout.checkout_url(pkgdirurl)
++ binrepo.markrelease(currenturl, releasesurl, version, release, revision)
++ if svn.ls(releaseurl, noerror=1):
++ raise Error, &quot;release already exists&quot;
++ svn.mkdir(releasesurl, noerror=1,
++ log=&quot;Created releases directory.&quot;)
++ svn.mkdir(versionurl, noerror=1,
++ log=&quot;Created directory for version %s.&quot; % version)
++ pristineurl = layout.checkout_url(pkgdirurl, pristine=True)
++ svn.remove(pristineurl, noerror=1,
++ log=&quot;Removing previous pristine/ directory.&quot;)
++ svn.copy(currenturl, pristineurl,
++ log=&quot;Copying release %s-%s to pristine/ directory.&quot; %
++ (version, release))
++ markreleaselog = create_markrelease_log(version, release, revision)
++ svn.copy(currenturl, releaseurl, rev=revision,
++ log=markreleaselog)
++
++def check_changed(pkgdirurl, all=0, show=0, verbose=0):
++ svn = SVN()
++ if all:
++ baseurl = pkgdirurl
++ packages = []
++ if verbose:
++ print &quot;Getting list of packages...&quot;,
++ sys.stdout.flush()
++ packages = [x[:-1] for x in svn.ls(baseurl)]
++ if verbose:
++ print &quot;done&quot;
++ if not packages:
++ raise Error, &quot;couldn't get list of packages&quot;
++ else:
++ baseurl, basename = os.path.split(pkgdirurl)
++ packages = [basename]
++ clean = []
++ changed = []
++ nopristine = []
++ nocurrent = []
++ for package in packages:
++ pkgdirurl = os.path.join(baseurl, package)
++ current = layout.checkout_url(pkgdirurl)
++ pristine = layout.checkout_url(pkgdirurl, pristine=True)
++ if verbose:
++ print &quot;Checking package %s...&quot; % package,
++ sys.stdout.flush()
++ if not svn.ls(current, noerror=1):
++ if verbose:
++ print &quot;NO CURRENT&quot;
++ nocurrent.append(package)
++ elif not svn.ls(pristine, noerror=1):
++ if verbose:
++ print &quot;NO PRISTINE&quot;
++ nopristine.append(package)
++ else:
++ diff = svn.diff(pristine, current)
++ if diff:
++ changed.append(package)
++ if verbose:
++ print &quot;CHANGED&quot;
++ if show:
++ print diff
++ else:
++ if verbose:
++ print &quot;clean&quot;
++ clean.append(package)
++ if verbose:
++ if not packages:
++ print &quot;No packages found!&quot;
++ elif all:
++ print &quot;Total clean packages: %s&quot; % len(clean)
++ print &quot;Total CHANGED packages: %d&quot; % len(changed)
++ print &quot;Total NO CURRENT packages: %s&quot; % len(nocurrent)
++ print &quot;Total NO PRISTINE packages: %s&quot; % len(nopristine)
++ return {&quot;clean&quot;: clean,
++ &quot;changed&quot;: changed,
++ &quot;nocurrent&quot;: nocurrent,
++ &quot;nopristine&quot;: nopristine}
++
++def checkout(pkgdirurl, path=None, revision=None, branch=None, distro=None,
++ spec=False, use_binrepo=False, binrepo_check=True, binrepo_link=True):
++ o_pkgdirurl = pkgdirurl
++ pkgdirurl = layout.package_url(o_pkgdirurl, distro=distro)
++ append = None
++ if spec:
++ append = &quot;SPECS&quot;
++ current = layout.checkout_url(pkgdirurl, branch=branch,
++ append_path=append)
++ if path is None:
++ path = layout.package_name(pkgdirurl)
++ mirror.info(current, write=True)
++ svn = SVN()
++ svn.checkout(current, path, rev=revision, show=1)
++ if use_binrepo:
++ download_binaries(path, revision=revision, symlinks=binrepo_link,
++ check=binrepo_check)
++
++def getpkgtopdir(basedir=None):
++ #FIXME this implementation doesn't work well with relative path names,
++ # which is something we need in order to have a friendlier output
++ if basedir is None:
++ basedir = os.path.curdir
++ while not ispkgtopdir(basedir):
++ if os.path.abspath(basedir) == &quot;/&quot;:
++ raise Error, &quot;can't find top package directories SOURCES and SPECS&quot;
++ basedir = os.path.join(basedir, os.path.pardir)
++ if basedir.startswith(&quot;./&quot;):
++ basedir = basedir[2:]
++ return basedir
++
++def ispkgtopdir(path=None):
++ if path is None:
++ path = os.getcwd()
++ names = os.listdir(path)
++ return (&quot;.svn&quot; in names and &quot;SPECS&quot; in names and &quot;SOURCES&quot; in names)
++
++def sync(dryrun=False, ci=False, download=False):
++ # TODO FIXME XXX fix it!
++ raise Error, &quot;sync is not expected to work these days&quot;
++ svn = SVN()
++ topdir = getpkgtopdir()
++ # run svn info because svn st does not complain when topdir is not an
++ # working copy
++ svn.info(topdir)
++ specsdir = os.path.join(topdir, &quot;SPECS/&quot;)
++ sourcesdir = os.path.join(topdir, &quot;SOURCES/&quot;)
++ for path in (specsdir, sourcesdir):
++ if not os.path.isdir(path):
++ raise Error, &quot;%s directory not found&quot; % path
++ specs = glob.glob(os.path.join(specsdir, &quot;*.spec&quot;))
++ if not specs:
++ raise Error, &quot;no .spec files found in %s&quot; % specsdir
++ specpath = specs[0] # FIXME better way?
++ try:
++ rpm.addMacro(&quot;_topdir&quot;, os.path.abspath(topdir))
++ spec = rpm.TransactionSet().parseSpec(specpath)
++ except rpm.error, e:
++ raise Error, &quot;could not load spec file: %s&quot; % e
++ sources = dict((os.path.basename(name), name)
++ for name, no, flags in spec.sources())
++ sourcesst = dict((os.path.basename(path), (path, st))
++ for st, path in svn.status(sourcesdir, noignore=True))
++ toadd_br = []
++ toadd_svn = []
++ toremove_svn = []
++ toremove_br = []
++ # add the spec file itself, in case of a new package
++ specstl = svn.status(specpath, noignore=True)
++ if specstl:
++ specst, _ = specstl[0]
++ if specst == &quot;?&quot;:
++ toadd_svn.append(specpath)
++ # add source files:
++ for source, url in sources.iteritems():
++ sourcepath = os.path.join(sourcesdir, source)
++ if sourcesst.get(source):
++ if not os.path.islink(sourcepath):
++ if not binrepo.is_tracked(sourcepath):
++ if binrepo.is_binary(sourcepath):
++ toadd_br.append(sourcepath)
++ else:
++ toadd_svn.append(sourcepath)
++ else:
++ sys.stderr.write(&quot;warning: %s not found\n&quot; % sourcepath)
++ elif download and not os.path.isfile(sourcepath):
++ print &quot;%s not found, downloading from %s&quot; % (sourcepath, url)
++ fmt = config.get(&quot;global&quot;, &quot;download-command&quot;,
++ &quot;wget -c -O '$dest' $url&quot;)
++ context = {&quot;dest&quot;: sourcepath, &quot;url&quot;: url}
++ try:
++ cmd = string.Template(fmt).substitute(context)
++ except KeyError, e:
++ raise Error, &quot;invalid variable %r in download-command &quot;\
++ &quot;configuration option&quot; % e
++ execcmd(cmd, show=True)
++ if os.path.isfile(sourcepath):
++ if binrepo.is_binary(sourcepath):
++ toadd_br.append(sourcepath)
++ else:
++ toadd_svn.append(sourcepath)
++ else:
++ raise Error, &quot;file not found: %s&quot; % sourcepath
++ # rm entries not found in sources and still in svn
++ found = os.listdir(sourcesdir)
++ for entry in found:
++ if entry == &quot;.svn&quot; or entry == &quot;sources&quot;:
++ continue
++ status = sourcesst.get(entry)
++ path = os.path.join(sourcesdir, entry)
++ if entry not in sources:
++ if status is None: # file is tracked by svn
++ toremove_svn.append(path)
++ elif binrepo.is_tracked(path):
++ toremove_br.append(path)
++ for path in toremove_svn:
++ print &quot;D\t%s&quot; % path
++ if not dryrun:
++ svn.remove(path, local=True)
++ for path in toremove_br:
++ print &quot;DB\t%s&quot; % path
++ if not dryrun:
++ binrepo.delete_pending(path)
++ for path in toadd_svn:
++ print &quot;A\t%s&quot; % path
++ if not dryrun:
++ svn.add(path, local=True)
++ for path in toadd_br:
++ print &quot;AB\t%s&quot; % path
++ if not dryrun:
++ binrepo.upload_pending(path)
++ if commit:
++ commit(topdir)
++
++def commit(target=&quot;.&quot;, message=None, logfile=None):
++ topdir = getpkgtopdir(target)
++ sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
++ binrepo.commit(sourcesdir) #TODO make it optional
++ svn = SVN()
++ status = svn.status(target, quiet=True)
++ if not status:
++ print &quot;nothing to commit&quot;
++ return
++ info = svn.info2(target)
++ url = info.get(&quot;URL&quot;)
++ if url is None:
++ raise Error, &quot;working copy URL not provided by svn info&quot;
++ mirrored = mirror.using_on(url)
++ if mirrored:
++ newurl = mirror.switchto_parent(svn, url, target)
++ print &quot;relocated to&quot;, newurl
++ # we can't use the svn object here because svn --non-interactive option
++ # hides VISUAL
++ opts = []
++ if message is not None:
++ opts.append(&quot;-m \&quot;%s\&quot;&quot; % message)
++ if logfile is not None:
++ opts.append(&quot;-F \&quot;%s\&quot;&quot; % logfile)
++ mopts = &quot; &quot;.join(opts)
++ os.system(&quot;svn ci %s %s&quot; % (mopts, target))
++ if mirrored:
++ print &quot;use \&quot;repsys switch\&quot; in order to switch back to mirror &quot;\
++ &quot;later&quot;
++
++def spec_sources(topdir):
++ specs = glob.glob(os.path.join(topdir, &quot;SPECS/*.spec&quot;))
++ spec_path = specs[0] # FIXME use svn info to ensure which one
++ ts = rpm.ts()
++ spec = ts.parseSpec(spec_path)
++ sources = [name for name, x, y in spec.sources()]
++ return sources
++
++def download_binaries(target, pkgdirurl=None, export=False, revision=None,
++ symlinks=True, check=False):
++ refurl = pkgdirurl
++ if refurl is None:
++ refurl = binrepo.svn_root(target)
++ if binrepo.enabled(refurl):
++ binrepo.download(target, pkgdirurl, export=export,
++ revision=revision, symlinks=symlinks, check=check)
++
++def update(target=None):
++ svn = SVN()
++ info = None
++ svn_target = None
++ br_target = None
++ if target:
++ svn_target = target
++ else:
++ top = getpkgtopdir()
++ svn_target = top
++ br_target = top
++ if svn_target:
++ svn.update(svn_target, show=True)
++ if br_target:
++ info = svn.info2(svn_target)
++ if not br_target and not svn_target:
++ raise Error, &quot;target not in SVN nor in binaries &quot;\
++ &quot;repository: %s&quot; % target
++ url = info[&quot;URL&quot;]
++ download_binaries(br_target, url)
++
++def upload(paths):
++ for path in paths:
++ binrepo.upload(path)
++
++def binrepo_delete(paths, commit=False):
++ #TODO handle files tracked by svn
++ refurl = binrepo.svn_root(paths[0])
++ if not binrepo.enabled(refurl):
++ raise Error, &quot;binary repository is not enabled for %s&quot; % refurl
++ added, deleted = binrepo.remove(paths)
++ if commit:
++ svn = SVN()
++ spath = binrepo.sources_path(paths[0])
++ log = _sources_log(added, deleted)
++ svn.commit(spath, log=log)
++
++def switch(mirrorurl=None):
++ svn = SVN()
++ topdir = getpkgtopdir()
++ info = svn.info2(topdir)
++ wcurl = info.get(&quot;URL&quot;)
++ if wcurl is None:
++ raise Error, &quot;working copy URL not provided by svn info&quot;
++ newurl = mirror.autoswitch(svn, topdir, wcurl, mirrorurl)
++ print &quot;switched to&quot;, newurl
++
++def get_submit_info(path):
++ path = os.path.abspath(path)
++
++ # First, look for SPECS and SOURCES directories.
++ found = False
++ while path != &quot;/&quot;:
++ if os.path.isdir(path):
++ specsdir = os.path.join(path, &quot;SPECS&quot;)
++ sourcesdir = os.path.join(path, &quot;SOURCES&quot;)
++ if os.path.isdir(specsdir) and os.path.isdir(sourcesdir):
++ found = True
++ break
++ path = os.path.dirname(path)
++ if not found:
++ raise Error, &quot;SPECS and/or SOURCES directories not found&quot;
++
++ # Then, check if this is really a subversion directory.
++ if not os.path.isdir(os.path.join(path, &quot;.svn&quot;)):
++ raise Error, &quot;subversion directory not found&quot;
++
++ svn = SVN()
++
++ # Now, extract the package name.
++ info = svn.info2(path)
++ url = info.get(&quot;URL&quot;)
++ if url is None:
++ raise Error, &quot;missing URL from svn info %s&quot; % path
++ toks = url.split(&quot;/&quot;)
++ if len(toks) &lt; 2 or toks[-1] != &quot;current&quot;:
++ raise Error, &quot;unexpected URL received from 'svn info'&quot;
++ name = toks[-2]
++ url = &quot;/&quot;.join(toks[:-1])
++
++ # Finally, guess revision.
++ max = -1
++ files = []
++ files.extend(glob.glob(&quot;%s/*&quot; % specsdir))
++ files.extend(glob.glob(&quot;%s/*&quot; % sourcesdir))
++ for file in files:
++ try:
++ info = svn.info2(file)
++ except Error:
++ # possibly not tracked
++ continue
++ if info is None:
++ continue
++ rawrev = info.get(&quot;Last Changed Rev&quot;)
++ if rawrev:
++ rev = int(rawrev)
++ if rev &gt; max:
++ max = rev
++ if max == -1:
++ raise Error, &quot;revision tag not found in 'svn info' output&quot;
++
++ if mirror.using_on(url):
++ url = mirror.switchto_parent_url(url)
++
++ return name, url, max
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/simplerpm.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/simplerpm.py (rev 0)
++++ build_system/repsys/trunk/RepSys/simplerpm.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,19 @@
++#!/usr/bin/python
++from RepSys.util import execcmd
++
++class SRPM:
++ def __init__(self, filename):
++ self.filename = filename
++ self._getinfo()
++
++ def _getinfo(self):
++ cmdstr = &quot;rpm -qp --qf '%%{name} %%{epoch} %%{release} %%{version}' %s&quot;
++ status, output = execcmd(cmdstr % self.filename)
++ self.name, self.epoch, self.release, self.version = output.split()
++ if self.epoch == &quot;(none)&quot;:
++ self.epoch = None
++
++ def unpack(self, topdir):
++ execcmd(&quot;rpm -i --define '_topdir %s' %s&quot; % (topdir, self.filename))
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/svn.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/svn.py (rev 0)
++++ build_system/repsys/trunk/RepSys/svn.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,430 @@
++from RepSys import Error, SilentError, config
++from RepSys.util import execcmd, get_auth
++import sys
++import os
++import re
++import time
++
++__all__ = [&quot;SVN&quot;, &quot;SVNLook&quot;, &quot;SVNLogEntry&quot;]
++
++class SVNLogEntry:
++ def __init__(self, revision, author, date):
++ self.revision = revision
++ self.author = author
++ self.date = date
++ self.changed = []
++ self.lines = []
++
++ def __cmp__(self, other):
++ return cmp(self.date, other.date)
++
++class SVN:
++ def _execsvn(self, *args, **kwargs):
++ localcmds = (&quot;add&quot;, &quot;revert&quot;, &quot;cleanup&quot;)
++ if not kwargs.get(&quot;show&quot;) and args[0] not in localcmds:
++ args = list(args)
++ args.append(&quot;--non-interactive&quot;)
++ else:
++ kwargs[&quot;geterr&quot;] = True
++ kwargs[&quot;cleanerr&quot;] = True
++ if kwargs.get(&quot;xml&quot;):
++ args.append(&quot;--xml&quot;)
++ self._set_env()
++ svn_command = config.get(&quot;global&quot;, &quot;svn-command&quot;, &quot;svn&quot;)
++ cmdstr = svn_command + &quot; &quot; + &quot; &quot;.join(args)
++ try:
++ return execcmd(cmdstr, **kwargs)
++ except Error, e:
++ msg = None
++ if e.args:
++ if &quot;Permission denied&quot; in e.args[0]:
++ msg = (&quot;It seems ssh-agent or ForwardAgent are not setup &quot;
++ &quot;or your username is wrong. See &quot;
++ &quot;<A HREF="http://wiki.mandriva.com/en/Development/Docs/Contributor_Tricks#SSH_configuration">http://wiki.mandriva.com/en/Development/Docs/Contributor_Tricks#SSH_configuration</A>&quot;
++ &quot; for more information.&quot;)
++ elif &quot;authorization failed&quot; in e.args[0]:
++ msg = (&quot;Note that repsys does not support any HTTP &quot;
++ &quot;authenticated access.&quot;)
++ if kwargs.get(&quot;show&quot;) and \
++ not config.getbool(&quot;global&quot;, &quot;verbose&quot;, 0):
++ # svn has already dumped error messages, we don't need to
++ # do it too
++ if msg:
++ sys.stderr.write(&quot;\n&quot;)
++ sys.stderr.write(msg)
++ sys.stderr.write(&quot;\n&quot;)
++ raise SilentError
++ elif msg:
++ raise Error, &quot;%s\n%s&quot; % (e, msg)
++ raise
++
++ def _set_env(self):
++ wrapper = &quot;repsys-ssh&quot;
++ repsys = config.get(&quot;global&quot;, &quot;repsys-cmd&quot;)
++ if repsys:
++ dir = os.path.dirname(repsys)
++ path = os.path.join(dir, wrapper)
++ if os.path.exists(path):
++ wrapper = path
++ defaults = {&quot;SVN_SSH&quot;: wrapper}
++ os.environ.update(defaults)
++ raw = config.get(&quot;global&quot;, &quot;svn-env&quot;)
++ if raw:
++ for line in raw.split(&quot;\n&quot;):
++ env = line.strip()
++ if not env:
++ continue
++ try:
++ name, value = env.split(&quot;=&quot;, 1)
++ except ValueError:
++ sys.stderr.write(&quot;invalid svn environment line: %r\n&quot; % env)
++ continue
++ os.environ[name] = value
++
++ def _execsvn_success(self, *args, **kwargs):
++ status, output = self._execsvn(*args, **kwargs)
++ return status == 0
++
++ def _add_log(self, cmd_args, received_kwargs, optional=0):
++ if (not optional or
++ received_kwargs.has_key(&quot;log&quot;) or
++ received_kwargs.has_key(&quot;logfile&quot;)):
++ ret = received_kwargs.get(&quot;log&quot;)
++ if ret is not None:
++ cmd_args.append(&quot;-m '%s'&quot; % ret)
++ ret = received_kwargs.get(&quot;logfile&quot;)
++ if ret is not None:
++ cmd_args.append(&quot;-F '%s'&quot; % ret)
++
++ def _add_revision(self, cmd_args, received_kwargs, optional=0):
++ if not optional or received_kwargs.has_key(&quot;rev&quot;):
++ ret = received_kwargs.get(&quot;rev&quot;)
++ if isinstance(ret, basestring):
++ if not ret.startswith(&quot;{&quot;): # if not a datespec
++ try:
++ ret = int(ret)
++ except ValueError:
++ raise Error, &quot;invalid revision provided&quot;
++ if ret:
++ cmd_args.append(&quot;-r '%s'&quot; % ret)
++
++ def add(self, path, **kwargs):
++ cmd = [&quot;add&quot;, path]
++ return self._execsvn_success(noauth=1, *cmd, **kwargs)
++
++ def copy(self, pathfrom, pathto, **kwargs):
++ cmd = [&quot;copy&quot;, pathfrom, pathto]
++ self._add_revision(cmd, kwargs, optional=1)
++ self._add_log(cmd, kwargs)
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def remove(self, path, force=0, **kwargs):
++ cmd = [&quot;remove&quot;, path]
++ self._add_log(cmd, kwargs)
++ if force:
++ cmd.append(&quot;--force&quot;)
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def mkdir(self, path, **kwargs):
++ cmd = [&quot;mkdir&quot;, path]
++ if kwargs.get(&quot;parents&quot;):
++ cmd.append(&quot;--parents&quot;)
++ self._add_log(cmd, kwargs)
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def _execsvn_commit(self, *cmd, **kwargs):
++ status, output = self._execsvn(*cmd, **kwargs)
++ match = re.search(&quot;Committed revision (?P&lt;rev&gt;\\d+)\\.$&quot;, output)
++ if match:
++ rawrev = match.group(&quot;rev&quot;)
++ return int(rawrev)
++
++ def commit(self, path, **kwargs):
++ cmd = [&quot;commit&quot;, path]
++ if kwargs.get(&quot;nonrecursive&quot;):
++ cmd.append(&quot;-N&quot;)
++ self._add_log(cmd, kwargs)
++ return self._execsvn_commit(*cmd, **kwargs)
++
++ def import_(self, path, url, **kwargs):
++ cmd = [&quot;import&quot;, &quot;'%s'&quot; % path, &quot;'%s'&quot; % url]
++ self._add_log(cmd, kwargs)
++ return self._execsvn_commit(*cmd, **kwargs)
++
++ def export(self, url, targetpath, **kwargs):
++ cmd = [&quot;export&quot;, &quot;'%s'&quot; % url, targetpath]
++ self._add_revision(cmd, kwargs, optional=1)
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def checkout(self, url, targetpath, **kwargs):
++ cmd = [&quot;checkout&quot;, &quot;'%s'&quot; % url, targetpath]
++ self._add_revision(cmd, kwargs, optional=1)
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def propget(self, propname, targets, **kwargs):
++ cmd = [&quot;propget&quot;, propname, targets]
++ if kwargs.get(&quot;revprop&quot;):
++ cmd.append(&quot;--revprop&quot;)
++ self._add_revision(cmd, kwargs)
++ status, output = self._execsvn(local=True, *cmd, **kwargs)
++ return output
++
++ def propset(self, propname, value, targets, **kwargs):
++ cmd = [&quot;propset&quot;, propname, &quot;'%s'&quot; % value, targets]
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def propedit(self, propname, target, **kwargs):
++ cmd = [&quot;propedit&quot;, propname, target]
++ if kwargs.get(&quot;rev&quot;):
++ cmd.append(&quot;--revprop&quot;)
++ self._add_revision(cmd, kwargs)
++ return self._execsvn_success(local=True, show=True, *cmd, **kwargs)
++
++ def revision(self, path, **kwargs):
++ cmd = [&quot;info&quot;, path]
++ status, output = self._execsvn(local=True, *cmd, **kwargs)
++ if status == 0:
++ for line in output.splitlines():
++ if line.startswith(&quot;Last Changed Rev: &quot;):
++ return int(line.split()[3])
++ return None
++
++ def info(self, path, **kwargs):
++ cmd = [&quot;info&quot;, path]
++ status, output = self._execsvn(local=True, noerror=True, *cmd, **kwargs)
++ if &quot;Not a versioned resource&quot; not in output:
++ return output.splitlines()
++ return None
++
++ def info2(self, *args, **kwargs):
++ lines = self.info(*args, **kwargs)
++ if lines is None:
++ return None
++ pairs = [[w.strip() for w in line.split(&quot;:&quot;, 1)] for line in lines]
++ info = dict(pairs)
++ return info
++
++ def ls(self, path, **kwargs):
++ cmd = [&quot;ls&quot;, path]
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return output.split()
++ return None
++
++ def status(self, path, **kwargs):
++ cmd = [&quot;status&quot;, path]
++ if kwargs.get(&quot;verbose&quot;):
++ cmd.append(&quot;-v&quot;)
++ if kwargs.get(&quot;noignore&quot;):
++ cmd.append(&quot;--no-ignore&quot;)
++ if kwargs.get(&quot;quiet&quot;):
++ cmd.append(&quot;--quiet&quot;)
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return [x.split() for x in output.splitlines()]
++ return None
++
++ def cleanup(self, path, **kwargs):
++ cmd = [&quot;cleanup&quot;, path]
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def revert(self, path, **kwargs):
++ cmd = [&quot;revert&quot;, path]
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return [x.split() for x in output.split()]
++ return None
++
++ def switch(self, url, oldurl=None, path=None, relocate=False, **kwargs):
++ cmd = [&quot;switch&quot;]
++ if relocate:
++ if oldurl is None:
++ raise Error, &quot;You must supply the old URL when &quot;\
++ &quot;relocating working copies&quot;
++ cmd.append(&quot;--relocate&quot;)
++ cmd.append(oldurl)
++ cmd.append(url)
++ if path is not None:
++ cmd.append(path)
++ return self._execsvn_success(*cmd, **kwargs)
++
++ def update(self, path, **kwargs):
++ cmd = [&quot;update&quot;, path]
++ self._add_revision(cmd, kwargs, optional=1)
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return [x.split() for x in output.split()]
++ return None
++
++ def merge(self, url1, url2=None, rev1=None, rev2=None, path=None,
++ **kwargs):
++ cmd = [&quot;merge&quot;]
++ if rev1 and rev2 and not url2:
++ cmd.append(&quot;-r&quot;)
++ cmd.append(&quot;%s:%s&quot; % (rev1, rev2))
++ cmd.append(url1)
++ else:
++ if not url2:
++ raise ValueError, \
++ &quot;url2 needed if two revisions are not provided&quot;
++ if rev1:
++ cmd.append(&quot;%s@%s&quot; % (url1, rev1))
++ else:
++ cmd.append(url1)
++ if rev2:
++ cmd.append(&quot;%s@%s&quot; % (url2, rev2))
++ else:
++ cmd.append(url2)
++ if path:
++ cmd.append(path)
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return [x.split() for x in output.split()]
++ return None
++
++ def diff(self, pathurl1, pathurl2=None, **kwargs):
++ cmd = [&quot;diff&quot;, pathurl1]
++ self._add_revision(cmd, kwargs, optional=1)
++ if pathurl2:
++ cmd.append(pathurl2)
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return output
++ return None
++
++ def cat(self, url, **kwargs):
++ cmd = [&quot;cat&quot;, url]
++ self._add_revision(cmd, kwargs, optional=1)
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status == 0:
++ return output
++ return None
++
++ def log(self, url, start=None, end=0, limit=None, **kwargs):
++ cmd = [&quot;log&quot;, &quot;-v&quot;, url]
++ if start is not None or end != 0:
++ if start is not None and type(start) is not type(0):
++ try:
++ start = int(start)
++ except (ValueError, TypeError):
++ raise Error, &quot;invalid log start revision provided&quot;
++ if type(end) is not type(0):
++ try:
++ end = int(end)
++ except (ValueError, TypeError):
++ raise Error, &quot;invalid log end revision provided&quot;
++ start = start or &quot;HEAD&quot;
++ cmd.append(&quot;-r %s:%s&quot; % (start, end))
++ if limit is not None:
++ try:
++ limit = int(limit)
++ except (ValueError, TypeError):
++ raise Error, &quot;invalid limit number provided&quot;
++ cmd.append(&quot;--limit %d&quot; % limit)
++ status, output = self._execsvn(*cmd, **kwargs)
++ if status != 0:
++ return None
++
++ revheader = re.compile(&quot;^r(?P&lt;revision&gt;[0-9]+) \| (?P&lt;author&gt;[^\|]+) \| (?P&lt;date&gt;[^\|]+) \| (?P&lt;lines&gt;[0-9]+) (?:line|lines)$&quot;)
++ changedpat = re.compile(r&quot;^\s+(?P&lt;action&gt;[^\s]+) (?P&lt;path&gt;[^\s]+)(?: \([^\s]+ (?P&lt;from_path&gt;[^:]+)(?:\:(?P&lt;from_rev&gt;[0-9]+))?\))?$&quot;)
++ logseparator = &quot;-&quot;*72
++ linesleft = 0
++ entry = None
++ log = []
++ appendchanged = 0
++ changedheader = 0
++ for line in output.splitlines():
++ line = line.rstrip()
++ if changedheader:
++ appendchanged = 1
++ changedheader = 0
++ elif appendchanged:
++ if not line:
++ appendchanged = 0
++ continue
++ m = changedpat.match(line)
++ if m:
++ changed = m.groupdict().copy()
++ from_rev = changed.get(&quot;from_rev&quot;)
++ if from_rev is not None:
++ try:
++ changed[&quot;from_rev&quot;] = int(from_rev)
++ except (ValueError, TypeError):
++ raise Error, &quot;invalid revision number in svn log&quot;
++ entry.changed.append(changed)
++ elif linesleft == 0:
++ if line != logseparator:
++ m = revheader.match(line)
++ if m:
++ linesleft = int(m.group(&quot;lines&quot;))
++ timestr = &quot; &quot;.join(m.group(&quot;date&quot;).split()[:2])
++ timetuple = time.strptime(timestr,
++ &quot;%Y-%m-%d %H:%M:%S&quot;)
++ entry = SVNLogEntry(int(m.group(&quot;revision&quot;)),
++ m.group(&quot;author&quot;), timetuple)
++ log.append(entry)
++ changedheader = 1
++ else:
++ entry.lines.append(line)
++ linesleft -= 1
++ log.sort()
++ log.reverse()
++ return log
++
++class SVNLook:
++ def __init__(self, repospath, txn=None, rev=None):
++ self.repospath = repospath
++ self.txn = txn
++ self.rev = rev
++
++ def _execsvnlook(self, cmd, *args, **kwargs):
++ execcmd_args = [&quot;svnlook&quot;, cmd, self.repospath]
++ self._add_txnrev(execcmd_args, kwargs)
++ execcmd_args += args
++ execcmd_kwargs = {}
++ keywords = [&quot;show&quot;, &quot;noerror&quot;]
++ for key in keywords:
++ if kwargs.has_key(key):
++ execcmd_kwargs[key] = kwargs[key]
++ return execcmd(*execcmd_args, **execcmd_kwargs)
++
++ def _add_txnrev(self, cmd_args, received_kwargs):
++ if received_kwargs.has_key(&quot;txn&quot;):
++ txn = received_kwargs.get(&quot;txn&quot;)
++ if txn is not None:
++ cmd_args += [&quot;-t&quot;, txn]
++ elif self.txn is not None:
++ cmd_args += [&quot;-t&quot;, self.txn]
++ if received_kwargs.has_key(&quot;rev&quot;):
++ rev = received_kwargs.get(&quot;rev&quot;)
++ if rev is not None:
++ cmd_args += [&quot;-r&quot;, rev]
++ elif self.rev is not None:
++ cmd_args += [&quot;-r&quot;, self.rev]
++
++ def changed(self, **kwargs):
++ status, output = self._execsvnlook(&quot;changed&quot;, **kwargs)
++ if status != 0:
++ return None
++ changes = []
++ for line in output.splitlines():
++ line = line.rstrip()
++ if not line:
++ continue
++ entry = [None, None, None]
++ changedata, changeprop, path = None, None, None
++ if line[0] != &quot;_&quot;:
++ changedata = line[0]
++ if line[1] != &quot; &quot;:
++ changeprop = line[1]
++ path = line[4:]
++ changes.append((changedata, changeprop, path))
++ return changes
++
++ def author(self, **kwargs):
++ status, output = self._execsvnlook(&quot;author&quot;, **kwargs)
++ if status != 0:
++ return None
++ return output.strip()
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/RepSys/util.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/util.py (rev 0)
++++ build_system/repsys/trunk/RepSys/util.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,141 @@
++#!/usr/bin/python
++
++from RepSys import Error, config
++
++import subprocess
++import getpass
++import sys
++import os
++import re
++import logging
++from cStringIO import StringIO
++#import commands
++
++log = logging.getLogger(&quot;repsys&quot;)
++
++# Our own version of commands' getstatusoutput(). We have a commands
++# module directory, so we can't import Python's standard module
++def commands_getstatusoutput(cmd):
++ &quot;&quot;&quot;Return (status, output) of executing cmd in a shell.&quot;&quot;&quot;
++ import os
++ pipe = os.popen('{ ' + cmd + '; } 2&gt;&amp;1', 'r')
++ text = pipe.read()
++ sts = pipe.close()
++ if sts is None: sts = 0
++ if text[-1:] == '\n': text = text[:-1]
++ return sts, text
++
++def execcmd(*cmd, **kwargs):
++ cmdstr = &quot; &quot;.join(cmd)
++ if kwargs.get(&quot;show&quot;):
++ if kwargs.get(&quot;geterr&quot;):
++ err = StringIO()
++ pipe = subprocess.Popen(cmdstr, shell=True,
++ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
++ of = pipe.stdout.fileno()
++ ef = pipe.stderr.fileno()
++ while True:
++ odata = os.read(of, 8192)
++ sys.stdout.write(odata)
++ edata = os.read(ef, 8192)
++ err.write(edata)
++ sys.stderr.write(edata)
++ status = pipe.poll()
++ if status is not None and not (odata and edata):
++ break
++ output = err.getvalue()
++ else:
++ status = os.system(cmdstr)
++ output = &quot;&quot;
++ else:
++ status, output = commands_getstatusoutput(
++ &quot;LANG=C LANGUAGE=C LC_ALL=C &quot;+cmdstr)
++ verbose = config.getbool(&quot;global&quot;, &quot;verbose&quot;, 0)
++ if status != 0 and not kwargs.get(&quot;noerror&quot;):
++ if kwargs.get(&quot;cleanerr&quot;) and not verbose:
++ raise Error, output
++ else:
++ raise Error, &quot;command failed: %s\n%s\n&quot; % (cmdstr, output)
++ if verbose:
++ print cmdstr
++ sys.stdout.write(output)
++ return status, output
++
++def get_auth(username=None, password=None):
++ set_username = 1
++ set_password = 1
++ if not username:
++ username = config.get(&quot;auth&quot;, &quot;username&quot;)
++ if not username:
++ username = raw_input(&quot;username: &quot;)
++ else:
++ set_username = 0
++ if not password:
++ password = config.get(&quot;auth&quot;, &quot;password&quot;)
++ if not password:
++ password = getpass.getpass(&quot;password: &quot;)
++ else:
++ set_password = 0
++ if set_username:
++ config.set(&quot;auth&quot;, &quot;username&quot;, username)
++ if set_password:
++ config.set(&quot;auth&quot;, &quot;password&quot;, password)
++ return username, password
++
++
++def mapurl(url):
++ &quot;&quot;&quot;Maps a url following the regexp provided by the option url-map in
++ repsys.conf
++ &quot;&quot;&quot;
++ urlmap = config.get(&quot;global&quot;, &quot;url-map&quot;)
++ newurl = url
++ if urlmap:
++ try:
++ expr_, replace = urlmap.split()[:2]
++ except ValueError:
++ log.error(&quot;invalid url-map: %s&quot;, urlmap)
++ else:
++ try:
++ newurl = re.sub(expr_, replace, url)
++ except re.error, errmsg:
++ log.error(&quot;error in URL mapping regexp: %s&quot;, errmsg)
++ return newurl
++
++
++def get_helper(name):
++ &quot;&quot;&quot;Tries to find the path of a helper script
++
++ It first looks if the helper has been explicitly defined in
++ configuration, if not, falls back to the default helper path, which can
++ also be defined in configuration file(s).
++ &quot;&quot;&quot;
++ helperdir = config.get(&quot;helper&quot;, &quot;prefix&quot;, &quot;/usr/share/repsys&quot;)
++ hpath = config.get(&quot;helper&quot;, name, None) or \
++ os.path.join(helperdir, name)
++ if not os.path.isfile(hpath):
++ log.warn(&quot;providing unexistent helper: %s&quot;, hpath)
++ return hpath
++
++def rellink(src, dst):
++ &quot;&quot;&quot;Creates relative symlinks
++
++ It will find the common ancestor and append to the src path.
++ &quot;&quot;&quot;
++ asrc = os.path.abspath(src)
++ adst = os.path.abspath(dst)
++ csrc = asrc.split(os.path.sep)
++ cdst = adst.split(os.path.sep)
++ dstname = cdst.pop()
++ i = 0
++ l = min(len(csrc), len(cdst))
++ while i &lt; l:
++ if csrc[i] != cdst[i]:
++ break
++ i += 1
++ dstextra = len(cdst[i:])
++ steps = [os.path.pardir] * dstextra
++ steps.extend(csrc[i:])
++ return os.path.sep.join(steps)
++
++
++# vim:et:ts=4:sw=4
+
+Added: build_system/repsys/trunk/create-srpm
+===================================================================
+--- build_system/repsys/trunk/create-srpm (rev 0)
++++ build_system/repsys/trunk/create-srpm 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,126 @@
++#!/usr/bin/python
++
++from RepSys import Error, config, plugins, layout
++from RepSys.mirror import strip_username
++from RepSys.rpmutil import get_srpm
++from RepSys.cgiutil import get_targets
++from RepSys.util import mapurl, execcmd, get_helper
++import sys
++import os
++import pwd
++import optparse
++import subprocess
++import urlparse
++import urllib
++
++class CmdError(Error): pass
++
++class CmdIface:
++ def author_email(self, author):
++ return config.get(&quot;users&quot;, author)
++
++ def submit_package(self, urls, revision, targetname, dontmapurl_=0,
++ define=[]):
++ pw = pwd.getpwuid(os.getuid())
++ username = pw[0]
++ packager = config.get(&quot;users&quot;, username) or pw[4]
++ if not packager:
++ raise CmdError, &quot;your email was not found&quot;
++ elif not targetname:
++ raise CmdError, &quot;no target provided&quot;
++ else:
++ targetname = targetname.lower()
++ for target in get_targets():
++ if target.name.lower() == targetname:
++ break
++ else:
++ raise CmdError, &quot;target not found&quot;
++ for url in urls:
++ url = strip_username(url)
++ for allowed in target.allowed:
++ if url.startswith(allowed):
++ break
++ else:
++ raise CmdError, &quot;%s is not allowed for this target&quot; \
++ % url
++ if not dontmapurl_: #FIXME don't use it!
++ urls = [mapurl(url) for url in urls]
++ uploadsrpms = []
++ for url in urls:
++ urlrev = revision or layout.get_url_revision(url)
++ url, _ = layout.split_url_revision(url)
++ targetsrpms = get_srpm(url,
++ revision=urlrev,
++ targetdirs=target.target,
++ packager=packager,
++ svnlog=1,
++ revname=1,
++ scripts=target.scripts,
++ macros=target.macros)
++ uploadsrpms.extend(targetsrpms)
++ uploadcmd = get_helper(&quot;upload-srpm&quot;)
++ if uploadcmd:
++ upload_command = [uploadcmd]
++ if define:
++ for x in define:
++ upload_command.append(&quot;--define&quot;)
++ upload_command.append(x)
++ upload_command.append(targetname)
++ upload_command.extend(uploadsrpms)
++ command = subprocess.list2cmdline(upload_command)
++ status, output = execcmd(command, noerror=1)
++ for srpm in uploadsrpms:
++ if os.path.isfile(srpm):
++ os.unlink(srpm)
++ else:
++ sys.stderr.write(&quot;warning: temporary file &quot;\
++ &quot;'%s' removed unexpectedly\n&quot; % srpm)
++ if status != 0:
++ raise CmdError, &quot;Failed to upload &quot;\
++ &quot;%s:\n%s&quot; % (&quot; &quot;.join(urls), output)
++ return 1
++
++ def submit_targets(self):
++ return [x.name for x in get_targets()]
++
++
++def parse_options():
++ usage = &quot;create-srpm &lt;packageurl&gt; -t &lt;target&gt;&quot;
++ parser = optparse.OptionParser(usage=usage)
++ parser.add_option(&quot;-t&quot;, &quot;--target&quot;, type=&quot;string&quot;, dest=&quot;target&quot;,
++ help=&quot;target name&quot;)
++ parser.add_option(&quot;-M&quot;, &quot;--nomapping&quot;, action=&quot;store_true&quot;,
++ dest=&quot;urlmap&quot;, default=False,
++ help=&quot;disable url mapping&quot;)
++ parser.add_option(&quot;--define&quot;, action=&quot;append&quot;)
++ parser.add_option(&quot;--list&quot;, dest=&quot;list_targets&quot;, default=False,
++ action=&quot;store_true&quot;,
++ help=&quot;list submit targets available&quot;)
++ parser.add_option(&quot;-r&quot;, help=&quot;revision&quot;, dest=&quot;revision&quot;,
++ type=&quot;int&quot;, default=None)
++ opts, args = parser.parse_args()
++ if not opts.list_targets and not args:
++ parser.error(&quot;you must supply a package url&quot;)
++ return opts, args
++
++
++def main():
++ plugins.load()
++ iface = CmdIface()
++ opts, args = parse_options()
++ try:
++ if opts.list_targets:
++ for target in iface.submit_targets():
++ print target
++ else:
++ iface.submit_package(args, opts.revision, opts.target, opts.urlmap,
++ opts.define)
++ except Error, e:
++ sys.stderr.write(&quot;error: %s\n&quot; % str(e))
++ sys.exit(1)
++
++
++if __name__ == &quot;__main__&quot;:
++ main()
++
++# vim:ts=4:sw=4:et
+
+
+Property changes on: build_system/repsys/trunk/create-srpm
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/repsys/trunk/default.chlog
+===================================================================
+--- build_system/repsys/trunk/default.chlog (rev 0)
++++ build_system/repsys/trunk/default.chlog 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,41 @@
++##
++## Default changelog format for Mandriva Linux
++##
++#if not $releases_by_author[-1].visible
++ ## Hide the first release that contains no changes. It must be a
++ ## reimported package and the log gathered from misc/ already should
++ ## contain a correct entry for the version-release:
++ #set $releases_by_author = $releases_by_author[:-1]
++#end if
++#for $rel in $releases_by_author
++* $rel.date $rel.author_name &lt;$rel.author_email&gt; $rel.version-$rel.release
+++ Revision: $rel.revision
++## #if not $rel.released
++##+ Status: not released
++## #end if
++ #if not $rel.visible
+++ rebuild (emptylog)
++ #end if
++ #for $rev in $rel.release_revisions
++ #for $line in $rev.lines
++$line
++ #end for
++ #end for
++
++ #for $author in $rel.authors
++ #if not $author.visible
++ #continue
++ #end if
++ ##alternatively, one could use:
++ ###if $author.email == &quot;root&quot;
++ ## #continue
++ ###end if
++ + $author.name &lt;$author.email&gt;
++ #for $rev in $author.revisions
++ #for $line in $rev.lines
++ $line
++ #end for
++ #end for
++
++ #end for
++#end for
+
+Added: build_system/repsys/trunk/repsys
+===================================================================
+--- build_system/repsys/trunk/repsys (rev 0)
++++ build_system/repsys/trunk/repsys 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,93 @@
++#!/usr/bin/python
++from RepSys import Error, plugins, config
++from RepSys.command import *
++import getopt
++import sys
++
++VERSION=&quot;1.9-binrepo&quot;
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys COMMAND [COMMAND ARGUMENTS]
++
++Tool to access and manage a package repository structure.
++
++<A HREF="http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart">http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart</A>
++
++Useful commands:
++ co checkout a package
++ ci commit changes
++ sync add-remove all file changes from the .spec
++ submit submit a package for build
++ putsrpm import a source package to the repository
++ getspec prints the spec
++ rpmlog prints the RPM changelog
++ getsrpm creates the source RPM
++ create create the structure of a new package
++ changed shows changes not submitted
++ authoremail prints the e-mail of a given author
++ switch relocate to mirror or upstream repository
++
++Run &quot;repsys COMMAND --help&quot; and &quot;man 8 repsys&quot; for more information.
++
++Written by Gustavo Niemeyer &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">gustavo at niemeyer.net</A>&gt;
++&quot;&quot;&quot;
++
++command_aliases = {&quot;import&quot;: &quot;putsrpm&quot;}
++
++def plugin_help(opt, val, parser, mode):
++ if parser is None:
++ prog = sys.argv[0]
++ print &quot;Use %s --help-plugin &lt;plugin name&gt;&quot; % prog
++ print &quot;Available plugins:&quot;
++ print
++ for name in plugins.list():
++ print name
++ else:
++ print plugins.help(parser)
++ raise SystemExit
++
++def parse_options():
++ parser = OptionParser(help=HELP, version=&quot;%prog &quot;+VERSION)
++ parser.disable_interspersed_args()
++ parser.add_option(&quot;--debug&quot;, action=&quot;store_true&quot;)
++ parser.add_option(&quot;--help-plugins&quot;, action=&quot;callback&quot;, callback=plugin_help)
++ parser.add_option(&quot;--help-plugin&quot;, type=&quot;string&quot;, dest=&quot;__ignore&quot;,
++ action=&quot;callback&quot;, callback=plugin_help)
++ opts, args = parser.parse_args()
++ del opts.__ignore
++ if len(args) &lt; 1:
++ parser.print_help(sys.stderr)
++ sys.exit(1)
++ opts.command = args[0]
++ opts.argv = args
++ return opts
++
++def dispatch_command(command, argv, debug=0):
++ sys.argv = argv
++ try:
++ command = command_aliases[command]
++ except KeyError:
++ pass
++ if debug:
++ config.set(&quot;global&quot;, &quot;verbose&quot;, &quot;yes&quot;)
++ try:
++ repsys_module = __import__(&quot;RepSys.commands.&quot;+command)
++ commands_module = getattr(repsys_module, &quot;commands&quot;)
++ command_module = getattr(commands_module, command)
++ except (ImportError, AttributeError):
++ etype, exc, tb = sys.exc_info()
++ if tb.tb_next is None and not debug:
++ raise Error, &quot;invalid command '%s'&quot; % command
++ raise
++ command_module.main()
++
++if __name__ == &quot;__main__&quot;:
++ try:
++ plugins.load()
++ except Error, e:
++ sys.stderr.write(&quot;plugin initialization error: %s\n&quot; % e)
++ sys.exit(1)
++ config.set(&quot;global&quot;, &quot;repsys-cmd&quot;, sys.argv[0])
++ do_command(parse_options, dispatch_command)
++
++# vim:et:ts=4:sw=4
+
+
+Property changes on: build_system/repsys/trunk/repsys
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/repsys/trunk/repsys-example.conf
+===================================================================
+--- build_system/repsys/trunk/repsys-example.conf (rev 0)
++++ build_system/repsys/trunk/repsys-example.conf 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,74 @@
++[global]
++verbose = no
++repository = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/">ssh://svn.mandriva.com/svn/packages/</A>
++url-map = svn\+<A HREF="ssh://svn\.mandriva\.com/(.*">ssh://svn\.mandriva\.com/(.*</A>) <A HREF="file:///\1">file:///\1</A>
++#tempdir = /tmp
++## the command used to download files when using repsys sync -d
++#download-command = wget -c -O '$dest' $url
++svn-env = SVN_SSH=/home/me/my-ssh-wrapper
++ SVN_FOO=bar
++
++[log]
++oldurl = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/misc">ssh://svn.mandriva.com/svn/packages/misc</A>
++sort = yes
++merge-spec = no
++# controls up to which revision the rpm changelog
++# will be constructed (default zero, i.e., oldest
++# commit)
++revision-offset = 0
++# commit lines containing this string won't be shown in the changelog:
++ignore-string = SILENT
++# and in case of only allowing a few lines to be visible, use this:
++#unignore-string = CLOG
++
++[template]
++# set the cheetah template used to generate the spec changelog from svn
++path = /usr/share/repsys/default.chlog
++
++[helper]
++# create-srpm is called by repsys on the server-side when submitting a
++# package
++create-srpm = /usr/share/repsys/create-srpm
++# upload-srpm is called by create-srpm to copy the generated .src.rpm to
++# the proper build queue
++upload-srpm = /usr/local/bin/youri.devel
++
++# this section maps usernames found in svn commits to the ones that must be
++# shown in the changelog
++# users can be retrieved from LDAP through the use of the repsys-ldap
++# plugin
++[users]
++# jsmith = John Smith &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">jsmith26 at example.com</A>&gt;
++#
++
++[srpm]
++# runs &quot;make -C current/ srpm-prep&quot; on the package before creating the
++# srpm file
++run-prep = yes
++
++[submit]
++host = kenobi.mandriva.com
++default = Cooker
++
++[submit Cooker]
++target = /export/home/repsys
++allowed = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/cooker">ssh://svn.mandriva.com/svn/packages/cooker</A>
++scripts = /usr/share/repsys/rebrand-mdk
++##
++## rpm-macros refers to the sections containing the macros used for this
++## target. The values will be used to build the rpmbuild command line. For
++## example:
++##
++## [macros cooker]
++## a = b
++## c = %a
++##
++## will render in the command line: --define &quot;a b&quot; --define &quot;c %a&quot;.
++##
++#rpm-macros = global cooker
++
++#[macros global]
++#distsuffix = mdv
++
++#[macros cooker]
++#mandriva_release = 2007.1
+
+Added: build_system/repsys/trunk/repsys-ssh
+===================================================================
+--- build_system/repsys/trunk/repsys-ssh (rev 0)
++++ build_system/repsys/trunk/repsys-ssh 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,2 @@
++#!/bin/sh
++ssh -o &quot;BatchMode yes&quot; $*
+
+
+Property changes on: build_system/repsys/trunk/repsys-ssh
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/repsys/trunk/repsys.8
+===================================================================
+--- build_system/repsys/trunk/repsys.8 (rev 0)
++++ build_system/repsys/trunk/repsys.8 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,218 @@
++.\&quot; repsys - Package repository management tool
++.TH &quot;repsys&quot; &quot;8&quot; &quot;2008 Feb 8&quot; &quot;Mandriva Linux&quot; &quot;&quot;
++.SH &quot;NAME&quot;
++repsys \- Package sources repository management tool
++.SH &quot;SYNOPSIS&quot;
++\fBrepsys\fP command [options] [arguments]
++.SH &quot;DESCRIPTION&quot;
++\fBrepsys\fP is the tool used to manage RPM packages in a subversion repository. It is used to create, tag releases, generate .src.rpm, generate changelog, and request new package releases for build. It mostly acts as a interface to svn(1) commands and small task scripts run on the build system side over ssh(1).
++
++Most of the \fBrepsys\fP commands operate on a given package URL, these URLs can be omitted when the configuration option \fBrepository\fP is set.
++
++Detailed help on commands is available running \fBrepsys &lt;command&gt; \-\-help\fP.
++.SH &quot;BASIC USAGE&quot;
++.SS &quot;Setup&quot;
++\fBrepsys\fP does not handle the authentication interface used by svn. So it is usually required to setup ssh\-agent(1) if the repository access method is over SSH (svn+<A HREF="ssh://">ssh://</A> URLs), or performing some simple operation in order to obtain a authentication token.
++
++.nf
++For more information related how to setup ssh-agent, see:
++<A HREF="http://wiki.mandriva.com/en/Development/Docs/Contributor_Tricks#SSH_configuration">http://wiki.mandriva.com/en/Development/Docs/Contributor_Tricks#SSH_configuration</A>
++.fi
++
++Users that don't have an ssh account in the default repository URL can set the option \fBmirror\fP pointing to a non-authenticated, read-only repository (such as <A HREF="http://svn.mandriva.com/svn/packages">http://svn.mandriva.com/svn/packages</A>).
++.SS &quot;Examples&quot;
++.PP
++.IP &quot;\fBrepsys co foo\fP&quot;
++Obtains a working copy of the package foo.
++.IP &quot;\fBrepsys co 2009.0/mutt\fP&quot;
++Obtains a working copy of the package mutt of from the 2009.0 branch.
++.IP &quot;\fBrepsys ci\fP&quot;
++Commits pending changes in the working copy.
++.IP &quot;\fBrepsys submit foo \-r 12345\fP&quot;
++Requests the package foo in the revision 12345 to be built and, if successful, to be uploaded to the RPMs repository.
++.IP &quot;\fBrepsys submit foo \-r 12345 -t 2008.0 \-\-define section=main/testing\fP&quot;
++Will submit the package foo and, upon successful build will have its RPMs placed inside the main/testing media of the 2008.0 repository.
++.IP &quot;\fBrepsys submit\fP&quot;
++submit run without parameters will use package name and revision found in the working copy in the current directory.
++.SH &quot;COMMANDS&quot;
++For detailed help on commands run \fBrepsys &lt;command&gt; \-\-help\fP.
++\#TODO complete list of commands, all options, all descriptions
++.PP
++.IP &quot;\fBco\fP&quot;
++checkout a package
++.IP &quot;\fBci\fP&quot;
++commit changes
++.IP &quot;\fBsubmit\fP&quot;
++submit a package in a given revision for build and release
++.IP &quot;\fBsync\fP&quot;
++add-remove all file changes from the .spec
++.IP &quot;\fBgetspec\fP&quot;
++prints the spec
++.IP &quot;\fBrpmlog\fP&quot;
++prints the RPM changelog generated from SVN
++.IP &quot;\fBgetsrpm\fP&quot;
++creates the source RPM
++.IP &quot;\fBcreate\fP&quot;
++create the structure of a new package
++.IP &quot;\fBchanged\fP&quot;
++shows changes not submitted
++.IP &quot;\fBauthoremail\fP&quot;
++prints the e-mail of a given svn author
++.IP &quot;\fBswitch\fP&quot;
++relocate to mirror or upstream repository
++.IP &quot;\fBmarkrelease\fP&quot;
++creates a tag for a given package revision and version
++.SH &quot;REPOSITORY LAYOUT&quot;
++.nf
++A detailed description can be found at:
++<A HREF="http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem">http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem</A>
++.fi
++
++The svn repository used by \fBrepsys\fP consists of a set of branches in the top directory, followed by package directories having the internal package structure.
++
++The internal package layout contains a directory \fBcurrent/\fP, which contains the latest version of the package (equivalent to &quot;trunk&quot; in software repositories). The directory \fBreleases/\fP contain copies of older submitted packages that have been already released, it is organized in the \fB&lt;version&gt;/&lt;release&gt;\fP format (equivalent to &quot;tags&quot; directories).
++
++URLs used in \fBrepsys\fP commands refer to the package directory, and never to \fBcurrent\fP. In other words, the <A HREF="http://host/svn/cooker/foo">http://host/svn/cooker/foo</A> is valid, whereas <A HREF="http://host/svn/cooker/foo/current">http://host/svn/cooker/foo/current</A> is not.
++
++One example layout:
++
++\fB
++/packages/cooker
++ |
++ +\- cooker/
++ | ...
++ | +\- rsync/
++ | +\- coreutils/
++ | +\- make/
++ | +\- foo/
++ | +\- current/
++ | | +\- SOURCES/
++ | | +\- SPECS/
++ | +\- releases/
++ | ...
++ | +\- 1.0
++ | +\- 1mdk/
++ | +\- SOURCES/
++ | +\- SPECS/
++ | +\- 2mdk/
++ | ...
++ +\- updates/
++ +\- 2007.0/
++ +\- 2007.1/
++ +\- 2008.0/
++\fP
++.SS &quot;Setting up a repository&quot;
++The minimal setup is accomplished with a Subversion repository having three directories: \fBcooker/\fP, \fBmisc/\fP and \fBupdates/\fP. The name of this directories can be changed using the configuration options \fBtrunk\-dir\fP and \fBbranches-dir\fP. Having this you can start importing packages with \fBrepsys import\fP.
++\#.SH &quot;THE SUBMIT PROCESS&quot;
++\#.SS &quot;Connecting&quot;
++\#.SS &quot;Changelog generation&quot;
++\#.SS &quot;Uploading&quot;
++\#.SH CHANGELOGS
++\#.SH SERVER\-SIDE SETUP
++.SH &quot;CONFIGURATION&quot;
++.SS &quot;Introduction&quot;
++The main configuration file is \fB/etc/repsys.conf\fP, it is in the .ini format. It is basically defined by a set of \fB[name]\fP sections, with a set of variables defined by \fBname = value\fP.
++
++If existing, the file ~/.repsys/config is also loaded.
++.SS &quot;[global] section&quot;
++.PP
++.IP &quot;\fBrepository = URL\fP&quot;
++Contains the base URL used to access packages in the svn repository when only package names are used in repsys commands. For example, if \fBrepsys co trafshow\fP is run and repository is <A HREF="http://host/svn/,">http://host/svn/,</A> the URL <A HREF="http://host/svn/cooker/trafshow">http://host/svn/cooker/trafshow</A> will be used (&quot;cooker&quot; is the default branch).
++.IP &quot;\fBdefault_parent = URL\fP&quot;
++Points to the base URL of the development branch of the svn repository. This option is deprecated as it has been replaced by &quot;repository&quot;.
++.IP &quot;\fBmirror = URL\fP&quot;
++The URL of an alternative and read\-only repository to be used when checking out packages. \fBrepsys ci\fP will automatically relocate to &quot;repository&quot; when comitting.
++.IP &quot;\fBuse-mirror = yes/no\fP&quot;
++Disable the use of the mirror repository when checking out packages.
++.IP &quot;\fBurl\-map = MATCH\-REGEXP REPLACE\-EXPR\fP&quot;
++This option is used on server-side to remap remote URLs brought by the user when running \fBrepsys submit\fP to local (and probably faster) URLs. \fBMATCH\-REGEXP\fP is a Python regular expression matching the components that must be reused in the local URL. \fbREPLACE\-EXPR\fP is a replace expression that should expand in the final URL. Example: \fBsvn\+<A HREF="ssh://svn\.mandriva\.com/(.*">ssh://svn\.mandriva\.com/(.*</A>) <A HREF="file:///\1\fP">file:///\1\fP</A>
++.IP &quot;\fBtempdir = PATH\fP&quot;
++The directory to be used as base for temporay directories and files created by repsys.
++.IP &quot;\fBdownload\-command = COMMAND\-FMT\fP&quot;
++Command used to download generic remote URLs, it accepts the variables \fB$url\fP and \fB$dest\fP. It is currently used when running \fBrepsys sync \-d\fP.
++.IP &quot;\fBsvn\-command = COMMAND\fP&quot;
++The base command used to execute svn(1). Runs through system(3).
++.IP &quot;\fBsvn-env = VAR=VALUE ..\fP&quot;
++The environment variables to use when running svn. More entries can be defined by using more lines. The variable defined by default is \fBSVN_SSH\fP, which points to the \fBrepsys-ssh\fP ssh wrapper.
++.IP &quot;\fBverbose = yes/no\fP&quot;
++Increase the verbosity of repsys output, printing commands being run and complete traceback when unhanlded errors happen.
++.IP &quot;\fBtrunk-dir\fP&quot;
++Points to the default branch of the distro used in commands that do not have their branch or URL specified.
++.IP &quot;\fBbranches-dir\fP&quot;
++The directory inside the repository which contains all the branches of the distro. It is used to build the URL of packages referred using the branch notation BRANCH/PACKAGE, as in \fBrepsys co 2009.0/mutt\fP.
++.SS &quot;[submit-groups] section&quot;
++This section contains aliases to groups of packages to be submitted at once. For example, a line with \fBmy-python-packages = bzr bzrtools bzr-gtk\fP would allow the user to simply run \fBrepsys submit my-python-packages\fP.
++
++Also distro branches or revision numbers can be specified for each package group. For example: \fBrepsys submit 2008.1/my-python-packages\fP.
++.SS &quot;[submit] section&quot;
++.IP &quot;\fBhost = HOST\fP&quot;
++Defines the default host in which \fBrepsys submit\fP will run the submit helper.
++.IP &quot;\fBdefault = TARGET\fP&quot;
++The default target to be used in \fBrepsys submit\fP when the option \-t is not used.
++.SS &quot;[submit TARGET] sections (server\-side only)&quot;
++These sections describe each one of the sections available to submit packages, ther configuration options are:
++.IP &quot;\fBtarget = PATH\fP&quot;
++The path where SRPMs generated by \fBcreate\-srpm-\fP will be placed during during the submit process.
++.IP &quot;\fBallowed = URLs\fP&quot;
++A space\-delimited list of package URLs that will be allowed to be used with this target. The comparison is done by checking if the package URL used in submit starts with one of the URLs of this option.
++.IP &quot;\fBscripts = PATHS\fP&quot;
++A space\-delimited list of scripts that will be run receiving the generated SRPM as first argument. These scripts are usually used to perform small changes in the SRPM structure, increasing release number for example.
++.IP &quot;\fBrpm\-macros = NAMES\fP&quot;
++It points to sections in the configuration that will contain the RPM macros used when generating the SRPM of the package being submitted. These section should be named in the \fB[macros NAME]\fP format.
++.SS &quot;[macros NAME] sections (server\-side only)&quot;
++These sections contain variables that will be defined as RPM macros when generating the SRPM of the package being submitted.It is usually used to define the distribution suffix that will be used in package releases, such as &quot;mdv2008.1&quot;.
++.SS &quot;[users] section (server\-side only)&quot;
++This section maps the usernames found in svn to their real names and e\-mails. It is used when generating the changelog based on commits in svn and by \fBauthoremail\fP. Example: \fBjoe = Joe User &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">joeuser at host.com</A>&gt;\fP.
++
++This section can be used on client\-side too, but will have no effect in generated changelogs on the server\-side.
++.SS &quot;[helper] section&quot;
++.IP &quot;\fBcreate\-srpm = PATH\fP&quot;
++The path of the script that will be run through ssh on the submit host when running \fBrepsys submit\fP.
++.IP &quot;\fBupload\-srpm = PATH\fP&quot;
++(server\-side only) Path of the script that will be called after the generated SRPM is copied to its target location (see target sections above) and target scripts are run.
++.IP &quot;\fBrpmbuild = COMMAND\fP&quot;
++The command used to call rpmbuild. Note that build options (such as \-bs) are supplied by repsys.
++.SS &quot;[log] section&quot;
++.IP &quot;\fBoldurl = URL\fP&quot;
++The URL of a directory structure that will contain old changelogs of packages that will be appended to the changelog being generated by \fBrpmlog\fP or \fBgetsrpm \-l\fP.
++.IP &quot;\fBmerge\-spec = yes/no\fP&quot;
++If enabled, changelogs generated by \fBrepsys\fP will have the contents of the %changelog found in the .spec file of the package appended.
++.IP &quot;\fBsort = yes/no\fP&quot;
++If enabled, the changelog will be resorted after its generation. It is useful when changelogs found in \fBoldurl\fP or in the .spec's %changelog section are newer than those generated by SVN.
++.IP &quot;\fBrevision\-offset = REVISION\-NUMBER\fP&quot;
++The base revision used to generated changelogs. As in \fBsvn log -r REVISION\-OFFSET:HEAD URL\fP.
++.IP &quot;\fBignore\-string = STRING\fP&quot;
++Mark used to hide log messages. When it appears at the beginning of the log message, the whole changeset log is hidden. When it is found in the middle of a string, only the line will not be shown.
++.IP &quot;\fBunignore\-string = STRING\fP&quot;
++The complement of the previous option. When this token is found, only those lines containg this mark will be shown. It is intended to be used in very long log messages.
++.SS &quot;[template] section&quot;
++.IP &quot;\fBpath = PATH\fP&quot;
++The path of the template used to generate the changelog from svn commits.
++.SS &quot;[srpm] section&quot;
++.IP &quot;\fBrun-prep = yes/no\fP&quot;
++Repsys can check for the presence of a file named \fBMakefile\fP in the top directory of the package and run \fBmake prep-srpm\fP so that it can generate the actual files that must be distributed in in the srpm. This option enables this feature. (Note: the command is expected to run in an restricted environment, the Makefile must use only minimal funcionalities.)
++.SH &quot;ENVIRONMENT VARIABLES&quot;
++.PP
++.IP &quot;\fBREPSYS_CONF\fP&quot;
++Sets the configuration file to be read by \fBrepsys\fP
++.SH &quot;FILES&quot;
++.nf
++~/.repsys/config
++/etc/repsys.conf
++/usr/share/repsys/
++/usr/share/doc/repsys/
++.fi
++.SH &quot;BUGS&quot;
++See the list of bugs at <A HREF="http://qa.mandriva.com/buglist.cgi?quicksearch=repsys">http://qa.mandriva.com/buglist.cgi?quicksearch=repsys</A>
++.SH &quot;SEE ALSO&quot;
++mdvsys(1), svn(1), ssh\-agent(1)
++
++.nf
++<A HREF="http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart">http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart</A>
++.fi
++.SH &quot;AUTHOR&quot;
++.nf
++repsys was originally written by Gustavo Niemeyer &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">gustavo at niemeyer.net</A>&gt;
++for the Conectiva Linux distribution. Currently it is being mantained by
++Mandriva contributors and employees.
++.fi
+
+Added: build_system/repsys/trunk/repsys.conf
+===================================================================
+--- build_system/repsys/trunk/repsys.conf (rev 0)
++++ build_system/repsys/trunk/repsys.conf 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,18 @@
++# see man 8 repsys for a description on configuration options
++[global]
++repository = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/">ssh://svn.mandriva.com/svn/packages/</A>
++## uncomment it in case you don't have a account in the Mandriva cluster:
++#mirror = <A HREF="http://svn.mandriva.com/svn/packages/cooker/">http://svn.mandriva.com/svn/packages/cooker/</A>
++#use-binaries-repository = yes
++#binaries-repository = svn.mandriva.com:/tarballs/
++
++[log]
++oldurl = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/misc">ssh://svn.mandriva.com/svn/packages/misc</A>
++
++[helper]
++create-srpm = /usr/share/repsys/create-srpm
++upload-srpm = /usr/local/bin/youri.devel
++
++[submit]
++host = kenobi.mandriva.com
++default = Cooker
+
+Added: build_system/repsys/trunk/revno.chlog
+===================================================================
+--- build_system/repsys/trunk/revno.chlog (rev 0)
++++ build_system/repsys/trunk/revno.chlog 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,41 @@
++## Sample Changelog template
++## lcapitulinos' Changelog3
++##
++#for $rel in $releases_by_author
++* $rel.date $rel.author_name &lt;$rel.author_email&gt; $rel.version-$rel.release
++ ##
++ #if not $rel.released
++ (not released yet)
++ #end if
++
++ #for $rev in $rel.release_revisions
++ #set $first = 1
++ #set $spaces = &quot; &quot; * len(str(rev.revision))
++ #for $line in $rev.lines
++ #if $first == 1
++ [$rev.revision] $line
++ #else
++ $spaces $line
++ #end if
++ #set first=0
++ #end for
++ #end for
++
++ #for $author in $rel.authors
++ + $author.name &lt;$author.email&gt;
++ #for $rev in $author.revisions
++ #set first=1
++ #set $spaces = &quot; &quot; * len(str(rev.revision))
++ #for $line in $rev.lines
++ #if $first==1
++ [$rev.revision] $line
++ #else
++ $spaces $line
++ #end if
++ #set first=0
++ #end for
++ #end for
++
++ #end for
++#end for
++
+
+Added: build_system/repsys/trunk/setup.cfg
+===================================================================
+--- build_system/repsys/trunk/setup.cfg (rev 0)
++++ build_system/repsys/trunk/setup.cfg 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,3 @@
++[bdist_rpm]
++doc_files = repsys.conf README README.LDAP CHANGES
++
+
+Added: build_system/repsys/trunk/setup.py
+===================================================================
+--- build_system/repsys/trunk/setup.py (rev 0)
++++ build_system/repsys/trunk/setup.py 2011-01-04 16:09:44 UTC (rev 202)
+@@ -0,0 +1,33 @@
++#!/usr/bin/python
++from distutils.core import setup
++import sys
++import re
++
++verpat = re.compile(&quot;VERSION *= *\&quot;(.*)\&quot;&quot;)
++data = open(&quot;repsys&quot;).read()
++m = verpat.search(data)
++if not m:
++ sys.exit(&quot;error: can't find VERSION&quot;)
++VERSION = m.group(1)
++
++setup(name=&quot;repsys&quot;,
++ version = VERSION,
++ description = &quot;Tools for Mandriva Linux repository access and management&quot;,
++ author = &quot;Gustavo Niemeyer&quot;,
++ author_email = &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">gustavo at niemeyer.net</A>&quot;,
++ url = &quot;<A HREF="http://qa.mandriva.com/twiki/bin/view/Main/RepositorySystem">http://qa.mandriva.com/twiki/bin/view/Main/RepositorySystem</A>&quot;,
++ license = &quot;GPL&quot;,
++ long_description = &quot;&quot;&quot;Tools for Mandriva Linux repository access and management.&quot;&quot;&quot;,
++ packages = [&quot;RepSys&quot;, &quot;RepSys.cgi&quot;, &quot;RepSys.commands&quot;,
++ &quot;RepSys.plugins&quot;],
++ scripts = [&quot;repsys&quot;, &quot;repsys-ssh&quot;],
++ data_files = [
++ (&quot;/usr/share/repsys/&quot;,
++ [&quot;default.chlog&quot;,
++ &quot;revno.chlog&quot;,
++ &quot;create-srpm&quot;]),
++ (&quot;/etc/&quot;, [&quot;repsys.conf&quot;]),
++ (&quot;share/man/man8/&quot;, [&quot;repsys.8&quot;])]
++ )
++
++# vim:ts=4:sw=4:et
+
+
+Property changes on: build_system/repsys/trunk/setup.py
+___________________________________________________________________
+Added: svn:executable
+ + *
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110104/6f739dd8/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001498.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001500.html">[Mageia-sysadm] [203] tag version 1.9
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1502">[ date ]</a>
+ <a href="thread.html#1502">[ thread ]</a>
+ <a href="subject.html#1502">[ subject ]</a>
+ <a href="author.html#1502">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001503.html b/zarb-ml/mageia-sysadm/2011-January/001503.html
new file mode 100644
index 000000000..c85c5d694
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001503.html
@@ -0,0 +1,1424 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [205] version 1.9.1
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B205%5D%20version%201.9.1&In-Reply-To=%3C20110104161704.894384186D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001501.html">
+ <LINK REL="Next" HREF="001505.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [205] version 1.9.1</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B205%5D%20version%201.9.1&In-Reply-To=%3C20110104161704.894384186D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [205] version 1.9.1">root at mageia.org
+ </A><BR>
+ <I>Tue Jan 4 17:17:04 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001501.html">[Mageia-sysadm] [204] fix problem with python threads on 2010.1
+</A></li>
+ <LI>Next message: <A HREF="001505.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1503">[ date ]</a>
+ <a href="thread.html#1503">[ thread ]</a>
+ <a href="subject.html#1503">[ subject ]</a>
+ <a href="author.html#1503">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 205
+Author: boklm
+Date: 2011-01-04 17:17:04 +0100 (Tue, 04 Jan 2011)
+Log Message:
+-----------
+version 1.9.1
+
+Added Paths:
+-----------
+ build_system/repsys/tags/1.9.1/
+ build_system/repsys/tags/1.9.1/CHANGES
+ build_system/repsys/tags/1.9.1/RepSys/binrepo.py
+ build_system/repsys/tags/1.9.1/repsys
+
+Removed Paths:
+-------------
+ build_system/repsys/tags/1.9.1/CHANGES
+ build_system/repsys/tags/1.9.1/RepSys/binrepo.py
+ build_system/repsys/tags/1.9.1/repsys
+
+Deleted: build_system/repsys/tags/1.9.1/CHANGES
+===================================================================
+--- build_system/repsys/trunk/CHANGES 2011-01-04 16:09:44 UTC (rev 202)
++++ build_system/repsys/tags/1.9.1/CHANGES 2011-01-04 16:17:04 UTC (rev 205)
+@@ -1,163 +0,0 @@
+-* Development
+-- added support to &quot;binary repository&quot;
+-- added new commands upload, up and del to help handling tarballs in the
+- binaries repository
+-
+-* 1.9
+-- really fixed -M
+-- new command log: shows the svn log for a given package
+-- added option -s to co, to allow checking out only SPECS
+-- use a better message when checking out from the mirror
+-- show the path where getspec wrote the spec file
+-
+-* 1.8
+-- make the -M option work again
+-- sync now adds the spec file (pointed by blino)
+-- fixed putsrpm to not create old log files for packages without changelog
+-- submit now can fetch the revision number if not specified (it also shows
+- the author and the first line of the commit)
+-- allow submitting many packages at once, even without support on server
+- side (the same behavior as running repsys submit for each package)
+-- append a parameter sid=UUID for every set of packages submitted
+-- strip username from package URL on submit (#53939)
+-- clearer error message when svn co fails
+-- svn authentication errors are handled, pointing to the wiki page on
+- configuration
+-- svn commands will not be shown on error messages, unless using --debug
+-- repsys uses the wrapper repsys-ssh for svn, to handle signals and also
+- set BatchMode
+-- added the configuration option svn-env
+-- show the error from rpm when fetching the version from a spec fails
+-
+-* 1.7
+-- dropped all authenticated access support: subversion authentication has
+- been broken for a long time and the workarounds weren't decent. It will
+- be back in 1.7.x.
+-- added configuration option svn-command in the global section, allowing
+- to replace the default svn command
+-- force svn+<A HREF="ssh://">ssh://</A> URLs to be in BatchMode, in order to not have any
+- interactivity at all with ssh
+-- fixed incompatibility with Python-2.4 on urlparse
+-- fixed emptylog message, which was not being shown when needed
+-- distributions can be specified by using &lt;distro&gt;/&lt;package&gt; in all
+- commands
+-- allow submitting many packages at once (#28352)
+-- package revisions in submit are now specified with <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">name at nnn</A>
+-- the user can define groups of packages to be submitted in the section
+- &quot;submit-groups&quot;
+-- make 'repsys submit' without package name or revision number work again
+-- added option --distro to submit
+-- make putsrpm work again
+-- added subcommand import as an alias to putsrpm
+-- template: hide the first release when it has only invisible lines
+-- added initial man page
+-- allow resorting changelog entries through the config option sort in the
+- log section
+-- added rpmlog options: -o to append the old changelog, -p to append the
+- changelog found in the spec, and -s to resort all changelog entries
+-- rpmlog, getsrpm, getspec and changed will use the mirror if enabled
+-- don't hide authors with only the first revision SILENTed (#41117)
+-- fixed bad url used when using -v in getsrpm
+-- if REPSYS_CONF is set, /etc/repsys.conf and ~/.repsys/config will not be
+- readed anymore
+-- sort the final changelog by enabling the option sort in the log section
+-- merge the changelog found in the spec by enabling the option merge-spec
+- in the log section
+-- changed the built-in template to the current default.chlog
+-- added option -d to repsys sync, to download the missing source files
+-- added option -F to repsys ci to set a log message file
+-- added option --strict to getsrpm to check if the revision provided
+- matches the package URL;
+-- changed the default command to build SRPMs to rpmbuild
+-- added configuration option rpmbuild to the section helper, to define the
+- command used to build packages
+-- added boolean configuration option strict-revision in the submit
+- section, to allow forcing the use of --strict
+-- added option --list in create-srpm to list the available targets
+-- make submit -l work on svn+<A HREF="ssh://">ssh://</A> targets
+-- the fix for the unreleased commits problem in the previous release was
+- wrong, really fixed it
+-- moved all configuration options that will hardly be changed to
+- repsys-example.conf; we now have a shorter repsys.conf
+-- fixed the use of <A HREF="file:///">file:///</A> URLs when using just the package name
+-- allow using submit with package URLs having usernames
+-- don't give the wrong message &quot;invalid command 'CMD'&quot; when this is not
+- the case
+-- added more help messages in subcommands
+-
+-* 1.6.19
+-- added complement for SILENT: CLOG, which hides everything that does not
+- start with this token
+-- fixed generation of unreleased commits, it was using the previous
+- markrelease revision as reference
+-- added option -o to 'co' to disable the use of mirror when checking out
+-
+-* 1.6.18
+-- added the subcommand &quot;switch&quot; to help with mirrors support
+-- initialize plugins in create-srpm too
+-- changelog: perform less svn calls to obtain release number and oldlog
+-- changelog: show epoch even in the entry not released
+-- changelog: make default.chlog compatible with cheetah-2
+-- make &quot;sync&quot; compatible with rpm-4.4.8 behavior
+-- &quot;co&quot; don't use mirror when URL is provided
+-- &quot;ci&quot; don't relocate back to mirrors after commit (should use switch)
+-- ldapusers: added options ldap-uri and ldap-starttls
+-- fixed use of __import__, incompatible with python2.4 in plugin support
+-- fixed bug of wrong paths when using mirrors
+-
+-* 1.6.17
+-- brought from mdvsys world the sync command
+-- ldapusers: the configuration format has changed, now it uses python
+- template strings
+-- ldapusers: many fixes: better error messages, ldap-port working, results
+- contain only the fields needed, unbinding after search, filters are
+- escaped
+-
+-* 1.6.16
+-- introduced the plugin ldapusers: repsys user data obtained from LDAP;
+- this plugin is builtin
+-- added support to plugins, and the hability to wrap configuration sections
+-- added workaround in the template to ignore empty releases
+-- added initial support to mirrors, as requested by mrl; it required the
+- new subcommand &quot;ci&quot;
+-- changelogs from misc/ will come from HEAD and should be escaped (%%)
+-
+-* 1.6.15
+-- empty changelog entries are now shown, with a EMPTYLOG tag to allow
+- rpmlint warn the developer about it
+-- check (and warn) if a temporary package has already been removed before
+- trying to remove it
+-
+-* 1.6.2b
+-- make submit pass --define options to create-srpm script
+-- print error message when create-srpm fails
+-- make get_srpm return the srpms list
+-- add upload-srpm support in create-srpm
+-
+-* 1.6.2a
+-- moved revision-offset to [log] section and added a comment
+-
+-* 1.6.2
+-- reimplemented the option -n for rpmlog, which now uses the svn option
+- --limit.
+-- added the option revision-offset, for the Zero Day Revision issue.
+-- small fix in main repsys help message
+-
+-* 1.6.1
+-- added option url-map, as an workaround for svn+<A HREF="ssh://">ssh://</A> urls problems
+-- added configuration sectiom &quot;helper&quot;
+-- added getsrpm-mdk and create-srpm to setup.py
+-- added option -r to submit
+-
+-* 1.6.0
+-- improved markrelease command line parsing
+-- changelogs entries are now groupped by author, and sorted by revision
+- number
+-- the changelog now is generated using the Cheetah Template Engine, to
+- allow quick modifications without spending time reading code and
+- introducing new bugs
+-- consequently, was added an option &quot;-T &lt;file&gt;&quot; to rpmlog and getsrpm to
+- allow choosing the path of the template to be used
+-- added options noauth=0, and baseurl=None in order to disable the
+- authentication in some url schemes (<A HREF="http://">http://</A> and <A HREF="file://">file://</A>)
+-- replaced some &quot;cl&quot; references to &quot;mdv&quot;
+
+Copied: build_system/repsys/tags/1.9.1/CHANGES (from rev 204, build_system/repsys/trunk/CHANGES)
+===================================================================
+--- build_system/repsys/tags/1.9.1/CHANGES (rev 0)
++++ build_system/repsys/tags/1.9.1/CHANGES 2011-01-04 16:17:04 UTC (rev 205)
+@@ -0,0 +1,166 @@
++* 1.9.1-binrepo
++- fix problem with python threads on 2010.1
++
++* 1.9-binrepo
++- added support to &quot;binary repository&quot;
++- added new commands upload, up and del to help handling tarballs in the
++ binaries repository
++
++* 1.9
++- really fixed -M
++- new command log: shows the svn log for a given package
++- added option -s to co, to allow checking out only SPECS
++- use a better message when checking out from the mirror
++- show the path where getspec wrote the spec file
++
++* 1.8
++- make the -M option work again
++- sync now adds the spec file (pointed by blino)
++- fixed putsrpm to not create old log files for packages without changelog
++- submit now can fetch the revision number if not specified (it also shows
++ the author and the first line of the commit)
++- allow submitting many packages at once, even without support on server
++ side (the same behavior as running repsys submit for each package)
++- append a parameter sid=UUID for every set of packages submitted
++- strip username from package URL on submit (#53939)
++- clearer error message when svn co fails
++- svn authentication errors are handled, pointing to the wiki page on
++ configuration
++- svn commands will not be shown on error messages, unless using --debug
++- repsys uses the wrapper repsys-ssh for svn, to handle signals and also
++ set BatchMode
++- added the configuration option svn-env
++- show the error from rpm when fetching the version from a spec fails
++
++* 1.7
++- dropped all authenticated access support: subversion authentication has
++ been broken for a long time and the workarounds weren't decent. It will
++ be back in 1.7.x.
++- added configuration option svn-command in the global section, allowing
++ to replace the default svn command
++- force svn+<A HREF="ssh://">ssh://</A> URLs to be in BatchMode, in order to not have any
++ interactivity at all with ssh
++- fixed incompatibility with Python-2.4 on urlparse
++- fixed emptylog message, which was not being shown when needed
++- distributions can be specified by using &lt;distro&gt;/&lt;package&gt; in all
++ commands
++- allow submitting many packages at once (#28352)
++- package revisions in submit are now specified with <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">name at nnn</A>
++- the user can define groups of packages to be submitted in the section
++ &quot;submit-groups&quot;
++- make 'repsys submit' without package name or revision number work again
++- added option --distro to submit
++- make putsrpm work again
++- added subcommand import as an alias to putsrpm
++- template: hide the first release when it has only invisible lines
++- added initial man page
++- allow resorting changelog entries through the config option sort in the
++ log section
++- added rpmlog options: -o to append the old changelog, -p to append the
++ changelog found in the spec, and -s to resort all changelog entries
++- rpmlog, getsrpm, getspec and changed will use the mirror if enabled
++- don't hide authors with only the first revision SILENTed (#41117)
++- fixed bad url used when using -v in getsrpm
++- if REPSYS_CONF is set, /etc/repsys.conf and ~/.repsys/config will not be
++ readed anymore
++- sort the final changelog by enabling the option sort in the log section
++- merge the changelog found in the spec by enabling the option merge-spec
++ in the log section
++- changed the built-in template to the current default.chlog
++- added option -d to repsys sync, to download the missing source files
++- added option -F to repsys ci to set a log message file
++- added option --strict to getsrpm to check if the revision provided
++ matches the package URL;
++- changed the default command to build SRPMs to rpmbuild
++- added configuration option rpmbuild to the section helper, to define the
++ command used to build packages
++- added boolean configuration option strict-revision in the submit
++ section, to allow forcing the use of --strict
++- added option --list in create-srpm to list the available targets
++- make submit -l work on svn+<A HREF="ssh://">ssh://</A> targets
++- the fix for the unreleased commits problem in the previous release was
++ wrong, really fixed it
++- moved all configuration options that will hardly be changed to
++ repsys-example.conf; we now have a shorter repsys.conf
++- fixed the use of <A HREF="file:///">file:///</A> URLs when using just the package name
++- allow using submit with package URLs having usernames
++- don't give the wrong message &quot;invalid command 'CMD'&quot; when this is not
++ the case
++- added more help messages in subcommands
++
++* 1.6.19
++- added complement for SILENT: CLOG, which hides everything that does not
++ start with this token
++- fixed generation of unreleased commits, it was using the previous
++ markrelease revision as reference
++- added option -o to 'co' to disable the use of mirror when checking out
++
++* 1.6.18
++- added the subcommand &quot;switch&quot; to help with mirrors support
++- initialize plugins in create-srpm too
++- changelog: perform less svn calls to obtain release number and oldlog
++- changelog: show epoch even in the entry not released
++- changelog: make default.chlog compatible with cheetah-2
++- make &quot;sync&quot; compatible with rpm-4.4.8 behavior
++- &quot;co&quot; don't use mirror when URL is provided
++- &quot;ci&quot; don't relocate back to mirrors after commit (should use switch)
++- ldapusers: added options ldap-uri and ldap-starttls
++- fixed use of __import__, incompatible with python2.4 in plugin support
++- fixed bug of wrong paths when using mirrors
++
++* 1.6.17
++- brought from mdvsys world the sync command
++- ldapusers: the configuration format has changed, now it uses python
++ template strings
++- ldapusers: many fixes: better error messages, ldap-port working, results
++ contain only the fields needed, unbinding after search, filters are
++ escaped
++
++* 1.6.16
++- introduced the plugin ldapusers: repsys user data obtained from LDAP;
++ this plugin is builtin
++- added support to plugins, and the hability to wrap configuration sections
++- added workaround in the template to ignore empty releases
++- added initial support to mirrors, as requested by mrl; it required the
++ new subcommand &quot;ci&quot;
++- changelogs from misc/ will come from HEAD and should be escaped (%%)
++
++* 1.6.15
++- empty changelog entries are now shown, with a EMPTYLOG tag to allow
++ rpmlint warn the developer about it
++- check (and warn) if a temporary package has already been removed before
++ trying to remove it
++
++* 1.6.2b
++- make submit pass --define options to create-srpm script
++- print error message when create-srpm fails
++- make get_srpm return the srpms list
++- add upload-srpm support in create-srpm
++
++* 1.6.2a
++- moved revision-offset to [log] section and added a comment
++
++* 1.6.2
++- reimplemented the option -n for rpmlog, which now uses the svn option
++ --limit.
++- added the option revision-offset, for the Zero Day Revision issue.
++- small fix in main repsys help message
++
++* 1.6.1
++- added option url-map, as an workaround for svn+<A HREF="ssh://">ssh://</A> urls problems
++- added configuration sectiom &quot;helper&quot;
++- added getsrpm-mdk and create-srpm to setup.py
++- added option -r to submit
++
++* 1.6.0
++- improved markrelease command line parsing
++- changelogs entries are now groupped by author, and sorted by revision
++ number
++- the changelog now is generated using the Cheetah Template Engine, to
++ allow quick modifications without spending time reading code and
++ introducing new bugs
++- consequently, was added an option &quot;-T &lt;file&gt;&quot; to rpmlog and getsrpm to
++ allow choosing the path of the template to be used
++- added options noauth=0, and baseurl=None in order to disable the
++ authentication in some url schemes (<A HREF="http://">http://</A> and <A HREF="file://">file://</A>)
++- replaced some &quot;cl&quot; references to &quot;mdv&quot;
+
+Deleted: build_system/repsys/tags/1.9.1/RepSys/binrepo.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/binrepo.py 2011-01-04 16:09:44 UTC (rev 202)
++++ build_system/repsys/tags/1.9.1/RepSys/binrepo.py 2011-01-04 16:17:04 UTC (rev 205)
+@@ -1,393 +0,0 @@
+-from RepSys import Error, config, mirror, layout
+-from RepSys.util import execcmd, rellink
+-from RepSys.svn import SVN
+-
+-import sys
+-import os
+-import string
+-import stat
+-import shutil
+-import re
+-import tempfile
+-import hashlib
+-import urlparse
+-import threading
+-from cStringIO import StringIO
+-
+-DEFAULT_TARBALLS_REPO = &quot;/tarballs&quot;
+-BINARIES_DIR_NAME = &quot;SOURCES&quot;
+-BINARIES_CHECKOUT_NAME = &quot;SOURCES-bin&quot;
+-
+-PROP_USES_BINREPO = &quot;mdv:uses-binrepo&quot;
+-PROP_BINREPO_REV = &quot;mdv:binrepo-rev&quot;
+-
+-BINREPOS_SECTION = &quot;binrepos&quot;
+-
+-SOURCES_FILE = &quot;sha1.lst&quot;
+-
+-class ChecksumError(Error):
+- pass
+-
+-def svn_baseurl(target):
+- svn = SVN()
+- info = svn.info2(target)
+- if info is None:
+- # unversioned resource
+- newtarget = os.path.dirname(target)
+- info = svn.info2(newtarget)
+- assert info is not None, &quot;svn_basedir should not be used with a &quot;\
+- &quot;non-versioned directory&quot;
+- root = info[&quot;Repository Root&quot;]
+- url = info[&quot;URL&quot;]
+- kind = info[&quot;Node Kind&quot;]
+- path = url[len(root):]
+- if kind == &quot;directory&quot;:
+- return url
+- basepath = os.path.dirname(path)
+- baseurl = mirror.normalize_path(url + &quot;/&quot; + basepath)
+- return baseurl
+-
+-def svn_root(target):
+- svn = SVN()
+- info = svn.info2(target)
+- if info is None:
+- newtarget = os.path.dirname(target)
+- info = svn.info2(newtarget)
+- assert info is not None
+- return info[&quot;Repository Root&quot;]
+-
+-def enabled(url):
+- #TODO use information from url to find out whether we have a binrepo
+- # available for this url
+- use = config.getbool(&quot;global&quot;, &quot;use-binaries-repository&quot;, False)
+- return use
+-
+-def default_repo():
+- base = config.get(&quot;global&quot;, &quot;binaries-repository&quot;, None)
+- if base is None:
+- default_parent = config.get(&quot;global&quot;, &quot;default_parent&quot;, None)
+- if default_parent is None:
+- raise Error, &quot;no binaries-repository nor default_parent &quot;\
+- &quot;configured&quot;
+- comps = urlparse.urlparse(default_parent)
+- base = comps[1] + &quot;:&quot; + DEFAULT_TARBALLS_REPO
+- return base
+-
+-def translate_url(url):
+- url = mirror.normalize_path(url)
+- main = mirror.normalize_path(layout.repository_url())
+- subpath = url[len(main)+1:]
+- # [binrepos]
+- # updates/2009.0 = svn+<A HREF="ssh://svn.mandriva.com/svn/binrepo/20090/">ssh://svn.mandriva.com/svn/binrepo/20090/</A>
+- ## svn+<A HREF="ssh://svn.mandriva.com/svn/packages/2009.0/trafshow/current">ssh://svn.mandriva.com/svn/packages/2009.0/trafshow/current</A>
+- ## would translate to
+- ## svn+<A HREF="ssh://svn.mandriva.com/svn/binrepo/20090/updates/trafshow/current/">ssh://svn.mandriva.com/svn/binrepo/20090/updates/trafshow/current/</A>
+- binbase = None
+- if BINREPOS_SECTION in config.sections():
+- for option, value in config.walk(BINREPOS_SECTION):
+- if subpath.startswith(option):
+- binbase = value
+- break
+- binurl = mirror._joinurl(binbase or default_repo(), subpath)
+- return binurl
+-
+-def translate_topdir(path):
+- &quot;&quot;&quot;Returns the URL in the binrepo from a given path inside a SVN
+- checkout directory.
+-
+- @path: if specified, returns a URL in the binrepo whose path is the
+- same as the path inside the main repository.
+- &quot;&quot;&quot;
+- baseurl = svn_baseurl(path)
+- binurl = translate_url(baseurl)
+- target = mirror.normalize_path(binurl)
+- return target
+-
+-def is_binary(path):
+- raw = config.get(&quot;binrepo&quot;, &quot;upload-match&quot;,
+- &quot;\.(7z|Z|bin|bz2|cpio|db|deb|egg|gem|gz|jar|jisp|lzma|&quot;\
+- &quot;pdf|pgn\\.gz|pk3|rpm|rpm|run|sdz|smzip|tar|tbz|&quot;\
+- &quot;tbz2|tgz|ttf|uqm|wad|war|xar|xpi|zip)$&quot;)
+- maxsize = config.getint(&quot;binrepo&quot;, &quot;upload-match-size&quot;, &quot;1048576&quot;) # 1MiB
+- expr = re.compile(raw)
+- name = os.path.basename(path)
+- if expr.search(name):
+- return True
+- st = os.stat(path)
+- if st[stat.ST_SIZE] &gt;= maxsize:
+- return True
+- return False
+-
+-def find_binaries(paths):
+- new = []
+- for path in paths:
+- if os.path.isdir(path):
+- for name in os.listdir(path):
+- fpath = os.path.join(path, name)
+- if is_binary(fpath):
+- new.append(fpath)
+- else:
+- if is_binary(path):
+- new.append(path)
+- return new
+-
+-def make_symlinks(source, dest):
+- todo = []
+- tomove = []
+- for name in os.listdir(source):
+- path = os.path.join(source, name)
+- if not os.path.isdir(path) and not name.startswith(&quot;.&quot;):
+- destpath = os.path.join(dest, name)
+- linkpath = rellink(path, destpath)
+- if os.path.exists(destpath):
+- if (os.path.islink(destpath) and
+- os.readlink(destpath) == linkpath):
+- continue
+- movepath = destpath + &quot;.repsys-moved&quot;
+- if os.path.exists(movepath):
+- raise Error, &quot;cannot create symlink, %s already &quot;\
+- &quot;exists (%s too)&quot; % (destpath, movepath)
+- tomove.append((destpath, movepath))
+- todo.append((destpath, linkpath))
+- for destpath, movepath in tomove:
+- os.rename(destpath, movepath)
+- for destpath, linkpath in todo:
+- os.symlink(linkpath, destpath)
+-
+-def download(targetdir, pkgdirurl=None, export=False, show=True,
+- revision=None, symlinks=True, check=False):
+- assert not export or (export and pkgdirurl)
+- svn = SVN()
+- sourcespath = os.path.join(targetdir, &quot;SOURCES&quot;)
+- binpath = os.path.join(targetdir, BINARIES_CHECKOUT_NAME)
+- if pkgdirurl:
+- topurl = translate_url(pkgdirurl)
+- else:
+- topurl = translate_topdir(targetdir)
+- binrev = None
+- if revision:
+- if pkgdirurl:
+- binrev = mapped_revision(pkgdirurl, revision)
+- else:
+- binrev = mapped_revision(targetdir, revision, wc=True)
+- binurl = mirror._joinurl(topurl, BINARIES_DIR_NAME)
+- if export:
+- svn.export(binurl, binpath, rev=binrev, show=show)
+- else:
+- svn.checkout(binurl, binpath, rev=binrev, show=show)
+- if symlinks:
+- make_symlinks(binpath, sourcespath)
+- if check:
+- check_sources(targetdir)
+-
+-def import_binaries(topdir, pkgname):
+- &quot;&quot;&quot;Import all binaries from a given package checkout
+-
+- (with pending svn adds)
+-
+- @topdir: the path to the svn checkout
+- &quot;&quot;&quot;
+- svn = SVN()
+- topurl = translate_topdir(topdir)
+- sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
+- bintopdir = tempfile.mktemp(&quot;repsys&quot;)
+- try:
+- svn.checkout(topurl, bintopdir)
+- checkout = True
+- except Error:
+- bintopdir = tempfile.mkdtemp(&quot;repsys&quot;)
+- checkout = False
+- try:
+- bindir = os.path.join(bintopdir, BINARIES_DIR_NAME)
+- if not os.path.exists(bindir):
+- if checkout:
+- svn.mkdir(bindir)
+- else:
+- os.mkdir(bindir)
+- binaries = find_binaries([sourcesdir])
+- update = update_sources_threaded(topdir, added=binaries)
+- for path in binaries:
+- name = os.path.basename(path)
+- binpath = os.path.join(bindir, name)
+- os.rename(path, binpath)
+- try:
+- svn.remove(path)
+- except Error:
+- # file not tracked
+- svn.revert(path)
+- if checkout:
+- svn.add(binpath)
+- log = &quot;imported binaries for %s&quot; % pkgname
+- if checkout:
+- rev = svn.commit(bindir, log=log)
+- else:
+- rev = svn.import_(bintopdir, topurl, log=log)
+- svn.propset(PROP_USES_BINREPO, &quot;yes&quot;, topdir)
+- svn.propset(PROP_BINREPO_REV, str(rev), topdir)
+- update.join()
+- svn.add(sources_path(topdir))
+- finally:
+- shutil.rmtree(bintopdir)
+-
+-def create_package_dirs(bintopdir):
+- svn = SVN()
+- binurl = mirror._joinurl(bintopdir, BINARIES_DIR_NAME)
+- silent = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
+- message = &quot;%s: created binrepo package structure&quot; % silent
+- svn.mkdir(binurl, log=message, parents=True)
+-
+-def parse_sources(path):
+- entries = {}
+- f = open(path)
+- for rawline in f:
+- line = rawline.strip()
+- try:
+- sum, name = line.split(None, 1)
+- except ValueError:
+- # failed to unpack, line format error
+- raise Error, &quot;invalid line in sources file: %s&quot; % rawline
+- entries[name] = sum
+- return entries
+-
+-def check_hash(path, sum):
+- newsum = file_hash(path)
+- if newsum != sum:
+- raise ChecksumError, &quot;different checksums for %s: expected %s, &quot;\
+- &quot;but %s was found&quot; % (path, sum, newsum)
+-
+-def check_sources(topdir):
+- spath = sources_path(topdir)
+- if not os.path.exists(spath):
+- raise Error, &quot;'%s' was not found&quot; % spath
+- entries = parse_sources(spath)
+- for name, sum in entries.iteritems():
+- fpath = os.path.join(topdir, &quot;SOURCES&quot;, name)
+- check_hash(fpath, sum)
+-
+-def file_hash(path):
+- sum = hashlib.sha1()
+- f = open(path)
+- while True:
+- block = f.read(4096)
+- if not block:
+- break
+- sum.update(block)
+- f.close()
+- return sum.hexdigest()
+-
+-def sources_path(topdir):
+- path = os.path.join(topdir, &quot;SOURCES&quot;, SOURCES_FILE)
+- return path
+-
+-def update_sources(topdir, added=[], removed=[]):
+- path = sources_path(topdir)
+- entries = {}
+- if os.path.isfile(path):
+- entries = parse_sources(path)
+- f = open(path, &quot;w&quot;) # open before calculating hashes
+- for name in removed:
+- entries.pop(removed)
+- for added_path in added:
+- name = os.path.basename(added_path)
+- entries[name] = file_hash(added_path)
+- for name in sorted(entries):
+- f.write(&quot;%s %s\n&quot; % (entries[name], name))
+- f.close()
+-
+-def update_sources_threaded(*args, **kwargs):
+- t = threading.Thread(target=update_sources, args=args, kwargs=kwargs)
+- t.start()
+- return t
+-
+-def upload(path, message=None):
+- from RepSys.rpmutil import getpkgtopdir
+- svn = SVN()
+- if not os.path.exists(path):
+- raise Error, &quot;not found: %s&quot; % path
+- # XXX check if the path is under SOURCES/
+- paths = find_binaries([path])
+- if not paths:
+- raise Error, &quot;'%s' does not seem to have any tarballs&quot; % path
+- topdir = getpkgtopdir()
+- bintopdir = translate_topdir(topdir)
+- binurl = mirror._joinurl(bintopdir, BINARIES_DIR_NAME)
+- sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
+- bindir = os.path.join(topdir, BINARIES_CHECKOUT_NAME)
+- silent = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
+- if not os.path.exists(bindir):
+- try:
+- download(topdir, show=False)
+- except Error:
+- # possibly the package does not exist
+- # (TODO check whether it is really a 'path not found' error)
+- pass
+- if not os.path.exists(bindir):
+- create_package_dirs(bintopdir)
+- svn.propset(PROP_USES_BINREPO, &quot;yes&quot;, topdir)
+- svn.commit(topdir, log=&quot;%s: created binrepo structure&quot; % silent)
+- download(topdir, show=False)
+- for path in paths:
+- if svn.info2(path):
+- sys.stderr.write(&quot;'%s' is already tracked by svn, ignoring\n&quot; %
+- path)
+- continue
+- name = os.path.basename(path)
+- binpath = os.path.join(bindir, name)
+- os.rename(path, binpath)
+- svn.add(binpath)
+- if not message:
+- message = &quot;%s: new binary files %s&quot; % (silent, &quot; &quot;.join(paths))
+- make_symlinks(bindir, sourcesdir)
+- update = update_sources_threaded(topdir, added=paths)
+- rev = svn.commit(binpath, log=message)
+- svn.propset(PROP_BINREPO_REV, str(rev), topdir)
+- sources = sources_path(topdir)
+- svn.add(sources)
+- update.join()
+- svn.commit(topdir + &quot; &quot; + sources, log=message, nonrecursive=True)
+-
+-def mapped_revision(target, revision, wc=False):
+- &quot;&quot;&quot;Maps a txtrepo revision to a binrepo datespec
+-
+- This datespec can is intended to be used by svn .. -r DATE.
+-
+- @target: a working copy path or a URL
+- @revision: if target is a URL, the revision number used when fetching
+- svn info
+- @wc: if True indicates that 'target' must be interpreted as a
+- the path of a svn working copy, otherwise it is handled as a URL
+- &quot;&quot;&quot;
+- svn = SVN()
+- binrev = None
+- if wc:
+- spath = sources_path(target)
+- if os.path.exists(spath):
+- infolines = svn.info(spath, xml=True)
+- if infolines:
+- rawinfo = &quot;&quot;.join(infolines) # arg!
+- found = re.search(&quot;&lt;date&gt;(.*?)&lt;/date&gt;&quot;, rawinfo).groups()
+- date = found[0]
+- else:
+- raise Error, &quot;bogus 'svn info' for '%s'&quot; % spath
+- else:
+- raise Error, &quot;'%s' was not found&quot; % spath
+- else:
+- url = mirror._joinurl(target, sources_path(&quot;&quot;))
+- date = svn.propget(&quot;svn:date&quot;, url, rev=revision, revprop=True)
+- if not date:
+- raise Error, &quot;no valid date available for '%s'&quot; % url
+- binrev = &quot;{%s}&quot; % date
+- return binrev
+-
+-def markrelease(sourceurl, releasesurl, version, release, revision):
+- svn = SVN()
+- binrev = mapped_revision(sourceurl, revision)
+- binsource = translate_url(sourceurl)
+- binreleases = translate_url(releasesurl)
+- versiondir = mirror._joinurl(binreleases, version)
+- dest = mirror._joinurl(versiondir, release)
+- svn.mkdir(binreleases, noerror=1, log=&quot;created directory for releases&quot;)
+- svn.mkdir(versiondir, noerror=1, log=&quot;created directory for version %s&quot; % version)
+- svn.copy(binsource, dest, rev=binrev,
+- log=&quot;%%markrelease ver=%s rel=%s rev=%s binrev=%s&quot; % (version, release,
+- revision, binrev))
+
+Copied: build_system/repsys/tags/1.9.1/RepSys/binrepo.py (from rev 204, build_system/repsys/trunk/RepSys/binrepo.py)
+===================================================================
+--- build_system/repsys/tags/1.9.1/RepSys/binrepo.py (rev 0)
++++ build_system/repsys/tags/1.9.1/RepSys/binrepo.py 2011-01-04 16:17:04 UTC (rev 205)
+@@ -0,0 +1,394 @@
++from RepSys import Error, config, mirror, layout
++from RepSys.util import execcmd, rellink
++from RepSys.svn import SVN
++
++import sys
++import os
++import string
++import stat
++import shutil
++import re
++import tempfile
++import hashlib
++import urlparse
++import threading
++from cStringIO import StringIO
++
++DEFAULT_TARBALLS_REPO = &quot;/tarballs&quot;
++BINARIES_DIR_NAME = &quot;SOURCES&quot;
++BINARIES_CHECKOUT_NAME = &quot;SOURCES-bin&quot;
++
++PROP_USES_BINREPO = &quot;mdv:uses-binrepo&quot;
++PROP_BINREPO_REV = &quot;mdv:binrepo-rev&quot;
++
++BINREPOS_SECTION = &quot;binrepos&quot;
++
++SOURCES_FILE = &quot;sha1.lst&quot;
++
++class ChecksumError(Error):
++ pass
++
++def svn_baseurl(target):
++ svn = SVN()
++ info = svn.info2(target)
++ if info is None:
++ # unversioned resource
++ newtarget = os.path.dirname(target)
++ info = svn.info2(newtarget)
++ assert info is not None, &quot;svn_basedir should not be used with a &quot;\
++ &quot;non-versioned directory&quot;
++ root = info[&quot;Repository Root&quot;]
++ url = info[&quot;URL&quot;]
++ kind = info[&quot;Node Kind&quot;]
++ path = url[len(root):]
++ if kind == &quot;directory&quot;:
++ return url
++ basepath = os.path.dirname(path)
++ baseurl = mirror.normalize_path(url + &quot;/&quot; + basepath)
++ return baseurl
++
++def svn_root(target):
++ svn = SVN()
++ info = svn.info2(target)
++ if info is None:
++ newtarget = os.path.dirname(target)
++ info = svn.info2(newtarget)
++ assert info is not None
++ return info[&quot;Repository Root&quot;]
++
++def enabled(url):
++ #TODO use information from url to find out whether we have a binrepo
++ # available for this url
++ use = config.getbool(&quot;global&quot;, &quot;use-binaries-repository&quot;, False)
++ return use
++
++def default_repo():
++ base = config.get(&quot;global&quot;, &quot;binaries-repository&quot;, None)
++ if base is None:
++ default_parent = config.get(&quot;global&quot;, &quot;default_parent&quot;, None)
++ if default_parent is None:
++ raise Error, &quot;no binaries-repository nor default_parent &quot;\
++ &quot;configured&quot;
++ comps = urlparse.urlparse(default_parent)
++ base = comps[1] + &quot;:&quot; + DEFAULT_TARBALLS_REPO
++ return base
++
++def translate_url(url):
++ url = mirror.normalize_path(url)
++ main = mirror.normalize_path(layout.repository_url())
++ subpath = url[len(main)+1:]
++ # [binrepos]
++ # updates/2009.0 = svn+<A HREF="ssh://svn.mandriva.com/svn/binrepo/20090/">ssh://svn.mandriva.com/svn/binrepo/20090/</A>
++ ## svn+<A HREF="ssh://svn.mandriva.com/svn/packages/2009.0/trafshow/current">ssh://svn.mandriva.com/svn/packages/2009.0/trafshow/current</A>
++ ## would translate to
++ ## svn+<A HREF="ssh://svn.mandriva.com/svn/binrepo/20090/updates/trafshow/current/">ssh://svn.mandriva.com/svn/binrepo/20090/updates/trafshow/current/</A>
++ binbase = None
++ if BINREPOS_SECTION in config.sections():
++ for option, value in config.walk(BINREPOS_SECTION):
++ if subpath.startswith(option):
++ binbase = value
++ break
++ binurl = mirror._joinurl(binbase or default_repo(), subpath)
++ return binurl
++
++def translate_topdir(path):
++ &quot;&quot;&quot;Returns the URL in the binrepo from a given path inside a SVN
++ checkout directory.
++
++ @path: if specified, returns a URL in the binrepo whose path is the
++ same as the path inside the main repository.
++ &quot;&quot;&quot;
++ baseurl = svn_baseurl(path)
++ binurl = translate_url(baseurl)
++ target = mirror.normalize_path(binurl)
++ return target
++
++def is_binary(path):
++ raw = config.get(&quot;binrepo&quot;, &quot;upload-match&quot;,
++ &quot;\.(7z|Z|bin|bz2|cpio|db|deb|egg|gem|gz|jar|jisp|lzma|&quot;\
++ &quot;pdf|pgn\\.gz|pk3|rpm|rpm|run|sdz|smzip|tar|tbz|&quot;\
++ &quot;tbz2|tgz|ttf|uqm|wad|war|xar|xpi|zip)$&quot;)
++ maxsize = config.getint(&quot;binrepo&quot;, &quot;upload-match-size&quot;, &quot;1048576&quot;) # 1MiB
++ expr = re.compile(raw)
++ name = os.path.basename(path)
++ if expr.search(name):
++ return True
++ st = os.stat(path)
++ if st[stat.ST_SIZE] &gt;= maxsize:
++ return True
++ return False
++
++def find_binaries(paths):
++ new = []
++ for path in paths:
++ if os.path.isdir(path):
++ for name in os.listdir(path):
++ fpath = os.path.join(path, name)
++ if is_binary(fpath):
++ new.append(fpath)
++ else:
++ if is_binary(path):
++ new.append(path)
++ return new
++
++def make_symlinks(source, dest):
++ todo = []
++ tomove = []
++ for name in os.listdir(source):
++ path = os.path.join(source, name)
++ if not os.path.isdir(path) and not name.startswith(&quot;.&quot;):
++ destpath = os.path.join(dest, name)
++ linkpath = rellink(path, destpath)
++ if os.path.exists(destpath):
++ if (os.path.islink(destpath) and
++ os.readlink(destpath) == linkpath):
++ continue
++ movepath = destpath + &quot;.repsys-moved&quot;
++ if os.path.exists(movepath):
++ raise Error, &quot;cannot create symlink, %s already &quot;\
++ &quot;exists (%s too)&quot; % (destpath, movepath)
++ tomove.append((destpath, movepath))
++ todo.append((destpath, linkpath))
++ for destpath, movepath in tomove:
++ os.rename(destpath, movepath)
++ for destpath, linkpath in todo:
++ os.symlink(linkpath, destpath)
++
++def download(targetdir, pkgdirurl=None, export=False, show=True,
++ revision=None, symlinks=True, check=False):
++ assert not export or (export and pkgdirurl)
++ svn = SVN()
++ sourcespath = os.path.join(targetdir, &quot;SOURCES&quot;)
++ binpath = os.path.join(targetdir, BINARIES_CHECKOUT_NAME)
++ if pkgdirurl:
++ topurl = translate_url(pkgdirurl)
++ else:
++ topurl = translate_topdir(targetdir)
++ binrev = None
++ if revision:
++ if pkgdirurl:
++ binrev = mapped_revision(pkgdirurl, revision)
++ else:
++ binrev = mapped_revision(targetdir, revision, wc=True)
++ binurl = mirror._joinurl(topurl, BINARIES_DIR_NAME)
++ if export:
++ svn.export(binurl, binpath, rev=binrev, show=show)
++ else:
++ svn.checkout(binurl, binpath, rev=binrev, show=show)
++ if symlinks:
++ make_symlinks(binpath, sourcespath)
++ if check:
++ check_sources(targetdir)
++
++def import_binaries(topdir, pkgname):
++ &quot;&quot;&quot;Import all binaries from a given package checkout
++
++ (with pending svn adds)
++
++ @topdir: the path to the svn checkout
++ &quot;&quot;&quot;
++ svn = SVN()
++ topurl = translate_topdir(topdir)
++ sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
++ bintopdir = tempfile.mktemp(&quot;repsys&quot;)
++ try:
++ svn.checkout(topurl, bintopdir)
++ checkout = True
++ except Error:
++ bintopdir = tempfile.mkdtemp(&quot;repsys&quot;)
++ checkout = False
++ try:
++ bindir = os.path.join(bintopdir, BINARIES_DIR_NAME)
++ if not os.path.exists(bindir):
++ if checkout:
++ svn.mkdir(bindir)
++ else:
++ os.mkdir(bindir)
++ binaries = find_binaries([sourcesdir])
++ update = update_sources_threaded(topdir, added=binaries)
++ for path in binaries:
++ name = os.path.basename(path)
++ binpath = os.path.join(bindir, name)
++ os.rename(path, binpath)
++ try:
++ svn.remove(path)
++ except Error:
++ # file not tracked
++ svn.revert(path)
++ if checkout:
++ svn.add(binpath)
++ log = &quot;imported binaries for %s&quot; % pkgname
++ if checkout:
++ rev = svn.commit(bindir, log=log)
++ else:
++ rev = svn.import_(bintopdir, topurl, log=log)
++ svn.propset(PROP_USES_BINREPO, &quot;yes&quot;, topdir)
++ svn.propset(PROP_BINREPO_REV, str(rev), topdir)
++ update.join()
++ svn.add(sources_path(topdir))
++ finally:
++ shutil.rmtree(bintopdir)
++
++def create_package_dirs(bintopdir):
++ svn = SVN()
++ binurl = mirror._joinurl(bintopdir, BINARIES_DIR_NAME)
++ silent = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
++ message = &quot;%s: created binrepo package structure&quot; % silent
++ svn.mkdir(binurl, log=message, parents=True)
++
++def parse_sources(path):
++ entries = {}
++ f = open(path)
++ for rawline in f:
++ line = rawline.strip()
++ try:
++ sum, name = line.split(None, 1)
++ except ValueError:
++ # failed to unpack, line format error
++ raise Error, &quot;invalid line in sources file: %s&quot; % rawline
++ entries[name] = sum
++ return entries
++
++def check_hash(path, sum):
++ newsum = file_hash(path)
++ if newsum != sum:
++ raise ChecksumError, &quot;different checksums for %s: expected %s, &quot;\
++ &quot;but %s was found&quot; % (path, sum, newsum)
++
++def check_sources(topdir):
++ spath = sources_path(topdir)
++ if not os.path.exists(spath):
++ raise Error, &quot;'%s' was not found&quot; % spath
++ entries = parse_sources(spath)
++ for name, sum in entries.iteritems():
++ fpath = os.path.join(topdir, &quot;SOURCES&quot;, name)
++ check_hash(fpath, sum)
++
++def file_hash(path):
++ sum = hashlib.sha1()
++ f = open(path)
++ while True:
++ block = f.read(4096)
++ if not block:
++ break
++ sum.update(block)
++ f.close()
++ return sum.hexdigest()
++
++def sources_path(topdir):
++ path = os.path.join(topdir, &quot;SOURCES&quot;, SOURCES_FILE)
++ return path
++
++def update_sources(topdir, added=[], removed=[]):
++ path = sources_path(topdir)
++ entries = {}
++ if os.path.isfile(path):
++ entries = parse_sources(path)
++ f = open(path, &quot;w&quot;) # open before calculating hashes
++ for name in removed:
++ entries.pop(removed)
++ for added_path in added:
++ name = os.path.basename(added_path)
++ entries[name] = file_hash(added_path)
++ for name in sorted(entries):
++ f.write(&quot;%s %s\n&quot; % (entries[name], name))
++ f.close()
++
++def update_sources_threaded(*args, **kwargs):
++ t = threading.Thread(target=update_sources, args=args, kwargs=kwargs)
++ t.start()
++ t.join()
++ return t
++
++def upload(path, message=None):
++ from RepSys.rpmutil import getpkgtopdir
++ svn = SVN()
++ if not os.path.exists(path):
++ raise Error, &quot;not found: %s&quot; % path
++ # XXX check if the path is under SOURCES/
++ paths = find_binaries([path])
++ if not paths:
++ raise Error, &quot;'%s' does not seem to have any tarballs&quot; % path
++ topdir = getpkgtopdir()
++ bintopdir = translate_topdir(topdir)
++ binurl = mirror._joinurl(bintopdir, BINARIES_DIR_NAME)
++ sourcesdir = os.path.join(topdir, &quot;SOURCES&quot;)
++ bindir = os.path.join(topdir, BINARIES_CHECKOUT_NAME)
++ silent = config.get(&quot;log&quot;, &quot;ignore-string&quot;, &quot;SILENT&quot;)
++ if not os.path.exists(bindir):
++ try:
++ download(topdir, show=False)
++ except Error:
++ # possibly the package does not exist
++ # (TODO check whether it is really a 'path not found' error)
++ pass
++ if not os.path.exists(bindir):
++ create_package_dirs(bintopdir)
++ svn.propset(PROP_USES_BINREPO, &quot;yes&quot;, topdir)
++ svn.commit(topdir, log=&quot;%s: created binrepo structure&quot; % silent)
++ download(topdir, show=False)
++ for path in paths:
++ if svn.info2(path):
++ sys.stderr.write(&quot;'%s' is already tracked by svn, ignoring\n&quot; %
++ path)
++ continue
++ name = os.path.basename(path)
++ binpath = os.path.join(bindir, name)
++ os.rename(path, binpath)
++ svn.add(binpath)
++ if not message:
++ message = &quot;%s: new binary files %s&quot; % (silent, &quot; &quot;.join(paths))
++ make_symlinks(bindir, sourcesdir)
++ update = update_sources_threaded(topdir, added=paths)
++ rev = svn.commit(binpath, log=message)
++ svn.propset(PROP_BINREPO_REV, str(rev), topdir)
++ sources = sources_path(topdir)
++ svn.add(sources)
++ update.join()
++ svn.commit(topdir + &quot; &quot; + sources, log=message, nonrecursive=True)
++
++def mapped_revision(target, revision, wc=False):
++ &quot;&quot;&quot;Maps a txtrepo revision to a binrepo datespec
++
++ This datespec can is intended to be used by svn .. -r DATE.
++
++ @target: a working copy path or a URL
++ @revision: if target is a URL, the revision number used when fetching
++ svn info
++ @wc: if True indicates that 'target' must be interpreted as a
++ the path of a svn working copy, otherwise it is handled as a URL
++ &quot;&quot;&quot;
++ svn = SVN()
++ binrev = None
++ if wc:
++ spath = sources_path(target)
++ if os.path.exists(spath):
++ infolines = svn.info(spath, xml=True)
++ if infolines:
++ rawinfo = &quot;&quot;.join(infolines) # arg!
++ found = re.search(&quot;&lt;date&gt;(.*?)&lt;/date&gt;&quot;, rawinfo).groups()
++ date = found[0]
++ else:
++ raise Error, &quot;bogus 'svn info' for '%s'&quot; % spath
++ else:
++ raise Error, &quot;'%s' was not found&quot; % spath
++ else:
++ url = mirror._joinurl(target, sources_path(&quot;&quot;))
++ date = svn.propget(&quot;svn:date&quot;, url, rev=revision, revprop=True)
++ if not date:
++ raise Error, &quot;no valid date available for '%s'&quot; % url
++ binrev = &quot;{%s}&quot; % date
++ return binrev
++
++def markrelease(sourceurl, releasesurl, version, release, revision):
++ svn = SVN()
++ binrev = mapped_revision(sourceurl, revision)
++ binsource = translate_url(sourceurl)
++ binreleases = translate_url(releasesurl)
++ versiondir = mirror._joinurl(binreleases, version)
++ dest = mirror._joinurl(versiondir, release)
++ svn.mkdir(binreleases, noerror=1, log=&quot;created directory for releases&quot;)
++ svn.mkdir(versiondir, noerror=1, log=&quot;created directory for version %s&quot; % version)
++ svn.copy(binsource, dest, rev=binrev,
++ log=&quot;%%markrelease ver=%s rel=%s rev=%s binrev=%s&quot; % (version, release,
++ revision, binrev))
+
+Deleted: build_system/repsys/tags/1.9.1/repsys
+===================================================================
+--- build_system/repsys/trunk/repsys 2011-01-04 16:09:44 UTC (rev 202)
++++ build_system/repsys/tags/1.9.1/repsys 2011-01-04 16:17:04 UTC (rev 205)
+@@ -1,93 +0,0 @@
+-#!/usr/bin/python
+-from RepSys import Error, plugins, config
+-from RepSys.command import *
+-import getopt
+-import sys
+-
+-VERSION=&quot;1.9-binrepo&quot;
+-
+-HELP = &quot;&quot;&quot;\
+-Usage: repsys COMMAND [COMMAND ARGUMENTS]
+-
+-Tool to access and manage a package repository structure.
+-
+-<A HREF="http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart">http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart</A>
+-
+-Useful commands:
+- co checkout a package
+- ci commit changes
+- sync add-remove all file changes from the .spec
+- submit submit a package for build
+- putsrpm import a source package to the repository
+- getspec prints the spec
+- rpmlog prints the RPM changelog
+- getsrpm creates the source RPM
+- create create the structure of a new package
+- changed shows changes not submitted
+- authoremail prints the e-mail of a given author
+- switch relocate to mirror or upstream repository
+-
+-Run &quot;repsys COMMAND --help&quot; and &quot;man 8 repsys&quot; for more information.
+-
+-Written by Gustavo Niemeyer &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">gustavo at niemeyer.net</A>&gt;
+-&quot;&quot;&quot;
+-
+-command_aliases = {&quot;import&quot;: &quot;putsrpm&quot;}
+-
+-def plugin_help(opt, val, parser, mode):
+- if parser is None:
+- prog = sys.argv[0]
+- print &quot;Use %s --help-plugin &lt;plugin name&gt;&quot; % prog
+- print &quot;Available plugins:&quot;
+- print
+- for name in plugins.list():
+- print name
+- else:
+- print plugins.help(parser)
+- raise SystemExit
+-
+-def parse_options():
+- parser = OptionParser(help=HELP, version=&quot;%prog &quot;+VERSION)
+- parser.disable_interspersed_args()
+- parser.add_option(&quot;--debug&quot;, action=&quot;store_true&quot;)
+- parser.add_option(&quot;--help-plugins&quot;, action=&quot;callback&quot;, callback=plugin_help)
+- parser.add_option(&quot;--help-plugin&quot;, type=&quot;string&quot;, dest=&quot;__ignore&quot;,
+- action=&quot;callback&quot;, callback=plugin_help)
+- opts, args = parser.parse_args()
+- del opts.__ignore
+- if len(args) &lt; 1:
+- parser.print_help(sys.stderr)
+- sys.exit(1)
+- opts.command = args[0]
+- opts.argv = args
+- return opts
+-
+-def dispatch_command(command, argv, debug=0):
+- sys.argv = argv
+- try:
+- command = command_aliases[command]
+- except KeyError:
+- pass
+- if debug:
+- config.set(&quot;global&quot;, &quot;verbose&quot;, &quot;yes&quot;)
+- try:
+- repsys_module = __import__(&quot;RepSys.commands.&quot;+command)
+- commands_module = getattr(repsys_module, &quot;commands&quot;)
+- command_module = getattr(commands_module, command)
+- except (ImportError, AttributeError):
+- etype, exc, tb = sys.exc_info()
+- if tb.tb_next is None and not debug:
+- raise Error, &quot;invalid command '%s'&quot; % command
+- raise
+- command_module.main()
+-
+-if __name__ == &quot;__main__&quot;:
+- try:
+- plugins.load()
+- except Error, e:
+- sys.stderr.write(&quot;plugin initialization error: %s\n&quot; % e)
+- sys.exit(1)
+- config.set(&quot;global&quot;, &quot;repsys-cmd&quot;, sys.argv[0])
+- do_command(parse_options, dispatch_command)
+-
+-# vim:et:ts=4:sw=4
+
+Copied: build_system/repsys/tags/1.9.1/repsys (from rev 204, build_system/repsys/trunk/repsys)
+===================================================================
+--- build_system/repsys/tags/1.9.1/repsys (rev 0)
++++ build_system/repsys/tags/1.9.1/repsys 2011-01-04 16:17:04 UTC (rev 205)
+@@ -0,0 +1,93 @@
++#!/usr/bin/python
++from RepSys import Error, plugins, config
++from RepSys.command import *
++import getopt
++import sys
++
++VERSION=&quot;1.9.1-binrepo&quot;
++
++HELP = &quot;&quot;&quot;\
++Usage: repsys COMMAND [COMMAND ARGUMENTS]
++
++Tool to access and manage a package repository structure.
++
++<A HREF="http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart">http://wiki.mandriva.com/en/Development/Packaging/RepositorySystem/Quickstart</A>
++
++Useful commands:
++ co checkout a package
++ ci commit changes
++ sync add-remove all file changes from the .spec
++ submit submit a package for build
++ putsrpm import a source package to the repository
++ getspec prints the spec
++ rpmlog prints the RPM changelog
++ getsrpm creates the source RPM
++ create create the structure of a new package
++ changed shows changes not submitted
++ authoremail prints the e-mail of a given author
++ switch relocate to mirror or upstream repository
++
++Run &quot;repsys COMMAND --help&quot; and &quot;man 8 repsys&quot; for more information.
++
++Written by Gustavo Niemeyer &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">gustavo at niemeyer.net</A>&gt;
++&quot;&quot;&quot;
++
++command_aliases = {&quot;import&quot;: &quot;putsrpm&quot;}
++
++def plugin_help(opt, val, parser, mode):
++ if parser is None:
++ prog = sys.argv[0]
++ print &quot;Use %s --help-plugin &lt;plugin name&gt;&quot; % prog
++ print &quot;Available plugins:&quot;
++ print
++ for name in plugins.list():
++ print name
++ else:
++ print plugins.help(parser)
++ raise SystemExit
++
++def parse_options():
++ parser = OptionParser(help=HELP, version=&quot;%prog &quot;+VERSION)
++ parser.disable_interspersed_args()
++ parser.add_option(&quot;--debug&quot;, action=&quot;store_true&quot;)
++ parser.add_option(&quot;--help-plugins&quot;, action=&quot;callback&quot;, callback=plugin_help)
++ parser.add_option(&quot;--help-plugin&quot;, type=&quot;string&quot;, dest=&quot;__ignore&quot;,
++ action=&quot;callback&quot;, callback=plugin_help)
++ opts, args = parser.parse_args()
++ del opts.__ignore
++ if len(args) &lt; 1:
++ parser.print_help(sys.stderr)
++ sys.exit(1)
++ opts.command = args[0]
++ opts.argv = args
++ return opts
++
++def dispatch_command(command, argv, debug=0):
++ sys.argv = argv
++ try:
++ command = command_aliases[command]
++ except KeyError:
++ pass
++ if debug:
++ config.set(&quot;global&quot;, &quot;verbose&quot;, &quot;yes&quot;)
++ try:
++ repsys_module = __import__(&quot;RepSys.commands.&quot;+command)
++ commands_module = getattr(repsys_module, &quot;commands&quot;)
++ command_module = getattr(commands_module, command)
++ except (ImportError, AttributeError):
++ etype, exc, tb = sys.exc_info()
++ if tb.tb_next is None and not debug:
++ raise Error, &quot;invalid command '%s'&quot; % command
++ raise
++ command_module.main()
++
++if __name__ == &quot;__main__&quot;:
++ try:
++ plugins.load()
++ except Error, e:
++ sys.stderr.write(&quot;plugin initialization error: %s\n&quot; % e)
++ sys.exit(1)
++ config.set(&quot;global&quot;, &quot;repsys-cmd&quot;, sys.argv[0])
++ do_command(parse_options, dispatch_command)
++
++# vim:et:ts=4:sw=4
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110104/71eaa748/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001501.html">[Mageia-sysadm] [204] fix problem with python threads on 2010.1
+</A></li>
+ <LI>Next message: <A HREF="001505.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1503">[ date ]</a>
+ <a href="thread.html#1503">[ thread ]</a>
+ <a href="subject.html#1503">[ subject ]</a>
+ <a href="author.html#1503">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001504.html b/zarb-ml/mageia-sysadm/2011-January/001504.html
new file mode 100644
index 000000000..5dc722da5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001504.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [LONG] new server to name and password handling
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C201101041731.51631.rapsys%40rapsys.eu%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001499.html">
+ <LINK REL="Next" HREF="001517.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [LONG] new server to name and password handling</H1>
+ <B>Rapha&#235;l Gertz</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C201101041731.51631.rapsys%40rapsys.eu%3E"
+ TITLE="[Mageia-sysadm] [LONG] new server to name and password handling">rapsys at rapsys.eu
+ </A><BR>
+ <I>Tue Jan 4 17:31:48 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001499.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001517.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1504">[ date ]</a>
+ <a href="thread.html#1504">[ thread ]</a>
+ <a href="subject.html#1504">[ subject ]</a>
+ <a href="author.html#1504">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le mardi 04 janvier 2011 16:45:53, Luca Berra a &#233;crit :
+&gt;<i> On Mon, Jan 03, 2011 at 02:00:40AM +0100, Michael Scherer wrote:
+</I>&gt;<i> &gt;Online.net, thanks to Raphael Gertz efforts. The specs ( in french, I
+</I>&gt;<i> &gt;can translate if Babelfish is not enough ) are here :
+</I>&gt;<i> &gt;<A HREF="http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml">http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml</A>
+</I>Server will be upgraded tonight (powered off few minutes) with 16GB ram + idrac
+entreprise card. (it was planed to be done around 22-23h pm today)
+
+The processor support hw virtualisation if you want with 8 physical core.
+
+&gt;<i> &gt;Why raid 0 ( or 1+0 ) ? The server main use will be iso creation ( for
+</I>&gt;<i>
+</I>&gt;<i> the dell R210 in the specs only has space for two SATA drives (uning the
+</I>&gt;<i> integrated Perc Raid Controller)
+</I>&gt;<i> so it will probably be configurd as a HW mirror, and that's it.
+</I>
+It is configured ad RAID1 by default, you see only one big hard disk.
+
+You have 2 way to achive what you want :
+- setup with web access a mdv2010.1 without lvm on the hw card
+- re-setup completely the raid from bios, then install with a live-cd through
+network using the kvm+virtual media. (you need to do a dummy install first +
+wait tomorow for that)
+
+&gt;<i> So we need to :
+</I>&gt;<i> - define the list of login/password/url to store there. On top of my
+</I>&gt;<i> head, I would say :
+</I>&gt;<i> - web interface for online.net ( anne and I )
+</I>&gt;<i> - impi interface password ( not set yet )
+</I>Ipmi isn't accessible publicly (reboot feature and virtual kvm is avaible in
+online web interface).
+
+&gt;<i> - bios password, if any, ( I think we didn't set them )
+</I>Plz don't set bios password.
+
+&gt;<i> - dns domain at gandi.net, ( romain should have it )
+</I>If you transfer it on online account i can flag the domain(s) as gift (plz just
+wait wednesday for the xfer).
+
+Best regards
+</PRE>
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001499.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001517.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1504">[ date ]</a>
+ <a href="thread.html#1504">[ thread ]</a>
+ <a href="subject.html#1504">[ subject ]</a>
+ <a href="author.html#1504">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001505.html b/zarb-ml/mageia-sysadm/2011-January/001505.html
new file mode 100644
index 000000000..5f87f2be5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001505.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Another fix for repsys...
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Another%20fix%20for%20repsys...&In-Reply-To=%3C4D239646.902%40iki.fi%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001503.html">
+ <LINK REL="Next" HREF="001507.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Another fix for repsys...</H1>
+ <B>Thomas Backlund</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Another%20fix%20for%20repsys...&In-Reply-To=%3C4D239646.902%40iki.fi%3E"
+ TITLE="[Mageia-sysadm] Another fix for repsys...">tmb at iki.fi
+ </A><BR>
+ <I>Tue Jan 4 22:51:02 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001503.html">[Mageia-sysadm] [205] version 1.9.1
+</A></li>
+ <LI>Next message: <A HREF="001507.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1505">[ date ]</a>
+ <a href="thread.html#1505">[ thread ]</a>
+ <a href="subject.html#1505">[ subject ]</a>
+ <a href="author.html#1505">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi,
+Another fix for repsys is needed...
+
+It was missing xz for files belonging in binrepo
+
+And I dont have commit access to /soft so:
+
+Patch (also attached):
+<A HREF="http://tmb.mine.nu/Mageia/Cauldron/Patches/repsys-binrepo-xz.patch">http://tmb.mine.nu/Mageia/Cauldron/Patches/repsys-binrepo-xz.patch</A>
+
+SRPMS:
+<A HREF="http://tmb.mine.nu/Mageia/Cauldron/SRPMS/repsys-1.9.1-1.1.mga1.src.rpm">http://tmb.mine.nu/Mageia/Cauldron/SRPMS/repsys-1.9.1-1.1.mga1.src.rpm</A>
+
+noarch:
+<A HREF="http://tmb.mine.nu/Mageia/Cauldron/noarch/repsys-1.9.1-1.1.mga1.noarch.rpm">http://tmb.mine.nu/Mageia/Cauldron/noarch/repsys-1.9.1-1.1.mga1.noarch.rpm</A>
+<A HREF="http://tmb.mine.nu/Mageia/Cauldron/noarch/repsys-ldap-1.9.1-1.1.mga1.noarch.rpm">http://tmb.mine.nu/Mageia/Cauldron/noarch/repsys-ldap-1.9.1-1.1.mga1.noarch.rpm</A>
+
+--
+Thomas
+-------------- next part --------------
+A non-text attachment was scrubbed...
+Name: repsys-binrepo-xz.patch
+Type: text/x-patch
+Size: 651 bytes
+Desc: not available
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110104/e90047dd/attachment.bin&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001503.html">[Mageia-sysadm] [205] version 1.9.1
+</A></li>
+ <LI>Next message: <A HREF="001507.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1505">[ date ]</a>
+ <a href="thread.html#1505">[ thread ]</a>
+ <a href="subject.html#1505">[ subject ]</a>
+ <a href="author.html#1505">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001506.html b/zarb-ml/mageia-sysadm/2011-January/001506.html
new file mode 100644
index 000000000..c355410aa
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001506.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B206%5D%20add%20.xz%20files%20belonging%20in%20binrepo%20%28patch%0A%09from%20tmb%29&In-Reply-To=%3C20110104233459.3BA15418B5%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001507.html">
+ <LINK REL="Next" HREF="001508.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B206%5D%20add%20.xz%20files%20belonging%20in%20binrepo%20%28patch%0A%09from%20tmb%29&In-Reply-To=%3C20110104233459.3BA15418B5%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 00:34:59 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001507.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI>Next message: <A HREF="001508.html">[Mageia-sysadm] [207] version 1.9.2
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1506">[ date ]</a>
+ <a href="thread.html#1506">[ thread ]</a>
+ <a href="subject.html#1506">[ subject ]</a>
+ <a href="author.html#1506">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 206
+Author: boklm
+Date: 2011-01-05 00:34:58 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+add .xz files belonging in binrepo (patch from tmb)
+
+Modified Paths:
+--------------
+ build_system/repsys/trunk/RepSys/binrepo.py
+
+Modified: build_system/repsys/trunk/RepSys/binrepo.py
+===================================================================
+--- build_system/repsys/trunk/RepSys/binrepo.py 2011-01-04 16:17:04 UTC (rev 205)
++++ build_system/repsys/trunk/RepSys/binrepo.py 2011-01-04 23:34:58 UTC (rev 206)
+@@ -107,7 +107,7 @@
+ raw = config.get(&quot;binrepo&quot;, &quot;upload-match&quot;,
+ &quot;\.(7z|Z|bin|bz2|cpio|db|deb|egg|gem|gz|jar|jisp|lzma|&quot;\
+ &quot;pdf|pgn\\.gz|pk3|rpm|rpm|run|sdz|smzip|tar|tbz|&quot;\
+- &quot;tbz2|tgz|ttf|uqm|wad|war|xar|xpi|zip)$&quot;)
++ &quot;tbz2|tgz|ttf|uqm|wad|war|xar|xpi|xz|zip)$&quot;)
+ maxsize = config.getint(&quot;binrepo&quot;, &quot;upload-match-size&quot;, &quot;1048576&quot;) # 1MiB
+ expr = re.compile(raw)
+ name = os.path.basename(path)
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/6a4d43b3/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001507.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI>Next message: <A HREF="001508.html">[Mageia-sysadm] [207] version 1.9.2
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1506">[ date ]</a>
+ <a href="thread.html#1506">[ thread ]</a>
+ <a href="subject.html#1506">[ subject ]</a>
+ <a href="author.html#1506">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001507.html b/zarb-ml/mageia-sysadm/2011-January/001507.html
new file mode 100644
index 000000000..31994fe8d
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001507.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Another fix for repsys...
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Another%20fix%20for%20repsys...&In-Reply-To=%3C20110104233922.GG21938%40mars-attacks.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001505.html">
+ <LINK REL="Next" HREF="001506.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Another fix for repsys...</H1>
+ <B>nicolas vigier</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Another%20fix%20for%20repsys...&In-Reply-To=%3C20110104233922.GG21938%40mars-attacks.org%3E"
+ TITLE="[Mageia-sysadm] Another fix for repsys...">boklm at mars-attacks.org
+ </A><BR>
+ <I>Wed Jan 5 00:39:22 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001505.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI>Next message: <A HREF="001506.html">[Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1507">[ date ]</a>
+ <a href="thread.html#1507">[ thread ]</a>
+ <a href="subject.html#1507">[ subject ]</a>
+ <a href="author.html#1507">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>On Tue, 04 Jan 2011, Thomas Backlund wrote:
+
+&gt;<i> Hi,
+</I>&gt;<i> Another fix for repsys is needed...
+</I>&gt;<i>
+</I>&gt;<i> It was missing xz for files belonging in binrepo
+</I>&gt;<i>
+</I>&gt;<i> And I dont have commit access to /soft so:
+</I>
+Ok, I've commited your patch. And fixed permissions on /soft so you have
+commit access.
+
+</PRE>
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001505.html">[Mageia-sysadm] Another fix for repsys...
+</A></li>
+ <LI>Next message: <A HREF="001506.html">[Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1507">[ date ]</a>
+ <a href="thread.html#1507">[ thread ]</a>
+ <a href="subject.html#1507">[ subject ]</a>
+ <a href="author.html#1507">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001508.html b/zarb-ml/mageia-sysadm/2011-January/001508.html
new file mode 100644
index 000000000..cfa3c38f5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001508.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [207] version 1.9.2
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B207%5D%20version%201.9.2&In-Reply-To=%3C20110104234339.ADA81418B7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001506.html">
+ <LINK REL="Next" HREF="001509.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [207] version 1.9.2</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B207%5D%20version%201.9.2&In-Reply-To=%3C20110104234339.ADA81418B7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [207] version 1.9.2">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 00:43:39 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001506.html">[Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)
+</A></li>
+ <LI>Next message: <A HREF="001509.html">[Mageia-sysadm] [208] version 1.9.2
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1508">[ date ]</a>
+ <a href="thread.html#1508">[ thread ]</a>
+ <a href="subject.html#1508">[ subject ]</a>
+ <a href="author.html#1508">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 207
+Author: boklm
+Date: 2011-01-05 00:43:39 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+version 1.9.2
+
+Modified Paths:
+--------------
+ build_system/repsys/trunk/CHANGES
+ build_system/repsys/trunk/repsys
+
+Modified: build_system/repsys/trunk/CHANGES
+===================================================================
+--- build_system/repsys/trunk/CHANGES 2011-01-04 23:34:58 UTC (rev 206)
++++ build_system/repsys/trunk/CHANGES 2011-01-04 23:43:39 UTC (rev 207)
+@@ -1,3 +1,6 @@
++* 1.9.2-binrepo
++- add .xz files in binrepo
++
+ * 1.9.1-binrepo
+ - fix problem with python threads on 2010.1
+
+
+Modified: build_system/repsys/trunk/repsys
+===================================================================
+--- build_system/repsys/trunk/repsys 2011-01-04 23:34:58 UTC (rev 206)
++++ build_system/repsys/trunk/repsys 2011-01-04 23:43:39 UTC (rev 207)
+@@ -4,7 +4,7 @@
+ import getopt
+ import sys
+
+-VERSION=&quot;1.9.1-binrepo&quot;
++VERSION=&quot;1.9.2-binrepo&quot;
+
+ HELP = &quot;&quot;&quot;\
+ Usage: repsys COMMAND [COMMAND ARGUMENTS]
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/643d1b25/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001506.html">[Mageia-sysadm] [206] add .xz files belonging in binrepo (patch from tmb)
+</A></li>
+ <LI>Next message: <A HREF="001509.html">[Mageia-sysadm] [208] version 1.9.2
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1508">[ date ]</a>
+ <a href="thread.html#1508">[ thread ]</a>
+ <a href="subject.html#1508">[ subject ]</a>
+ <a href="author.html#1508">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001509.html b/zarb-ml/mageia-sysadm/2011-January/001509.html
new file mode 100644
index 000000000..f046b9fed
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001509.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [208] version 1.9.2
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B208%5D%20version%201.9.2&In-Reply-To=%3C20110104234441.E47E0418B7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001508.html">
+ <LINK REL="Next" HREF="001510.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [208] version 1.9.2</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B208%5D%20version%201.9.2&In-Reply-To=%3C20110104234441.E47E0418B7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [208] version 1.9.2">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 00:44:41 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001508.html">[Mageia-sysadm] [207] version 1.9.2
+</A></li>
+ <LI>Next message: <A HREF="001510.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1509">[ date ]</a>
+ <a href="thread.html#1509">[ thread ]</a>
+ <a href="subject.html#1509">[ subject ]</a>
+ <a href="author.html#1509">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 208
+Author: boklm
+Date: 2011-01-05 00:44:41 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+version 1.9.2
+
+Added Paths:
+-----------
+ build_system/repsys/tags/1.9.2/
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/effa0b80/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001508.html">[Mageia-sysadm] [207] version 1.9.2
+</A></li>
+ <LI>Next message: <A HREF="001510.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1509">[ date ]</a>
+ <a href="thread.html#1509">[ thread ]</a>
+ <a href="subject.html#1509">[ subject ]</a>
+ <a href="author.html#1509">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001510.html b/zarb-ml/mageia-sysadm/2011-January/001510.html
new file mode 100644
index 000000000..bc47ddc86
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001510.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for alamut.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20alamut.mageia.org&In-Reply-To=%3C20110105005220.5F4FD418C5%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001509.html">
+ <LINK REL="Next" HREF="001511.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for alamut.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20alamut.mageia.org&In-Reply-To=%3C20110105005220.5F4FD418C5%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for alamut.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Wed Jan 5 01:52:20 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001509.html">[Mageia-sysadm] [208] version 1.9.2
+</A></li>
+ <LI>Next message: <A HREF="001511.html">[Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1510">[ date ]</a>
+ <a href="thread.html#1510">[ thread ]</a>
+ <a href="subject.html#1510">[ subject ]</a>
+ <a href="author.html#1510">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Wed Jan 05 01:52:17 +0100 2011 /Stage[main]/Mga-mirrors/Postgresql::User[mirrors]/Exec[psql -U postgres -c &quot;CREATE ROLE mirrors ENCRYPTED PASSWORD '$pass' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;&quot; ]/unless (err): Check &quot;psql -A -t -U postgres -c '\\du mirrors' | grep 'mirrors'&quot; exceeded timeout
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001509.html">[Mageia-sysadm] [208] version 1.9.2
+</A></li>
+ <LI>Next message: <A HREF="001511.html">[Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1510">[ date ]</a>
+ <a href="thread.html#1510">[ thread ]</a>
+ <a href="subject.html#1510">[ subject ]</a>
+ <a href="author.html#1510">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001511.html b/zarb-ml/mageia-sysadm/2011-January/001511.html
new file mode 100644
index 000000000..ca0b19261
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001511.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B653%5D%20-%20do%20not%20try%20to%20do%20ssl%20when%20we%20cannot%2C%0A%09this%20confuse%20epoll&In-Reply-To=%3C20110105005940.0C1C9418C5%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001510.html">
+ <LINK REL="Next" HREF="001512.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B653%5D%20-%20do%20not%20try%20to%20do%20ssl%20when%20we%20cannot%2C%0A%09this%20confuse%20epoll&In-Reply-To=%3C20110105005940.0C1C9418C5%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 01:59:39 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001510.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001512.html">[Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1511">[ date ]</a>
+ <a href="thread.html#1511">[ thread ]</a>
+ <a href="subject.html#1511">[ subject ]</a>
+ <a href="author.html#1511">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 653
+Author: misc
+Date: 2011-01-05 01:59:39 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- do not try to do ssl when we cannot, this confuse epoll
+
+Modified Paths:
+--------------
+ puppet/modules/postfix/templates/main.cf
+
+Modified: puppet/modules/postfix/templates/main.cf
+===================================================================
+--- puppet/modules/postfix/templates/main.cf 2011-01-03 18:00:40 UTC (rev 652)
++++ puppet/modules/postfix/templates/main.cf 2011-01-05 00:59:39 UTC (rev 653)
+@@ -62,10 +62,12 @@
+ unknown_local_recipient_reject_code = 450
+ smtp-filter_destination_concurrency_limit = 2
+ lmtp-filter_destination_concurrency_limit = 2
+-smtpd_use_tls = yes
+-smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
+-smtpd_tls_key_file = /etc/pki/tls/private/postfix.pem
+-smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
++# disabled for the time being, as the certificate do not exist
++# FIXME create the cert in puppet
++smtpd_use_tls = no
++#smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
++#smtpd_tls_key_file = /etc/pki/tls/private/postfix.pem
++#smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
+
+ &lt;%- if all_tags.include?('postfix::smtp_server') -%&gt;
+ smtpd_etrn_restrictions = reject
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/feb9fe4b/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001510.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001512.html">[Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1511">[ date ]</a>
+ <a href="thread.html#1511">[ thread ]</a>
+ <a href="subject.html#1511">[ subject ]</a>
+ <a href="author.html#1511">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001512.html b/zarb-ml/mageia-sysadm/2011-January/001512.html
new file mode 100644
index 000000000..eb1918c29
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001512.html
@@ -0,0 +1,6058 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B209%5D%20add%20mandriva%20version%20of%20youri-submit%2C%0A%20downloaded%20from%20http%3A//svn.%0A%20mandriva.com/svn/soft/build_system/youri/submit/trunk%20at%20revision%20271600&In-Reply-To=%3C20110105131906.65E664193F%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001511.html">
+ <LINK REL="Next" HREF="001513.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B209%5D%20add%20mandriva%20version%20of%20youri-submit%2C%0A%20downloaded%20from%20http%3A//svn.%0A%20mandriva.com/svn/soft/build_system/youri/submit/trunk%20at%20revision%20271600&In-Reply-To=%3C20110105131906.65E664193F%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 14:19:06 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001511.html">[Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll
+</A></li>
+ <LI>Next message: <A HREF="001513.html">[Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1512">[ date ]</a>
+ <a href="thread.html#1512">[ thread ]</a>
+ <a href="subject.html#1512">[ subject ]</a>
+ <a href="author.html#1512">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 209
+Author: boklm
+Date: 2011-01-05 14:19:06 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+add mandriva version of youri-submit, downloaded from <A HREF="http://svn.mandriva.com/svn/soft/build_system/youri/submit/trunk">http://svn.mandriva.com/svn/soft/build_system/youri/submit/trunk</A> at revision 271600
+
+Added Paths:
+-----------
+ build_system/mdv-youri-submit/
+ build_system/mdv-youri-submit/branches/
+ build_system/mdv-youri-submit/tags/
+ build_system/mdv-youri-submit/trunk/
+ build_system/mdv-youri-submit/trunk/ChangeLog
+ build_system/mdv-youri-submit/trunk/MANIFEST.SKIP
+ build_system/mdv-youri-submit/trunk/Makefile.PL
+ build_system/mdv-youri-submit/trunk/README
+ build_system/mdv-youri-submit/trunk/TODO
+ build_system/mdv-youri-submit/trunk/bin/
+ build_system/mdv-youri-submit/trunk/bin/youri-check.in
+ build_system/mdv-youri-submit/trunk/bin/youri-submit
+ build_system/mdv-youri-submit/trunk/bin/youri-submit-proxy.in
+ build_system/mdv-youri-submit/trunk/bin/youri-submit-restricted.in
+ build_system/mdv-youri-submit/trunk/bin/youri-submit.in
+ build_system/mdv-youri-submit/trunk/etc/
+ build_system/mdv-youri-submit/trunk/etc/bash_completion.d/
+ build_system/mdv-youri-submit/trunk/etc/bash_completion.d/youri-submit
+ build_system/mdv-youri-submit/trunk/etc/submit.conf
+ build_system/mdv-youri-submit/trunk/lib/
+ build_system/mdv-youri-submit/trunk/lib/Youri/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Archive.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Bugzilla.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/CVS.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Clean.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/DkmsModuleInfo.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Install.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Link.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Mail.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Markrelease.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/RSS.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Rpminfo.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Send.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sendcache.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sign.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Unpack.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/UpdateMdvDb.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/ACL.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/History.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Host.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Precedence.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Queue_recency.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Recency.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Rpmlint.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/SVN.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Section.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Source.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Tag.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Type.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Version.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Plugin.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/CleanRpmsrate.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Gendistrib.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Genhdlist2.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre/Rsync.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Archive.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Clean.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Install.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Mail.pm
+ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject.pm
+ build_system/mdv-youri-submit/trunk/t/
+ build_system/mdv-youri-submit/trunk/t/00distribution.t
+
+Added: build_system/mdv-youri-submit/trunk/ChangeLog
+===================================================================
+--- build_system/mdv-youri-submit/trunk/ChangeLog (rev 0)
++++ build_system/mdv-youri-submit/trunk/ChangeLog 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,606 @@
++2008-02-19 07:50 pixel
++
++ * lib/Youri/Submit/Action/Unpack.pm: fix &quot;grep_files&quot; handling
++
++2008-02-12 09:42 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: do not make rpmlint errors
++ fatal anymore (asked by fcrozat)
++
++2008-02-08 17:49 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: remove results occurences and
++ update doc
++
++2008-02-08 17:48 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: make all rpmlint errors fatal
++
++2008-02-08 17:44 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: removed unneeded parentheses
++
++2008-02-08 17:44 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: make clear
++ repository/target/define are unused
++
++2008-02-08 17:43 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: use scalar for fd
++
++2008-01-31 16:35 pixel
++
++ * lib/Youri/Submit/Action/Link.pm: also call -&gt;set_arch_changed
++ when linking a noarch file to another arch
++ (this still doesn't explain media/media_info/MD5SUM not being
++ remade, but it
++ can help...)
++
++2007-12-21 14:37 blino
++
++ * bin/youri-submit.in: merge youri-submit into youri-submit.in
++
++2007-12-19 13:43 blino
++
++ * lib/Youri/Submit/Action/Archive.pm: only log main/updates
++ modifications, not contrib/updates or non-free/updates which are
++ legal
++
++2007-12-19 13:37 blino
++
++ * lib/Youri/Submit/Action/Archive.pm: add spuk's debug code for bug
++ 34999
++
++2007-12-17 19:45 blino
++
++ * bin/youri-submit: add an &quot;allow_omitting_packages&quot; global option,
++ to be able to run youri even if no packages are specified on the
++ command line (useful if packages are fetched in pre action)
++
++2007-12-17 19:34 blino
++
++ * bin/youri-submit: improve error messages for pres/posts actions
++ (patch from raoh's copy, probably from warly)
++
++2007-12-17 19:33 blino
++
++ * bin/youri-submit: fix typo about posts actions (patch from raoh's
++ copy, probably from warly)
++
++2007-12-13 15:01 pixel
++
++ * lib/Youri/Submit/Check/Version.pm: - empty {authorized_users}
++ doesn't imply every one is allowed to bypass freeze check!
++ - {authorized_users} should be checked more strictly
++
++2007-12-07 18:26 spuk
++
++ * lib/Youri/Submit/Action/Sendcache.pm: - make Sendcache send debug
++ packages only if explicitly told to, to save space
++
++2007-11-30 19:29 spuk
++
++ * lib/Youri/Submit/Action/UpdateMdvDb.pm: Youri action to update
++ the Mandriva maintainers database.
++
++2007-10-04 20:07 blino
++
++ * lib/Youri/Submit/Check/Host.pm: make host reject message more
++ explicit by print arch (useful when VMware-player for x86_64
++ actually uses i386 as rpm arch...)
++
++2007-09-26 11:21 blino
++
++ * lib/Youri/Submit/Action/Install.pm: improve log message
++
++2007-09-26 11:19 blino
++
++ * lib/Youri/Submit/Action/Install.pm: fix installed filename (oops)
++
++2007-09-26 09:58 blino
++
++ * lib/Youri/Submit/Action/Install.pm: throw exception on failure,
++ not to delete files that can be copied because of lack of space
++ (upstream commit 1398)
++
++2007-09-25 10:49 pixel
++
++ * lib/Youri/Submit/Action/Unpack.pm: allow to unpack only some
++ files (for release-notes.txt in mandriva-release-common)
++
++2007-09-22 13:11 blino
++
++ * lib/Youri/Submit/Check/Version.pm: allow authorized users to
++ upload everything even during full freeze
++
++2007-08-31 12:51 pixel
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: handle new rpmlint format
++ (not useful at the moment since we still use old rpmlint, but may
++ be useful in
++ the future)
++
++2007-08-31 10:03 blino
++
++ * lib/Youri/Submit/Action/DkmsModuleInfo.pm: adapt to new
++ SOURCEPACKAGE value in prebuilt dkms kernel
++
++2007-08-29 13:21 blino
++
++ * lib/Youri/Submit/Action/DkmsModuleInfo.pm: initial
++ Youri::Submit::Action::DkmsModuleInfo module
++
++2007-08-07 12:50 pixel
++
++ * lib/Youri/Submit/Action/Link.pm: we need the same workaround as
++ done in Action::Install
++
++2007-07-16 09:27 blino
++
++ * lib/Youri/Submit/Post/Genhdlist2.pm: remove unused variable
++
++2007-07-08 02:44 spuk
++
++ * lib/Youri/Submit/Check/Recency.pm: - check for newer/current
++ revisions in default section when submitted to another section
++ (bug #30635)
++
++2007-07-02 09:17 pixel
++
++ * lib/Youri/Submit/Action/CVS.pm: drop mdv specific stuff (mdv
++ doesn't use this action anymore)
++
++2007-06-28 07:40 pixel
++
++ * lib/Youri/Submit/Action/Link.pm: do update hdlist for every arch
++ after linking noarch packages (#31638)
++
++2007-06-28 07:37 pixel
++
++ * lib/Youri/Submit/Action/Install.pm: simplify ($arch is not used
++ by -&gt;set_install_dir_changed)
++
++2007-06-23 13:54 pixel
++
++ * lib/Youri/Submit/Action/Mail.pm, lib/Youri/Submit/Reject/Mail.pm:
++ keep raw changelogs to avoid changing the format (backport)
++
++2007-06-23 08:10 spuk
++
++ * lib/Youri/Submit/Check/Recency.pm: - check for newer and same
++ existing revisions in a single pass
++ - use proper get_revisions() instead of get_install_file() hack,
++ as the
++ latter will use the current file name, and thus will fail to
++ check for an
++ existing package revision when submitting, because submitted
++ SRPMs have a
++ different name (&quot;@rev:foobar-...&quot;) than what goes into the
++ repository
++
++2007-06-22 13:51 pixel
++
++ * lib/Youri/Submit/Post/CleanRpmsrate.pm: ensure we don't do
++ anything if nothing changed
++
++2007-06-22 13:41 pixel
++
++ * lib/Youri/Submit/Post/Genhdlist2.pm: more atomic generation of
++ MD5SUM
++
++2007-06-22 13:35 pixel
++
++ * lib/Youri/Submit/Post/Genhdlist2.pm: - need to redo global
++ MD5SUM. This MD5SUM is mostly obsolete, but is still needed up to
++ 2007.1
++ (and needed even on cooker for existing urpmi.cfg)
++ - don't use --blind. hopefully not needed
++
++2007-06-22 06:45 pixel
++
++ * lib/Youri/Submit/Post/Genhdlist2.pm: call genhdlist2 with (new)
++ option --allow-empty-media
++
++2007-06-21 10:13 blino
++
++ * lib/Youri/Submit/Post/CleanRpmsrate.pm: uniquify arch list
++
++2007-06-21 08:16 pixel
++
++ * lib/Youri/Submit/Action/Install.pm,
++ lib/Youri/Submit/Post/Genhdlist2.pm: new action Genhdlist2
++
++2007-06-14 18:23 mrl
++
++ * lib/Youri/Submit/Action/Sendcache.pm: - As this action is unique,
++ avoid too much flexibility and simplify the code.
++ - Use . for hidding temporary files instead of .new suffix.
++
++2007-06-13 18:36 mrl
++
++ * lib/Youri/Submit/Action/Sendcache.pm: - Adapted for working with
++ iurt cache.
++
++2007-06-13 01:48 spuk
++
++ * lib/Youri/Submit/Action/Link.pm: no such 'cd' function, 'chdir'
++ it is...
++
++2007-05-08 06:22 spuk
++
++ * lib/Youri/Submit/Reject/Mail.pm: fixing the Big SVN Breakage:
++ reverting last commit, restoring state as of latest working
++ checkout in ken
++
++2007-05-08 06:06 spuk
++
++ * lib/Youri/Submit/Post/Gendistrib.pm: fixing the Big SVN Breakage:
++ restoring state as of working checkout in ken
++
++2007-05-08 06:00 spuk
++
++ * lib/Youri/Submit/Action/Scp.pm: fixing the Big SVN Breakage:
++ Scp.pm was changed into Send.pm
++
++2007-05-05 06:16 spuk
++
++ * lib/Youri/Submit/Check/Section.pm: Check if package submission
++ was for the correct section.
++
++2007-03-24 11:36 spuk
++
++ * lib/Youri/Submit/Action/Archive.pm: - moved hack for verbosity to
++ start of code, with a remark
++ - removed double $path from debug string
++
++2007-03-15 12:36 mrl
++
++ * lib/Youri/Submit/Check/Version.pm: - Fixed version_freeze mode:
++ do not allow any upload with a different version
++ from what is already present on the repository.
++ - Added an ACL control for maintainers allowed to bypass this
++ restriction as option
++ authorized_users.
++
++2007-03-15 12:32 mrl
++
++ * lib/Youri/Submit/Check/Version.pm: - Improved indentation.
++ - Added some comments regarding possible bugs in freeze modes.
++
++2005-05-24 14:40 Sawyer
++
++ * lib/Youri/Submit/Reject/Mail.pm: LOST
++
++2007-03-10 07:49 spuk
++
++ * lib/Youri/Submit/Action/Archive.pm: The extra '/' was causing the
++ string to not be matched by the regexp below
++ for getting $rep_section and $rep_main_section, in the end making
++ the SRPMs
++ of all other subsections be removed when a newer package was
++ uploaded for any
++ subsection. (#28719)
++
++2007-02-26 10:56 blino
++
++ * lib/Youri/Submit/Post/CleanRpmsrate.pm: initial
++ Post::CleanRpmsrate module
++
++2007-02-14 12:10 blino
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: match rpmlint errors that have
++ no value (such as non-xdg-migrated-menu, the only one we
++ currently use...)
++
++2007-02-09 22:11 blino
++
++ * bin/youri-submit: get -&gt; get_arg
++
++2007-02-09 22:09 blino
++
++ * bin/youri-submit: merge changes from ken/kenobi
++
++2007-02-09 22:09 blino
++
++ * bin/youri-submit: create youri-submit from youri-submit.in
++
++2007-02-09 19:39 blino
++
++ * lib/Youri/Submit/Check/ACL.pm: add section in acl error message
++
++2007-02-09 19:34 blino
++
++ * lib/Youri/Submit/Reject/Mail.pm: do not use packager adress as
++ from, it may be invalid (non-free packages) or not subscribed to
++ maintainers
++
++2007-02-09 18:51 blino
++
++ * lib/Youri/Submit/Reject/Mail.pm: fix changelog in reject mail
++
++2007-02-09 18:50 blino
++
++ * lib/Youri/Submit/Reject/Mail.pm: fix reject mail
++
++2007-02-08 17:28 pixel
++
++ * lib/Youri/Submit/Action/Unpack.pm: also give directories to &quot;cpio
++ -pdu&quot; to ensure directories are created with same rights
++
++2007-02-08 14:09 pixel
++
++ * lib/Youri/Submit/Action/Unpack.pm: This action plugin unpack
++ package files somewhere.
++ When unpack_inside_distribution_root is set, dest_directory is
++ relative to the distribution root.
++ When the package is a noarch, the wanted files are unpacked in
++ distribution root of each archs.
++
++ eg:
++ unpack_installer_images:
++ class: Youri::Submit::Action::Unpack
++ options:
++ name: drakx-installer-images
++ source_subdir: /usr/lib*/drakx-installer-images
++ dest_directory: .
++ unpack_inside_distribution_root: 1
++
++2007-01-30 10:02 pixel
++
++ * lib/Youri/Submit/Check/ACL.pm, lib/Youri/Submit/Check/Host.pm,
++ lib/Youri/Submit/Check/Queue_recency.pm,
++ lib/Youri/Submit/Check/Rpmlint.pm, lib/Youri/Submit/Check/SVN.pm,
++ lib/Youri/Submit/Check/Source.pm, lib/Youri/Submit/Check/Type.pm,
++ lib/Youri/Submit/Check/Version.pm, lib/Youri/Submit/Pre/Rsync.pm,
++ lib/Youri/Submit/Reject/Archive.pm,
++ lib/Youri/Submit/Reject/Clean.pm,
++ lib/Youri/Submit/Reject/Install.pm,
++ lib/Youri/Submit/Reject/Mail.pm: fix $Id$ expansion
++
++2007-01-30 10:01 pixel
++
++ * lib/Youri/Submit/Plugin.pm, lib/Youri/Submit/Post.pm,
++ lib/Youri/Submit/Pre.pm, lib/Youri/Submit/Reject.pm: fix pod and
++ $Id$ expansion
++
++2007-01-30 10:00 pixel
++
++ * lib/Youri/Submit/Post.pm: fix pod
++
++2007-01-30 09:59 pixel
++
++ * lib/Youri/Submit/Action/Send.pm: fix pod
++
++2007-01-30 09:58 pixel
++
++ * lib/Youri/Submit/Action/Markrelease.pm,
++ lib/Youri/Submit/Action/Scp.pm: fix pod
++
++2007-01-30 09:49 pixel
++
++ * lib/Youri/Submit/Action/Clean.pm,
++ lib/Youri/Submit/Action/Link.pm,
++ lib/Youri/Submit/Action/Markrelease.pm,
++ lib/Youri/Submit/Action/Rpminfo.pm,
++ lib/Youri/Submit/Action/Scp.pm, lib/Youri/Submit/Action/Send.pm:
++ fix $Id$ expansion
++
++2007-01-26 11:25 blino
++
++ * lib/Youri/Submit/Check/ACL.pm: really match section in ACL
++
++2007-01-26 11:24 blino
++
++ * lib/Youri/Submit/Check/ACL.pm: fix arch ACL matching (and thus
++ allow ACLs to match again)
++
++2006-12-24 10:31 mandrake
++
++ * lib/Youri/Submit/Post.pm, lib/Youri/Submit/Pre.pm,
++ lib/Youri/Submit/Reject.pm: Removing previous pristine/
++ directory.
++
++2006-12-24 03:15 mandrake
++
++ * lib/Youri/Submit/Action.pm: %repsys markrelease
++ version: 1.0
++ release: 0.20061223.3mdv2007.1
++ revision: 101968
++
++ Copying 1.0-0.20061223.3mdv2007.1 to releases/ directory.
++
++2006-10-16 16:05 warly
++
++ * lib/Youri/Submit/Check.pm: merging dev with upstream
++
++2006-11-14 22:01 mrl
++
++ * lib/Youri/Submit/Action/Rpminfo.pm: - Renamed package name tag.
++
++2006-11-14 16:38 mrl
++
++ * lib/Youri/Submit/Action/RpmInfo.pm,
++ lib/Youri/Submit/Action/Rpminfo.pm: - Renamed, due to some
++ enforcement (cfengine?).
++
++2006-11-14 13:23 mrl
++
++ * lib/Youri/Submit/Action/RpmInfo.pm: - Added package summary to
++ .info files.
++
++2006-11-13 12:40 mrl
++
++ * lib/Youri/Submit/Action/RpmInfo.pm: - First version of web
++ interface.
++
++2006-10-31 11:40 mandrake
++
++ * lib/Youri/Submit/Action/Archive.pm: unlink file in Archive for
++ the moment (should be done in clean but the code to detect which
++ packages is obsoleted has to be moved
++
++2006-10-26 11:26 mandrake
++
++ * lib/Youri/Submit/Action/CVS.pm: we perform CVS commit
++ asynchronously
++
++2006-10-26 11:21 mandrake
++
++ * lib/Youri/Submit/Action/Install.pm: rename the rpm to remove the
++ prefix
++
++2006-10-26 11:18 mandrake
++
++ * lib/Youri/Submit/Action/Mail.pm: fix double .
++
++2006-10-26 11:16 mandrake
++
++ * lib/Youri/Submit/Post/Gendistrib.pm: add gendistrib command
++ directly into gendistrib module
++
++2006-10-26 11:14 mandrake
++
++ * lib/Youri/Submit/Pre/Rsync.pm: return correct packages table for
++ groups
++
++2006-10-26 11:10 mandrake
++
++ * lib/Youri/Submit/Reject/Install.pm: get_reject_path seems to be
++ the new name
++
++2006-10-26 11:07 mandrake
++
++ * lib/Youri/Submit/Reject/Mail.pm: $last_change is sometime empty
++
++2006-10-24 11:07 warly
++
++ * bin/youri-submit.in: exit with an error code if an error occured
++ in one group; s/Upload/Submit/; use new structure name from
++ upstream
++
++2006-10-23 11:48 warly
++
++ * lib/Youri/Submit/Check/ACL.pm,
++ lib/Youri/Submit/Check/Queue_recency.pm,
++ lib/Youri/Submit/Check/Rpmlint.pm, lib/Youri/Submit/Check/SVN.pm,
++ lib/Youri/Submit/Check/Source.pm,
++ lib/Youri/Submit/Check/Version.pm: must return an empty value
++
++2006-10-18 12:46 warly
++
++ * lib/Youri/Submit/Check/Rpmlint.pm: remove debug code
++
++2006-10-17 16:10 warly
++
++ * lib/Youri/Submit/Check/ACL.pm: now checks must return the error
++ message
++
++2006-10-17 16:04 warly
++
++ * lib/Youri/Submit/Check/ACL.pm, lib/Youri/Submit/Check/Host.pm,
++ lib/Youri/Submit/Check/Queue_recency.pm,
++ lib/Youri/Submit/Check/Rpmlint.pm, lib/Youri/Submit/Check/SVN.pm,
++ lib/Youri/Submit/Check/Source.pm,
++ lib/Youri/Submit/Check/Version.pm: now checks must return the
++ error message
++
++2006-10-17 15:16 warly
++
++ * lib/Youri/Submit/Action/Clean.pm,
++ lib/Youri/Submit/Action/Link.pm, lib/Youri/Submit/Check/ACL.pm,
++ lib/Youri/Submit/Check/Host.pm,
++ lib/Youri/Submit/Check/Queue_recency.pm,
++ lib/Youri/Submit/Check/SVN.pm, lib/Youri/Submit/Check/Source.pm,
++ lib/Youri/Submit/Check/Type.pm,
++ lib/Youri/Submit/Check/Version.pm, lib/Youri/Submit/Post.pm,
++ lib/Youri/Submit/Pre.pm, lib/Youri/Submit/Reject.pm:
++ s/Upload/Submit/g
++
++2006-10-17 13:53 warly
++
++ * ., ChangeLog, MANIFEST.SKIP, Makefile.PL, README, TODO,
++ bin/youri-submit-proxy.in, bin/youri-submit-restricted.in,
++ bin/youri-submit.in, etc, etc/bash_completion.d,
++ etc/bash_completion.d/youri-submit, etc/submit.conf,
++ lib/Youri/Submit/Plugin.pm, t, t/00distribution.t: merge with
++ upstream
++
++2006-10-16 16:27 warly
++
++ * lib/Youri/Submit/Post/Gendistrib.pm,
++ lib/Youri/Submit/Pre/Rsync.pm,
++ lib/Youri/Submit/Reject/Archive.pm,
++ lib/Youri/Submit/Reject/Clean.pm,
++ lib/Youri/Submit/Reject/Install.pm,
++ lib/Youri/Submit/Reject/Mail.pm: Now the module is Submit and not
++ Upload
++
++2006-10-16 16:26 warly
++
++ * lib/Youri/Submit/Check, lib/Youri/Submit/Check/History.pm,
++ lib/Youri/Submit/Check/Precedence.pm,
++ lib/Youri/Submit/Check/Recency.pm,
++ lib/Youri/Submit/Check/Rpmlint.pm, lib/Youri/Submit/Check/Tag.pm,
++ lib/Youri/Submit/Check/Type.pm: merging dev with upstream
++
++2006-10-16 16:15 warly
++
++ * lib/Youri/Submit/Post.pm, lib/Youri/Submit/Pre.pm,
++ lib/Youri/Submit/Reject.pm: now plugins are complete abstract
++ classes
++
++2006-10-16 16:08 warly
++
++ * lib/Youri/Submit/Action.pm: merging dev with upstream
++
++2006-10-16 16:05 warly
++
++ * lib/Youri/Submit/Check.pm: merging dev with upstream
++
++2006-10-16 13:03 warly
++
++ * lib/Youri/Submit/Action/Markrelease.pm,
++ lib/Youri/Submit/Action/Scp.pm, lib/Youri/Submit/Action/Send.pm:
++ Now the Module is Submit
++
++2006-10-16 12:57 warly
++
++ * lib/Youri/Submit/Action, lib/Youri/Submit/Action/Archive.pm,
++ lib/Youri/Submit/Action/Bugzilla.pm,
++ lib/Youri/Submit/Action/CVS.pm, lib/Youri/Submit/Action/Clean.pm,
++ lib/Youri/Submit/Action/Install.pm,
++ lib/Youri/Submit/Action/Link.pm, lib/Youri/Submit/Action/Mail.pm,
++ lib/Youri/Submit/Action/RSS.pm, lib/Youri/Submit/Action/Sign.pm:
++ merging dev with upstream
++
++2006-10-16 11:33 warly
++
++ * bin/youri-check.in: add new youri subsections (from upstream)
++
++2006-10-16 11:30 warly
++
++ * lib/Youri/Submit: add new youri subsections (from upstream)
++
++2006-10-16 11:30 warly
++
++ * lib/Youri: add new youri subsections (from upstream)
++
++2006-10-16 11:30 warly
++
++ * lib: add new youri subsections (from upstream)
++
++2006-10-16 11:22 warly
++
++ * bin/youri-submit.in: add new youri subsections (from upstream)
++
++2006-10-16 11:18 warly
++
++ * bin: add new youri subsections (from upstream)
++
++2006-10-16 11:18 warly
++
++ * .: add new youri subsections (from upstream)
++
++2006-04-23 Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at zarb.org</A>&gt; 0.9
++ * initial release
+
+Added: build_system/mdv-youri-submit/trunk/MANIFEST.SKIP
+===================================================================
+--- build_system/mdv-youri-submit/trunk/MANIFEST.SKIP (rev 0)
++++ build_system/mdv-youri-submit/trunk/MANIFEST.SKIP 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,11 @@
++\.tar\.gz$
++\.SKIP$
++~$
++^pm_to_blib$
++^Makefile$
++^Makefile\.old$
++^bin/youri-submit$
++^bin/youri-submit-restricted$
++^bin/youri-submit-proxy$
++.svn
++blib
+
+Added: build_system/mdv-youri-submit/trunk/Makefile.PL
+===================================================================
+--- build_system/mdv-youri-submit/trunk/Makefile.PL (rev 0)
++++ build_system/mdv-youri-submit/trunk/Makefile.PL 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,97 @@
++# $Id: Makefile.PL 1723 2006-10-17 13:53:27Z warly $
++use ExtUtils::MakeMaker;
++use Config;
++
++WriteMakefile(
++ NAME =&gt; 'youri-submit',
++ VERSION =&gt; 0.9,
++ AUTHOR =&gt; 'Youri project &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">youri at zarb.org</A>&gt;',
++ EXE_FILES =&gt; [
++ 'bin/youri-submit',
++ 'bin/youri-submit-restricted',
++ 'bin/youri-submit-proxy'
++ ],
++ PREREQ_PM =&gt; {
++ 'Youri::Config' =&gt; 0,
++ 'Youri::Utils' =&gt; 0,
++ 'Pod::Simple::HTMLBatch' =&gt; 0
++ },
++ PREFIX =&gt; '/usr/local',
++ INSTALLPRIVLIB =&gt; $Config{installprivlib},
++ INSTALLSITELIB =&gt; $Config{installsitelib},
++ INSTALLVENDORLIB =&gt; $Config{installvendorlib},
++ INSTALLMAN3DIR =&gt; $Config{installman3dir},
++ INSTALLSITEMAN3DIR =&gt; $Config{installsiteman3dir},
++ INSTALLVENDORMAN3DIR =&gt; $Config{installvendorman3dir},
++ INSTALLSCRIPT =&gt; '$(PREFIX)/bin',
++ INSTALLSITESCRIPT =&gt; '$(PREFIX)/bin',
++ INSTALLVENDORSCRIPT =&gt; '$(PREFIX)/bin',
++ INSTALLMAN1DIR =&gt; '$(PREFIX)/share/man/man1',
++ INSTALLSITEMAN1DIR =&gt; '$(PREFIX)/share/man/man1',
++ INSTALLVENDORMAN1DIR =&gt; '$(PREFIX)/share/man/man1',
++);
++
++package MY;
++
++sub post_constants {
++ my ($self) = @_;
++ my $sysconfdir = $self-&gt;{ARGS}-&gt;{SYSCONFDIR} || '$(PREFIX)/etc';
++ return &lt;&lt;EOF;
++SYSCONFDIR = $sysconfdir
++EOF
++}
++
++sub top_targets {
++ my ($self) = @_;
++ my $top_targets = $self-&gt;SUPER::top_targets(@_);
++ $top_targets =~ s/all :: pure_all manifypods/all :: pure_all manifypods htmlifypods/;
++ $top_targets .= &lt;&lt;'EOF';
++htmlifypods : $(TO_INST_PM)
++ if [ ! -d blib/html ]; then mkdir blib/html; fi
++ perl -MPod::Simple::HTMLBatch -e Pod::Simple::HTMLBatch::go lib blib/html
++ pod2html &lt; bin/youri-submit &gt; blib/html/youri-submit.html
++ pod2html &lt; bin/youri-submit-restricted &gt; blib/html/youri-submit-restricted.html
++ pod2html &lt; bin/youri-submit-proxy &gt; blib/html/youri-submit-proxy.html
++EOF
++ return $top_targets;
++}
++
++sub install {
++ my ($self) = @_;
++ my $install = $self-&gt;SUPER::install(@_);
++ $install =~ s/install :: all pure_install doc_install/install :: all pure_install doc_install config_install completion_install/;
++ $install .= &lt;&lt;'EOF';
++config_install :
++ install -d -m 755 $(DESTDIR)$(SYSCONFDIR)/youri
++ install -m 644 etc/submit.conf $(DESTDIR)$(SYSCONFDIR)/youri
++
++completion_install :
++ install -d -m 755 $(DESTDIR)$(SYSCONFDIR)/bash_completion.d
++ install -m 644 etc/bash_completion.d/youri-submit $(DESTDIR)$(SYSCONFDIR)/bash_completion.d
++EOF
++ return $install;
++}
++
++sub installbin {
++ my ($self) = @_;
++ my $installbin = $self-&gt;SUPER::installbin(@_);
++ $installbin .= &lt;&lt;'EOF';
++bin/youri-submit : bin/youri-submit.in Makefile
++ perl -p \
++ -e 's|\@sysconfdir\@|$(SYSCONFDIR)|;' \
++ &lt; $&lt; &gt; $@
++
++bin/youri-submit-restricted : bin/youri-submit-restricted.in Makefile
++ perl -p \
++ -e 's|\@sysconfdir\@|$(SYSCONFDIR)|;' \
++ -e 's|\@bindir\@|$(PREFIX)/bin|;' \
++ &lt; $&lt; &gt; $@
++
++bin/youri-submit-proxy : bin/youri-submit-proxy.in Makefile
++ perl -p \
++ -e 's|\@sysconfdir\@|$(SYSCONFDIR)|;' \
++ -e 's|\@bindir\@|$(PREFIX)/bin|;' \
++ &lt; $&lt; &gt; $@
++EOF
++ return $installbin;
++}
+
+Added: build_system/mdv-youri-submit/trunk/README
+===================================================================
+--- build_system/mdv-youri-submit/trunk/README (rev 0)
++++ build_system/mdv-youri-submit/trunk/README 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,45 @@
++YOURI project
++-------------
++
++YOURI stands for &quot;Youri Offers an Upload &amp; Repository Infrastucture&quot;. It aims
++to build tools making management of a coherent set of packages easier.
++
++Description
++-----------
++Managing a package repository involves many tasks, such as keeping packages
++tree tidy, generating packages indexes, synchronising bug report system,
++running coherency checks, checking for available updates, etc...
++
++Instead of a gazillion project-specific scripts, we aim to provide a generic package-format independant framework, so as to build coherent and robust tools.
++
++Components
++----------
++Available software in this release
++- youri-check allows to check packages
++- youri-upload allows to upload packages
++
++Installation
++------------
++To install, just use:
++perl Makefile.PL
++make
++make test
++
++All standard MakeMaker variables are usable, with the addition of SYSCONFDIR to
++specify configuration files destination.
++
++Copyright and License
++---------------------
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under
++the same terms as Perl itself.
++
++Authors
++-------
++Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at zarb.org</A>&gt;,
++Pascal Terjan &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">pterjan at zarb.org</A>&gt;
++Damien Krotkine &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">dams at zarb.org</A>&gt;
++Olivier Thauvin &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">nanardon at zarb.org</A>&gt;
++Ville Skytt\xE4 &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">ville.skytta at iki.fi</A>&gt;
++
+
+Added: build_system/mdv-youri-submit/trunk/TODO
+===================================================================
+--- build_system/mdv-youri-submit/trunk/TODO (rev 0)
++++ build_system/mdv-youri-submit/trunk/TODO 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,6 @@
++1.0 Goals
++=========
++
++- svn support
++- automatic bugzilla ticket closing on upload
++- more customizable (template based ?) mail notification
+
+Added: build_system/mdv-youri-submit/trunk/bin/youri-check.in
+===================================================================
+--- build_system/mdv-youri-submit/trunk/bin/youri-check.in (rev 0)
++++ build_system/mdv-youri-submit/trunk/bin/youri-check.in 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,395 @@
++#!/usr/bin/perl
++# $Id: youri-check.in 1699 2006-10-16 11:33:58Z warly $
++
++=head1 NAME
++
++youri-check - package check agent
++
++=head1 VERSION
++
++Version 1.0
++
++=head1 SYNOPSIS
++
++youri-check [options] &lt;mode&gt;
++
++Options:
++
++ --config &lt;file&gt; use file &lt;file&gt; as config file
++ --skip-media &lt;media&gt; skip media &lt;media&gt;
++ --skip-plugin &lt;plugin&gt; skip plugin &lt;plugin&gt;
++ --parallel parallel run
++ --verbose verbose run
++ --test test run
++ --help print this help message
++
++=head1 DESCRIPTION
++
++B&lt;youri-check&gt; allows to check packages in a repository.
++
++In input mode, all medias defined in configuration are passed to a list of
++input plugins, each of them storing their result in a persistent resultset. In
++output mode, this resultset is passed to a list of output plugins, each of them
++producing arbitrary effects.
++
++=head1 OPTIONS
++
++=over
++
++=item B&lt;--config&gt; &lt;file&gt;
++
++Use given file as configuration, instead of normal one.
++
++=item B&lt;--skip-media&gt; &lt;media&gt;
++
++Skip media with given identity.
++
++=item B&lt;--skip-plugin&gt; &lt;plugin&gt;
++
++Skip plugin with given identity.
++
++=item B&lt;--parallel&gt;
++
++Run all plugins parallelously
++
++=item B&lt;--verbose&gt;
++
++Produce more verbose output (can be used more than once)
++
++=item B&lt;--test&gt;
++
++Don't perform any modification.
++
++=item B&lt;--help&gt;
++
++Print a brief help message and exits.
++
++=back
++
++=head1 CONFIGURATION
++
++Configuration is read from the first file found among:
++
++=over
++
++=item * the one specified by B&lt;--config&gt; option on command-line
++
++=item * $HOME/.youri/check.conf
++
++=item * @sysconfdir@/youri/check.conf
++
++=back
++
++All additional configuration files specified by B&lt;includes&gt; directive are then
++processed. Then command line options. Any directive overrides prior definition.
++
++=over
++
++=item B&lt;includes&gt; I&lt;files&gt;
++
++Uses space-separated list I&lt;files&gt; as a list of additional configuration files.
++
++=item B&lt;resolver&gt; I&lt;id&gt;
++
++Declare a maintainer resolver object with identity I&lt;id&gt;.
++
++=item B&lt;preferences&gt; I&lt;id&gt;
++
++Declare a maintainer preferences object with identity I&lt;id&gt;.
++
++=item B&lt;resultset&gt; I&lt;id&gt;
++
++Declare a resultset object with identity I&lt;id&gt;.
++
++=item B&lt;medias&gt; I&lt;ids&gt;
++
++Declares a list of media objects with identity taken in space-separated list
++I&lt;ids&gt;.
++
++=item B&lt;inputs&gt; I&lt;ids&gt;
++
++Declares a list of input plugin objects with identity taken in space-separated
++list I&lt;ids&gt;.
++
++=item B&lt;outputs&gt; I&lt;ids&gt;
++
++Declares a list of output plugin objects with identity taken in space-separated
++list I&lt;ids&gt;.
++
++=back
++
++Each object declared in configuration must be fully defined later, using a
++configuration section, starting with bracketed object identity, followed by at
++least a class directive, then any number of additional object-specific
++directives.
++
++Example:
++
++ objects = foo
++
++ [foo]
++ class = Foo::Bar
++ key1 = value1
++ key2 = value2
++
++=head1 SEE ALSO
++
++Youri::Config, for configuration file format.
++
++Each used plugin man page, for available options.
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++use strict;
++use warnings;
++
++use Youri::Config;
++use Youri::Utils;
++use Pod::Usage;
++use Net::Config qw/%NetConfig/;
++use DateTime;
++
++my $config = Youri::Config-&gt;new(
++ command_spec =&gt; [
++ 'config=s',
++ 'skip-plugin=s@',
++ 'skip-media=s@',
++ 'parallel!',
++ 'help|h!',
++ 'test|t!',
++ 'verbose|v!'
++ ],
++ file_spec =&gt; [
++ 'includes=s',
++ 'resolver=s',
++ 'preferences=s',
++ 'resultset=s',
++ 'medias=s',
++ 'inputs=s',
++ 'outputs=s'
++ ],
++ directories =&gt; [ '@sysconfdir@', &quot;$ENV{HOME}/.youri&quot; ],
++ file_name =&gt; 'check.conf',
++ caller =&gt; $0,
++);
++
++pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No mode specified, aborting\n&quot;
++) unless @ARGV;
++
++my $mode = $ARGV[0];
++
++# convenient global flags
++my $test = $config-&gt;get('test');
++my $verbose = $config-&gt;get('verbose');
++
++# libnet configuration
++my %netconfig = $config-&gt;get_section('netconfig');
++$NetConfig{$_} = $netconfig{$_} foreach keys %netconfig;
++
++# resultset creation
++my $resultset_id = $config-&gt;get('resultset');
++die &quot;No resultset defined&quot; unless $resultset_id;
++
++report(&quot;Creating resultset $resultset_id&quot;);
++my $resultset = create_instance(
++ 'Youri::Check::Resultset',
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ $config-&gt;get_section($resultset_id)
++);
++
++my $children;
++
++my %skip_plugins = map { $_ =&gt; 1 } @{$config-&gt;get('skip-plugin')};
++
++if ($mode eq 'input') {
++
++ # additional objects
++
++ my $resolver;
++ my $resolver_id = $config-&gt;get('resolver');
++ if ($resolver_id) {
++ report(&quot;Creating maintainer resolver $resolver_id&quot;);
++ eval {
++ $resolver = create_instance(
++ 'Youri::Check::Maintainer::Resolver',
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 1 ? $verbose - 2 : 0,
++ $config-&gt;get_section($resolver_id)
++ );
++ };
++ print STDERR &quot;Failed to create maintainer resolver $resolver_id: $@\n&quot; if $@;
++ }
++
++ my $preferences;
++ my $preferences_id = $config-&gt;get('preferences');
++ if ($preferences_id) {
++ report(&quot;Creating maintainer preferences $preferences_id&quot;);
++ eval {
++ $preferences = create_instance(
++ 'Youri::Check::Maintainer::Preferences',
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 1 ? $verbose - 2 : 0,
++ $config-&gt;get_section($preferences_id)
++ );
++ };
++ print STDERR &quot;Failed to create maintainer preferences $preferences_id: $@\n&quot; if $@;
++ }
++
++ my @medias;
++ my %skip_medias = map { $_ =&gt; 1 } @{$config-&gt;get('skip-media')};
++ foreach my $id (split(/\s+/, $config-&gt;get('medias'))) {
++ next if $skip_medias{$id};
++ report(&quot;Creating media $id&quot;);
++ eval {
++ push(
++ @medias,
++ create_instance(
++ 'Youri::Media',
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ $config-&gt;get_section($id)
++ )
++ );
++ };
++ print STDERR &quot;Failed to create media $id: $@\n&quot; if $@;
++ }
++
++ # prepare resultset
++ $resultset-&gt;reset();
++ $resultset-&gt;set_resolver($resolver);
++
++
++ foreach my $id (split(/\s+/, $config-&gt;get('inputs'))) {
++ next if $skip_plugins{$id};
++ report(&quot;Creating input $id&quot;);
++ my $input;
++ eval {
++ $input = create_instance(
++ 'Youri::Check::Input',
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ resolver =&gt; $resolver,
++ preferences =&gt; $preferences,
++ $config-&gt;get_section($id)
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create input $id: $@\n&quot;;
++ } else {
++ if ($config-&gt;get('parallel')) {
++ # fork
++ my $pid = fork;
++ die &quot;Can't fork: $!&quot; unless defined $pid;
++ if ($pid) {
++ # parent process
++ $children++;
++ next;
++ }
++ }
++ eval {
++ $input-&gt;prepare(@medias);
++ };
++ if ($@) {
++ print STDERR &quot;Failed to prepare input $id: $@\n&quot;;
++ } else {
++ # clone resultset in child process
++ $resultset = $config-&gt;get('parallel') ?
++ $resultset-&gt;clone() :
++ $resultset;
++
++ foreach my $media (@medias) {
++ next if $media-&gt;skip_input($id);
++ my $media_id = $media-&gt;get_id();
++ report(&quot;running input $id on media $media_id&quot;);
++ eval {
++ $input-&gt;run($media, $resultset);
++ };
++ if ($@) {
++ print STDERR &quot;Failed to run input $id on media $media_id: $@\n&quot;;
++ }
++ }
++ }
++ if ($config-&gt;get('parallel')) {
++ # child process
++ exit;
++ }
++ }
++ }
++
++} elsif ($mode eq 'output') {
++
++ foreach my $id (split(/\s+/, $config-&gt;get('outputs'))) {
++ next if $skip_plugins{$id};
++ report(&quot;Creating output $id&quot;);
++ my $output;
++ eval {
++ $output = create_instance(
++ 'Youri::Check::Output',
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ config =&gt; $config,
++ $config-&gt;get_section($id)
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create output $id: $@\n&quot;;
++ } else {
++ if ($config-&gt;get('parallel')) {
++ # fork
++ my $pid = fork;
++ die &quot;Can't fork: $!&quot; unless defined $pid;
++ if ($pid) {
++ # parent process
++ $children++;
++ next;
++ }
++ }
++
++ # clone resultset in child process
++ $resultset = $config-&gt;get('parallel') ?
++ $resultset-&gt;clone() :
++ $resultset;
++
++ report(&quot;running output $id&quot;);
++ eval {
++ $output-&gt;run($resultset);
++ };
++ if ($@) {
++ print STDERR &quot;Failed to run output $id: $@\n&quot;;
++ }
++
++ if ($config-&gt;get('parallel')) {
++ # child process
++ exit;
++ }
++ }
++ }
++} else {
++ die &quot;Invalid mode $mode&quot;;
++}
++
++# wait for all forked processus termination
++while ($children) {
++ wait;
++ $children--;
++}
++
++sub report {
++ my ($message) = @_;
++ print DateTime-&gt;now()-&gt;strftime('[%H:%M:%S] ')
++ if $verbose &gt; 1;
++ print &quot;$message\n&quot;
++ if $verbose &gt; 0;
++}
+
+
+Property changes on: build_system/mdv-youri-submit/trunk/bin/youri-check.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-submit/trunk/bin/youri-submit
+===================================================================
+--- build_system/mdv-youri-submit/trunk/bin/youri-submit (rev 0)
++++ build_system/mdv-youri-submit/trunk/bin/youri-submit 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,534 @@
++#!/usr/bin/perl
++# $Id: youri-submit 232579 2007-12-17 19:45:47Z blino $
++
++=head1 NAME
++
++youri-submit - package submission tool
++
++=head1 VERSION
++
++Version 2.0
++
++=head1 SYNOPSIS
++
++youri-submit [options] &lt;target&gt; &lt;files&gt;
++
++youri-submit --list &lt;category&gt; [target]
++
++youri-submit --help [category] [item]
++
++Options:
++
++ --config &lt;file&gt; use file &lt;file&gt; as config file
++ --skip-pre &lt;pre&gt; skip pre &lt;pre&gt;
++ --skip-check &lt;check&gt; skip check &lt;check&gt;
++ --skip-action &lt;action&gt; skip action &lt;action&gt;
++ --skip-post &lt;post&gt; skip post &lt;post&gt;
++ --skip-reject &lt;reject&gt; skip reject &lt;reject&gt;
++ --define &lt;key&gt;=&lt;value&gt; pass additional values
++ --clean delete package after success
++ --verbose verbose run
++ --test test run
++ --list &lt;category&gt; list items from given category
++ --help [category] display contextual help
++
++=head1 DESCRIPTION
++
++B&lt;youri-submit&gt; allows to submit packages to a repository.
++
++All packages given on command lines are passed to a list of check plugins,
++depending on given upload target. If none of them fails, all packages are
++passed to a list of action plugins, depending also on given upload target.
++
++=head1 OPTIONS
++
++=over
++
++=item B&lt;--config&gt; I&lt;file&gt;
++
++Use given file as configuration, instead of normal one.
++
++=item B&lt;--skip-pre&gt; I&lt;id&gt;
++
++Skip pre transaction plugin with given identity
++
++=item B&lt;--skip-check&gt; I&lt;id&gt;
++
++Skip check plugin with given identity.
++
++=item B&lt;--skip-action&gt; I&lt;id&gt;
++
++Skip action plugin with given identity.
++
++=item B&lt;--skip-post&gt; I&lt;id&gt;
++
++Skip post transaction plugin with given identity.
++
++=item B&lt;--skip-reject&gt; I&lt;id&gt;
++
++Skip reject action plugin with given identity.
++
++=item B&lt;--define&gt; &lt;key&gt;=&lt;value&gt;
++
++Define additional parameters, to be used by plugins.
++
++=item B&lt;--clean&gt;
++
++Delete submited packages upon successfull submission.
++
++=item B&lt;--verbose&gt;
++
++Produce more verbose output (can be used more than once)
++
++=item B&lt;--test&gt;
++
++Don't perform any modification.
++
++=item B&lt;--list&gt; I&lt;category&gt;
++
++List available items from given category and exits. Category must be either
++B&lt;targets&gt;, B&lt;actions&gt; or B&lt;checks&gt;. A target is needed for the two last ones.
++
++=item B&lt;--help&gt; I&lt;category&gt;
++
++Display help for given category and exits. Category must be either
++B&lt;repository&gt;, B&lt;action&gt; or B&lt;check&gt;. An item is needed for the two last ones.
++If no category given, display standard help.
++
++=back
++
++=head1 CONFIGURATION
++
++Configuration is read from the first file found among:
++
++=over
++
++=item * the one specified by B&lt;--config&gt; option on command-line
++
++=item * $HOME/.youri/submit.conf
++
++=item * /usr/local/etc/youri/submit.conf
++
++=back
++
++The configuration file should be a YAML-format files, with the following
++mandatory top-level directives:
++
++=over
++
++=item B&lt;repository&gt;
++
++The definition of repository plugin to be used.
++
++=item B&lt;targets&gt;
++
++The list of available submission targets, each one being composed from the
++following keys:
++
++=over
++
++=item B&lt;checks&gt;
++
++The list of check plugins to use for this target.
++
++=item B&lt;actions&gt;
++
++The list of action plugins to use for this target.
++
++=back
++
++=item B&lt;checks&gt;
++
++The list of check plugin definitions, indexed by their identity.
++
++=item B&lt;actions&gt;
++
++The list of action plugin definitions, indexed by their identity.
++
++=back
++
++=head1 SEE ALSO
++
++Youri::Config, for additional details about configuration file format.
++
++Each used plugin man page, for available options.
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++use strict;
++use warnings;
++
++use Youri::Config;
++use Youri::Utils;
++use Pod::Usage;
++
++my $config = Youri::Config-&gt;new(
++ args =&gt; {
++ 'skip-check' =&gt; '=s@',
++ 'skip-action' =&gt; '=s@',
++ 'define' =&gt; '=s%',
++ 'verbose' =&gt; '|v!',
++ 'clean' =&gt; '!',
++ 'test' =&gt; '|t!',
++ 'list' =&gt; '|l!',
++ 'config' =&gt; '=s',
++ 'skip-prei' =&gt; '=s@',
++ 'skip-post' =&gt; '=s@',
++ 'skip-reject' =&gt; '=s@',
++ },
++ directories =&gt; [ &quot;$ENV{HOME}/.youri&quot;, '/usr/local/etc/youri' ],
++ file =&gt; 'submit.conf',
++);
++
++if ($config-&gt;get_arg('list')) {
++ my $category = $ARGV[0];
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No category specified, aborting\n&quot;)
++ unless $category;
++ if ($category eq 'targets') {
++ print join(' ', keys %{$config-&gt;get_param('targets')});
++ } elsif ($category eq 'checks' || $category eq 'actions') {
++ my $target = $ARGV[1];
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No target specified, aborting\n&quot;)
++ unless $target;
++ if ($category eq 'checks') {
++ my $checks = $config-&gt;get_param('targets')-&gt;{$target}-&gt;{checks};
++ print join(' ', @{$checks}) if $checks;
++ } else {
++ my $actions = $config-&gt;get_param('targets')-&gt;{$target}-&gt;{actions};
++ print join(' ', @{$actions}) if $actions;
++ }
++ } else {
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;Invalid category $category, aborting\n&quot;)
++ }
++ print &quot;\n&quot;;
++ exit 0;
++}
++
++if ($config-&gt;get_arg('help')) {
++ my $category = $ARGV[0];
++ my ($item, $section);
++ if ($category eq 'repository') {
++ $section = $config-&gt;get_param('repository');
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No repository defined, aborting\n&quot;
++ ) unless $section;
++ } elsif ($category eq 'check' || $category eq 'action') {
++ $item = $ARGV[1];
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No item specified, aborting\n&quot;
++ ) unless $item;
++ if ($category eq 'check') {
++ $section = $config-&gt;get_param('checks')-&gt;{$item};
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No such check $item defined, aborting\n&quot;
++ ) unless $section;
++ } else {
++ $section = $config-&gt;get_param('actions')-&gt;{$item};
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No such action $item defined, aborting\n&quot;
++ ) unless $section;
++ }
++ } else {
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;Invalid category $category, aborting\n&quot;)
++ }
++ my $file = $section-&gt;{class} . '.pm';
++ $file =~ s/::/\//g;
++ pod2usage(
++ -verbose =&gt; 99,
++ -sections =&gt; 'NAME|DESCRIPTION',
++ -input =&gt; $file,
++ -pathlist =&gt; \@INC
++ );
++}
++
++
++pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No target specified, aborting\n&quot;)
++ unless @ARGV &gt; 0;
++pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No packages specified, aborting\n&quot;)
++ unless @ARGV &gt; 1 || $config-&gt;get_param('allow_omitting_packages');
++
++# convenient global flags
++my $test = $config-&gt;get_arg('test');
++my $verbose = $config-&gt;get_arg('verbose');
++
++# check target
++my $target = shift @ARGV;
++my $target_conf = $config-&gt;get_param('targets')-&gt;{$target};
++
++# create repository
++my $repository;
++my $repository_conf = $config-&gt;get_param('repository');
++die &quot;No repository declared&quot; unless $repository_conf;
++print &quot;Creating repository\n&quot; if $verbose;
++eval {
++ $repository = create_instance(
++ 'Youri::Repository',
++ $repository_conf,
++ {
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ targets =&gt; [ keys %{$config-&gt;get_param('targets')} ],
++ }
++ );
++};
++die &quot;Failed to create repository: $@\n&quot; if $@;
++
++# perfrom pre action
++my @errors;
++my $pre_packages = [];
++my $skip_pres = $config-&gt;get_arg('skip-pre');
++my %skip_pres = $skip_pres ? map { $_ =&gt; 1 } @{$skip_pres} : ();
++foreach my $id (@{$target_conf-&gt;{pres}}) {
++ next if $skip_pres{$id};
++ print &quot;Creating pre $id\n&quot; if $verbose;
++ my $pre;
++ my $pre_conf = $config-&gt;get_param('pres')-&gt;{$id};
++
++ if (!$pre_conf) {
++ print STDERR &quot;No such pre $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $pre = create_instance(
++ 'Youri::Submit::Pre',
++ $pre_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create pre $id: $@\n&quot;;
++ } else {
++ print &quot;running pre $id\n&quot; if $verbose;
++ my @err = $pre-&gt;run(
++ $pre_packages,
++ $repository,
++ $target,
++ $config-&gt;get_arg('define')
++ );
++ push(@errors, @err) if $err[0];
++ }
++}
++
++if (@errors) {
++ print &quot;Pre-submission errors, aborting:\n&quot;;
++ foreach my $error (@errors) {
++ print &quot; - $error\n&quot;;
++ }
++ exit(1)
++}
++
++# create packages group
++my $group_error;
++my @packages_group;
++foreach my $group ([ map { { section =&gt; &quot;&quot;, file =&gt; $_ } } @ARGV ], @$pre_packages) {
++ my @packages;
++ foreach my $opt (@$group) {
++ print &quot;Preparing upload for $opt-&gt;{file} in $opt-&gt;{section}\n&quot; if $verbose;
++ $repository-&gt;{packages}{$opt-&gt;{file}}{section} = $opt-&gt;{section};
++ push(
++ @packages,
++ create_instance(
++ 'Youri::Package',
++ {
++ class =&gt; $repository-&gt;get_package_class(),
++ },
++ {
++ file =&gt; $opt-&gt;{file},
++ %$opt
++ },
++ )
++ );
++ }
++ @packages or next;
++
++# check all packages pass all tests
++ my %errors;
++ my $skip_check = $config-&gt;get_arg('skip-check');
++ my %skip_check = $skip_check ? map { $_ =&gt; 1 } @{$skip_check} : ();
++ my @error;
++ foreach my $id (@{$target_conf-&gt;{checks}}) {
++ next if $skip_check{$id};
++ print &quot;Creating check $id\n&quot; if $verbose;
++ my $check;
++ my $check_conf = $config-&gt;get_param('checks')-&gt;{$id};
++
++ if (!$check_conf) {
++ print STDERR &quot;No such check $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $check = create_instance(
++ 'Youri::Submit::Check',
++ $check_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create check $id: $@\n&quot;;
++ } else {
++ foreach my $package (@packages) {
++ print &quot;running check $id on package $package\n&quot; if $verbose;
++ my @errors = $check-&gt;run(
++ $package,
++ $repository,
++ $target,
++ $config-&gt;get_arg('define')
++ );
++ push(@{$errors{$package}}, @errors) if $errors[0];
++ }
++ }
++ }
++ if (%errors) {
++ print &quot;Submission errors, aborting:\n&quot;;
++ foreach my $package (keys %errors) {
++ print &quot;- $package:\n&quot;;
++ foreach my $error (@{$errors{$package}}) {
++ print &quot; - $error\n&quot;;
++ }
++ }
++ # reject the packages
++ my $skip_rejects = $config-&gt;get_arg('skip-reject');
++ my %skip_rejects = $skip_rejects ? map { $_ =&gt; 1 } @{$skip_rejects} : ();
++ foreach my $id (@{$target_conf-&gt;{rejects}}) {
++ next if $skip_rejects{$id};
++ print &quot;Creating reject $id\n&quot; if $verbose;
++ my $reject;
++ my $reject_conf = $config-&gt;get_param('rejects')-&gt;{$id};
++
++ if (!$reject_conf) {
++ print STDERR &quot;No such reject $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $reject = create_instance(
++ 'Youri::Submit::Reject',
++ $reject_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create reject $id: $@\n&quot;;
++ } else {
++ foreach my $package (@packages) {
++ print &quot;running reject $id on package $package\n&quot; if $verbose;
++ eval {
++ $reject-&gt;run($package, \%errors, $repository, $target, $config-&gt;get_arg('define'));
++ };
++ if ($@) {
++ print STDERR &quot;Failed to run action $id on package $package: $@\n&quot;;
++ }
++ }
++ }
++ }
++ $group_error = 1;
++ next
++ }
++
++# proceed further
++ my $skip_action = $config-&gt;get_arg('skip-action');
++ my %skip_action = $skip_action ? map { $_ =&gt; 1 } @{$skip_action} : ();
++ foreach my $id (@{$target_conf-&gt;{actions}}) {
++ next if $skip_action{$id};
++ print &quot;Creating action $id\n&quot; if $verbose;
++ my $action;
++ my $action_conf = $config-&gt;get_param('actions')-&gt;{$id};
++
++ if (!$action_conf) {
++ print STDERR &quot;No such action $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $action = create_instance(
++ 'Youri::Submit::Action',
++ $action_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create action $id: $@\n&quot;;
++ } else {
++ foreach my $package (@packages) {
++ print &quot;running action $id on package $package\n&quot; if $verbose;
++ eval {
++ $action-&gt;run(
++ $package,
++ $repository,
++ $target,
++ $config-&gt;get_arg('define')
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to run action $id on package $package: $@\n&quot;;
++ }
++ }
++ }
++ }
++
++ if ($config-&gt;get_arg('clean')) {
++ foreach my $package (@packages) {
++ print &quot;cleaning file $package\n&quot; if $verbose;
++ unlink $package-&gt;as_file();
++ }
++ }
++}
++
++# perfrom post action
++my $skip_post = $config-&gt;get_arg('skip-post');
++my %skip_post = $skip_post ? map { $_ =&gt; 1 } @{$skip_post} : ();
++foreach my $id (@{$target_conf-&gt;{posts}}) {
++ next if $skip_post{$id};
++ print &quot;Creating post $id\n&quot; if $verbose;
++ my $post;
++ my $post_conf = $config-&gt;get_param('posts')-&gt;{$id};
++
++ if (!$post_conf) {
++ print STDERR &quot;No such post $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $post = create_instance(
++ 'Youri::Submit::Post',
++ $post_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create post $id: $@\n&quot;;
++ } else {
++ print &quot;running post $id\n&quot; if $verbose;
++ my @err = $post-&gt;run($repository, $target, $config-&gt;get_arg('define'));
++ print STDERR &quot;Error $id: @err\n&quot; if @err
++ }
++}
++
++exit(1) if $group_error;
+
+
+Property changes on: build_system/mdv-youri-submit/trunk/bin/youri-submit
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-submit/trunk/bin/youri-submit-proxy.in
+===================================================================
+--- build_system/mdv-youri-submit/trunk/bin/youri-submit-proxy.in (rev 0)
++++ build_system/mdv-youri-submit/trunk/bin/youri-submit-proxy.in 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,77 @@
++#!/usr/bin/perl
++
++=head1 NAME
++
++youri-submit-proxy - proxy wrapper over youri-submit-restricted
++
++=head1 VERSION
++
++Version 1.0
++
++=head1 SYNOPSIS
++
++youri-submit-proxy [options] &lt;target&gt; &lt;files&gt;
++
++=head1 DESCRIPTION
++
++youri-submit-proxy is a proxy wrapper over youri-submit-restricted, intended to
++be used in collaborative work to change uid before calling it through sudo.
++
++=head1 SEE ALSO
++
++youri-submit-restricted(1), youri-submit(1)
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++use strict;
++use warnings;
++use Fcntl ':mode';
++use File::Basename;
++
++my ($uid, $gid);
++if (-l $0) {
++ # this is a symlink, get uid and gid from it
++ ($uid, $gid) = (lstat($0))[4, 5];
++} else {
++ ($uid, $gid) = (stat($0))[4, 5];
++}
++my $user = getpwuid($uid) or die &quot;unknown uid $uid&quot;;
++my $prog = '@bindir@/youri-submit-restricted';
++
++my %dirs;
++my @options;
++foreach my $arg (@ARGV) {
++ if (-f $arg) {
++ # push parent dir in list
++ my $parent = dirname($arg);
++ $dirs{$parent}++;
++ }
++ push(@options, $arg);
++}
++
++foreach my $dir (keys %dirs) {
++ # save original perms and gid
++ my ($orig_mode, $orig_gid) = (stat($dir))[2,5];
++ $dirs{$dir} = {
++ mode =&gt; $orig_mode,
++ gid =&gt; $orig_gid
++ };
++ # ensure correct perms and gid
++ chown -1, $gid, $dir;
++ chmod $orig_mode|S_IRGRP|S_IWGRP, $dir;
++}
++
++# call wrapped program
++system('sudo', '-H', '-u', $user, $prog, @options);
++
++foreach my $dir (keys %dirs) {
++ # restore original perms and gid
++ chown -1, $dirs{$dir}-&gt;{gid}, $dir;
++ chmod $dirs{$dir}-&gt;{mode}, $dir;
++}
+
+
+Property changes on: build_system/mdv-youri-submit/trunk/bin/youri-submit-proxy.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-submit/trunk/bin/youri-submit-restricted.in
+===================================================================
+--- build_system/mdv-youri-submit/trunk/bin/youri-submit-restricted.in (rev 0)
++++ build_system/mdv-youri-submit/trunk/bin/youri-submit-restricted.in 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,64 @@
++#!/usr/bin/perl -T
++
++=head1 NAME
++
++youri-submit-restricted - filtering wrapper over youri-submit
++
++=head1 VERSION
++
++Version 1.0
++
++=head1 SYNOPSIS
++
++youri-submit-restricted [options] &lt;target&gt; &lt;files&gt;
++
++=head1 DESCRIPTION
++
++youri-submit-restricted is just a filtering wrapper over youri-submit, intended
++to be used in collaborative work to sanitize environment and options before
++calling it.
++
++=head1 SEE ALSO
++
++youri-submit(1)
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++use strict;
++use warnings;
++
++my $prog = '@bindir@/youri-submit';
++my @prohibited_options = qw/--config --skip-check --skip-action/;
++my %prohibited_options = map { $_ =&gt; 1 } @prohibited_options;
++my @prohibited_envvars = qw/
++ ENV BASH_ENV IFS CDPATH
++ PERLLIB PERL5LIB PERL5OPT PERLIO
++ PERLIO_DEBUG PERL5DB PERL_ENCODING
++ PERL_HASH_SEED PERL_SIGNALS PERL_UNICODE
++/;
++
++my @options;
++while (my $arg = shift @ARGV) {
++ if ($prohibited_options{$arg}) {
++ # drop prohibited options
++ print STDERR &quot;prohibited option $arg, skipping\n&quot;;
++ shift @ARGV;
++ } else {
++ # untaint everything else
++ $arg =~ /(.*)/;
++ push(@options, $1);
++ }
++}
++
++# secure ENV
++$ENV{PATH} = &quot;/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin&quot;;
++delete $ENV{$_} foreach @prohibited_envvars;
++
++# call wrapped program
++system($prog, @options);
+
+
+Property changes on: build_system/mdv-youri-submit/trunk/bin/youri-submit-restricted.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-submit/trunk/bin/youri-submit.in
+===================================================================
+--- build_system/mdv-youri-submit/trunk/bin/youri-submit.in (rev 0)
++++ build_system/mdv-youri-submit/trunk/bin/youri-submit.in 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,534 @@
++#!/usr/bin/perl
++# $Id: youri-submit.in 232668 2007-12-21 14:37:04Z blino $
++
++=head1 NAME
++
++youri-submit - package submission tool
++
++=head1 VERSION
++
++Version 2.0
++
++=head1 SYNOPSIS
++
++youri-submit [options] &lt;target&gt; &lt;files&gt;
++
++youri-submit --list &lt;category&gt; [target]
++
++youri-submit --help [category] [item]
++
++Options:
++
++ --config &lt;file&gt; use file &lt;file&gt; as config file
++ --skip-pre &lt;pre&gt; skip pre &lt;pre&gt;
++ --skip-check &lt;check&gt; skip check &lt;check&gt;
++ --skip-action &lt;action&gt; skip action &lt;action&gt;
++ --skip-post &lt;post&gt; skip post &lt;post&gt;
++ --skip-reject &lt;reject&gt; skip reject &lt;reject&gt;
++ --define &lt;key&gt;=&lt;value&gt; pass additional values
++ --clean delete package after success
++ --verbose verbose run
++ --test test run
++ --list &lt;category&gt; list items from given category
++ --help [category] display contextual help
++
++=head1 DESCRIPTION
++
++B&lt;youri-submit&gt; allows to submit packages to a repository.
++
++All packages given on command lines are passed to a list of check plugins,
++depending on given upload target. If none of them fails, all packages are
++passed to a list of action plugins, depending also on given upload target.
++
++=head1 OPTIONS
++
++=over
++
++=item B&lt;--config&gt; I&lt;file&gt;
++
++Use given file as configuration, instead of normal one.
++
++=item B&lt;--skip-pre&gt; I&lt;id&gt;
++
++Skip pre transaction plugin with given identity
++
++=item B&lt;--skip-check&gt; I&lt;id&gt;
++
++Skip check plugin with given identity.
++
++=item B&lt;--skip-action&gt; I&lt;id&gt;
++
++Skip action plugin with given identity.
++
++=item B&lt;--skip-post&gt; I&lt;id&gt;
++
++Skip post transaction plugin with given identity.
++
++=item B&lt;--skip-reject&gt; I&lt;id&gt;
++
++Skip reject action plugin with given identity.
++
++=item B&lt;--define&gt; &lt;key&gt;=&lt;value&gt;
++
++Define additional parameters, to be used by plugins.
++
++=item B&lt;--clean&gt;
++
++Delete submited packages upon successfull submission.
++
++=item B&lt;--verbose&gt;
++
++Produce more verbose output (can be used more than once)
++
++=item B&lt;--test&gt;
++
++Don't perform any modification.
++
++=item B&lt;--list&gt; I&lt;category&gt;
++
++List available items from given category and exits. Category must be either
++B&lt;targets&gt;, B&lt;actions&gt; or B&lt;checks&gt;. A target is needed for the two last ones.
++
++=item B&lt;--help&gt; I&lt;category&gt;
++
++Display help for given category and exits. Category must be either
++B&lt;repository&gt;, B&lt;action&gt; or B&lt;check&gt;. An item is needed for the two last ones.
++If no category given, display standard help.
++
++=back
++
++=head1 CONFIGURATION
++
++Configuration is read from the first file found among:
++
++=over
++
++=item * the one specified by B&lt;--config&gt; option on command-line
++
++=item * $HOME/.youri/submit.conf
++
++=item * /usr/local/etc/youri/submit.conf
++
++=back
++
++The configuration file should be a YAML-format files, with the following
++mandatory top-level directives:
++
++=over
++
++=item B&lt;repository&gt;
++
++The definition of repository plugin to be used.
++
++=item B&lt;targets&gt;
++
++The list of available submission targets, each one being composed from the
++following keys:
++
++=over
++
++=item B&lt;checks&gt;
++
++The list of check plugins to use for this target.
++
++=item B&lt;actions&gt;
++
++The list of action plugins to use for this target.
++
++=back
++
++=item B&lt;checks&gt;
++
++The list of check plugin definitions, indexed by their identity.
++
++=item B&lt;actions&gt;
++
++The list of action plugin definitions, indexed by their identity.
++
++=back
++
++=head1 SEE ALSO
++
++Youri::Config, for additional details about configuration file format.
++
++Each used plugin man page, for available options.
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++use strict;
++use warnings;
++
++use Youri::Config;
++use Youri::Utils;
++use Pod::Usage;
++
++my $config = Youri::Config-&gt;new(
++ args =&gt; {
++ 'skip-check' =&gt; '=s@',
++ 'skip-action' =&gt; '=s@',
++ 'define' =&gt; '=s%',
++ 'verbose' =&gt; '|v!',
++ 'clean' =&gt; '!',
++ 'test' =&gt; '|t!',
++ 'list' =&gt; '|l!',
++ 'config' =&gt; '=s',
++ 'skip-prei' =&gt; '=s@',
++ 'skip-post' =&gt; '=s@',
++ 'skip-reject' =&gt; '=s@',
++ },
++ directories =&gt; [ &quot;$ENV{HOME}/.youri&quot;, '@sysconfdir@/youri' ],
++ file =&gt; 'submit.conf',
++);
++
++if ($config-&gt;get_arg('list')) {
++ my $category = $ARGV[0];
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No category specified, aborting\n&quot;)
++ unless $category;
++ if ($category eq 'targets') {
++ print join(' ', keys %{$config-&gt;get_param('targets')});
++ } elsif ($category eq 'checks' || $category eq 'actions') {
++ my $target = $ARGV[1];
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No target specified, aborting\n&quot;)
++ unless $target;
++ if ($category eq 'checks') {
++ my $checks = $config-&gt;get_param('targets')-&gt;{$target}-&gt;{checks};
++ print join(' ', @{$checks}) if $checks;
++ } else {
++ my $actions = $config-&gt;get_param('targets')-&gt;{$target}-&gt;{actions};
++ print join(' ', @{$actions}) if $actions;
++ }
++ } else {
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;Invalid category $category, aborting\n&quot;)
++ }
++ print &quot;\n&quot;;
++ exit 0;
++}
++
++if ($config-&gt;get_arg('help')) {
++ my $category = $ARGV[0];
++ my ($item, $section);
++ if ($category eq 'repository') {
++ $section = $config-&gt;get_param('repository');
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No repository defined, aborting\n&quot;
++ ) unless $section;
++ } elsif ($category eq 'check' || $category eq 'action') {
++ $item = $ARGV[1];
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No item specified, aborting\n&quot;
++ ) unless $item;
++ if ($category eq 'check') {
++ $section = $config-&gt;get_param('checks')-&gt;{$item};
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No such check $item defined, aborting\n&quot;
++ ) unless $section;
++ } else {
++ $section = $config-&gt;get_param('actions')-&gt;{$item};
++ pod2usage(
++ -verbose =&gt; 0,
++ -message =&gt; &quot;No such action $item defined, aborting\n&quot;
++ ) unless $section;
++ }
++ } else {
++ pod2usage(-verbose =&gt; 0, -message =&gt; &quot;Invalid category $category, aborting\n&quot;)
++ }
++ my $file = $section-&gt;{class} . '.pm';
++ $file =~ s/::/\//g;
++ pod2usage(
++ -verbose =&gt; 99,
++ -sections =&gt; 'NAME|DESCRIPTION',
++ -input =&gt; $file,
++ -pathlist =&gt; \@INC
++ );
++}
++
++
++pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No target specified, aborting\n&quot;)
++ unless @ARGV &gt; 0;
++pod2usage(-verbose =&gt; 0, -message =&gt; &quot;No packages specified, aborting\n&quot;)
++ unless @ARGV &gt; 1 || $config-&gt;get_param('allow_omitting_packages');
++
++# convenient global flags
++my $test = $config-&gt;get_arg('test');
++my $verbose = $config-&gt;get_arg('verbose');
++
++# check target
++my $target = shift @ARGV;
++my $target_conf = $config-&gt;get_param('targets')-&gt;{$target};
++
++# create repository
++my $repository;
++my $repository_conf = $config-&gt;get_param('repository');
++die &quot;No repository declared&quot; unless $repository_conf;
++print &quot;Creating repository\n&quot; if $verbose;
++eval {
++ $repository = create_instance(
++ 'Youri::Repository',
++ $repository_conf,
++ {
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ targets =&gt; [ keys %{$config-&gt;get_param('targets')} ],
++ }
++ );
++};
++die &quot;Failed to create repository: $@\n&quot; if $@;
++
++# perfrom pre action
++my @errors;
++my $pre_packages = [];
++my $skip_pres = $config-&gt;get_arg('skip-pre');
++my %skip_pres = $skip_pres ? map { $_ =&gt; 1 } @{$skip_pres} : ();
++foreach my $id (@{$target_conf-&gt;{pres}}) {
++ next if $skip_pres{$id};
++ print &quot;Creating pre $id\n&quot; if $verbose;
++ my $pre;
++ my $pre_conf = $config-&gt;get_param('pres')-&gt;{$id};
++
++ if (!$pre_conf) {
++ print STDERR &quot;No such pre $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $pre = create_instance(
++ 'Youri::Submit::Pre',
++ $pre_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create pre $id: $@\n&quot;;
++ } else {
++ print &quot;running pre $id\n&quot; if $verbose;
++ my @err = $pre-&gt;run(
++ $pre_packages,
++ $repository,
++ $target,
++ $config-&gt;get_arg('define')
++ );
++ push(@errors, @err) if $err[0];
++ }
++}
++
++if (@errors) {
++ print &quot;Pre-submission errors, aborting:\n&quot;;
++ foreach my $error (@errors) {
++ print &quot; - $error\n&quot;;
++ }
++ exit(1)
++}
++
++# create packages group
++my $group_error;
++my @packages_group;
++foreach my $group ([ map { { section =&gt; &quot;&quot;, file =&gt; $_ } } @ARGV ], @$pre_packages) {
++ my @packages;
++ foreach my $opt (@$group) {
++ print &quot;Preparing upload for $opt-&gt;{file} in $opt-&gt;{section}\n&quot; if $verbose;
++ $repository-&gt;{packages}{$opt-&gt;{file}}{section} = $opt-&gt;{section};
++ push(
++ @packages,
++ create_instance(
++ 'Youri::Package',
++ {
++ class =&gt; $repository-&gt;get_package_class(),
++ },
++ {
++ file =&gt; $opt-&gt;{file},
++ %$opt
++ },
++ )
++ );
++ }
++ @packages or next;
++
++# check all packages pass all tests
++ my %errors;
++ my $skip_check = $config-&gt;get_arg('skip-check');
++ my %skip_check = $skip_check ? map { $_ =&gt; 1 } @{$skip_check} : ();
++ my @error;
++ foreach my $id (@{$target_conf-&gt;{checks}}) {
++ next if $skip_check{$id};
++ print &quot;Creating check $id\n&quot; if $verbose;
++ my $check;
++ my $check_conf = $config-&gt;get_param('checks')-&gt;{$id};
++
++ if (!$check_conf) {
++ print STDERR &quot;No such check $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $check = create_instance(
++ 'Youri::Submit::Check',
++ $check_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create check $id: $@\n&quot;;
++ } else {
++ foreach my $package (@packages) {
++ print &quot;running check $id on package $package\n&quot; if $verbose;
++ my @errors = $check-&gt;run(
++ $package,
++ $repository,
++ $target,
++ $config-&gt;get_arg('define')
++ );
++ push(@{$errors{$package}}, @errors) if $errors[0];
++ }
++ }
++ }
++ if (%errors) {
++ print &quot;Submission errors, aborting:\n&quot;;
++ foreach my $package (keys %errors) {
++ print &quot;- $package:\n&quot;;
++ foreach my $error (@{$errors{$package}}) {
++ print &quot; - $error\n&quot;;
++ }
++ }
++ # reject the packages
++ my $skip_rejects = $config-&gt;get_arg('skip-reject');
++ my %skip_rejects = $skip_rejects ? map { $_ =&gt; 1 } @{$skip_rejects} : ();
++ foreach my $id (@{$target_conf-&gt;{rejects}}) {
++ next if $skip_rejects{$id};
++ print &quot;Creating reject $id\n&quot; if $verbose;
++ my $reject;
++ my $reject_conf = $config-&gt;get_param('rejects')-&gt;{$id};
++
++ if (!$reject_conf) {
++ print STDERR &quot;No such reject $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $reject = create_instance(
++ 'Youri::Submit::Reject',
++ $reject_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create reject $id: $@\n&quot;;
++ } else {
++ foreach my $package (@packages) {
++ print &quot;running reject $id on package $package\n&quot; if $verbose;
++ eval {
++ $reject-&gt;run($package, \%errors, $repository, $target, $config-&gt;get_arg('define'));
++ };
++ if ($@) {
++ print STDERR &quot;Failed to run action $id on package $package: $@\n&quot;;
++ }
++ }
++ }
++ }
++ $group_error = 1;
++ next
++ }
++
++# proceed further
++ my $skip_action = $config-&gt;get_arg('skip-action');
++ my %skip_action = $skip_action ? map { $_ =&gt; 1 } @{$skip_action} : ();
++ foreach my $id (@{$target_conf-&gt;{actions}}) {
++ next if $skip_action{$id};
++ print &quot;Creating action $id\n&quot; if $verbose;
++ my $action;
++ my $action_conf = $config-&gt;get_param('actions')-&gt;{$id};
++
++ if (!$action_conf) {
++ print STDERR &quot;No such action $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $action = create_instance(
++ 'Youri::Submit::Action',
++ $action_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create action $id: $@\n&quot;;
++ } else {
++ foreach my $package (@packages) {
++ print &quot;running action $id on package $package\n&quot; if $verbose;
++ eval {
++ $action-&gt;run(
++ $package,
++ $repository,
++ $target,
++ $config-&gt;get_arg('define')
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to run action $id on package $package: $@\n&quot;;
++ }
++ }
++ }
++ }
++
++ if ($config-&gt;get_arg('clean')) {
++ foreach my $package (@packages) {
++ print &quot;cleaning file $package\n&quot; if $verbose;
++ unlink $package-&gt;as_file();
++ }
++ }
++}
++
++# perfrom post action
++my $skip_post = $config-&gt;get_arg('skip-post');
++my %skip_post = $skip_post ? map { $_ =&gt; 1 } @{$skip_post} : ();
++foreach my $id (@{$target_conf-&gt;{posts}}) {
++ next if $skip_post{$id};
++ print &quot;Creating post $id\n&quot; if $verbose;
++ my $post;
++ my $post_conf = $config-&gt;get_param('posts')-&gt;{$id};
++
++ if (!$post_conf) {
++ print STDERR &quot;No such post $id, skipping\n&quot;;
++ next;
++ }
++ eval {
++ $post = create_instance(
++ 'Youri::Submit::Post',
++ $post_conf,
++ {
++ id =&gt; $id,
++ test =&gt; $test,
++ verbose =&gt; $verbose &gt; 0 ? $verbose - 1 : 0,
++ }
++ );
++ };
++ if ($@) {
++ print STDERR &quot;Failed to create post $id: $@\n&quot;;
++ } else {
++ print &quot;running post $id\n&quot; if $verbose;
++ my @err = $post-&gt;run($repository, $target, $config-&gt;get_arg('define'));
++ print STDERR &quot;Error $id: @err\n&quot; if @err
++ }
++}
++
++exit(1) if $group_error;
+
+
+Property changes on: build_system/mdv-youri-submit/trunk/bin/youri-submit.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-submit/trunk/etc/bash_completion.d/youri-submit
+===================================================================
+--- build_system/mdv-youri-submit/trunk/etc/bash_completion.d/youri-submit (rev 0)
++++ build_system/mdv-youri-submit/trunk/etc/bash_completion.d/youri-submit 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,60 @@
++# youri-submit completion
++# $Id$
++
++_youri-submit()
++{
++
++ local cur prev config
++
++ COMPREPLY=()
++ cur=${COMP_WORDS[COMP_CWORD]}
++ prev=${COMP_WORDS[COMP_CWORD-1]}
++
++ case &quot;$prev&quot; in
++ --config)
++ _filedir
++ return 0
++ ;;
++ --list)
++ COMPREPLY=( $( compgen -W 'targets checks actions' -- $cur ) )
++ return 0
++ ;;
++ --help)
++ COMPREPLY=( $( compgen -W 'repository check action' -- $cur ) )
++ return 0
++ ;;
++ esac
++
++ if [[ &quot;$cur&quot; == -* ]]; then
++ COMPREPLY=( $( compgen -W '--define --clean -l --list -h --help -t \
++ --test -v --verbose' -- $cur ) )
++ # add dangereous option for main command
++ if [[ ${COMP_WORDS[0]} == youri-submit ]]; then
++ COMPREPLY=( $( compgen -W '${COMPREPLY[@]} --config --skip-check \
++ --skip-action' -- $cur ) )
++ fi
++ else
++ _count_args
++ case $args in
++ 1)
++ _find_config
++ COMPREPLY=( $( compgen -W '$( youri-submit $config --list targets )' -- $cur ) )
++ ;;
++ *)
++ _filedir
++ ;;
++ esac
++ fi
++
++}
++complete -F _youri-submit youri-submit youri-submit-restricted youri-submit-proxy
++
++_find_config()
++{
++ for (( i=1; i &lt; COMP_CWORD; i++ )); do
++ if [[ &quot;${COMP_WORDS[i]}&quot; == --config ]]; then
++ config=&quot;--config ${COMP_WORDS[i+1]}&quot;
++ break
++ fi
++ done
++}
+
+Added: build_system/mdv-youri-submit/trunk/etc/submit.conf
+===================================================================
+--- build_system/mdv-youri-submit/trunk/etc/submit.conf (rev 0)
++++ build_system/mdv-youri-submit/trunk/etc/submit.conf 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,134 @@
++# youri-submit sample configuration file
++# $Id: submit.conf 1723 2006-10-17 13:53:27Z warly $
++
++# helper variables
++home: /home/user
++
++# repository definition
++repository:
++ class: Youri::Repository::PLF
++ options:
++ install_root: ${home}/ftp/mandriva
++ version_root: ${home}/cvs
++ archive_root: ${home}/backup/mandriva
++ noarch: i586
++
++# targets definitions
++targets:
++ cooker:
++ checks:
++ - tag
++ - recency
++ - history
++ actions:
++ - sign
++ - install
++ - link
++ - archive
++ - clean
++ - bugzilla
++ - cvs
++ - mail
++ - rss
++
++ 2006.0:
++ checks:
++ - type
++ - tag
++ - recency
++ - history
++ - precedence
++ actions:
++ - sign
++ - install
++ - link
++ - archive
++ - clean
++
++# checks definitions
++checks:
++ tag:
++ class: Youri::Submit::Check::Tag
++ options:
++ tags:
++ release: 'plf$'
++ packager: '&lt;\<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">w+ at zarb</A>\.org&gt;$'
++ distribution: '^Mandriva Linux$'
++ vendor: '^Penguin Liberation Front$'
++
++ recency:
++ class: Youri::Submit::Check::Recency
++
++ history:
++ class: Youri::Submit::Check::History
++
++ precedence:
++ class: Youri::Submit::Check::Precedence
++ options:
++ target: cooker
++
++ type:
++ class: Youri::Submit::Check::Type
++ type: binary
++
++# actions definitions
++actions:
++ sign:
++ class: Youri::Submit::Action::Sign
++ options:
++ name: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
++ path: ${home}/.gnupg
++ passphrase: s3kr3t
++
++ install:
++ class: Youri::Submit::Action::Install
++
++ link:
++ class: Youri::Submit::Action::Link
++
++ archive:
++ class: Youri::Submit::Action::Archive
++
++ clean:
++ class: Youri::Submit::Action::Clean
++
++ mail:
++ class: Youri::Submit::Action::Mail
++ options:
++ mta: /usr/sbin/sendmail
++ to: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf-announce at zarb.org</A>
++ reply_to: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf-discuss at zarb.org</A>
++ from: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
++ prefix: RPM
++ cc:
++ hot-base: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">david at dindinx.org</A> <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">bellamy at neverland.net</A>
++ dcgui: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mathen at ketelhot.de</A>
++ dclib: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mathen at ketelhot.de</A>
++ Video-DVDRip: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">dvdrip-users at exit1.org</A>
++ hackVideo-DVDRip: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">dvdrip-users at exit1.org</A>
++ goosnes: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">tak at bard.sytes.net</A>
++ avidemux: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">fixounet at free.fr</A>
++ vobcopy: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">robos at muon.de</A>
++ drip: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">drip-devel at lists.sourceforge.net</A>
++ libdscaler: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">vektor at dumbterm.net</A>
++ xawdecode: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">pingus77 at ifrance.com</A>
++
++ rss:
++ class: Youri::Submit::Action::RSS
++ options:
++ file: ${home}/www/changelog.rss
++ title: PLF packages updates
++ link: <A HREF="http://plf.zarb.org/">http://plf.zarb.org/</A>
++ description: ChangeLog for PLF packages
++
++ cvs:
++ class: Youri::Submit::Action::CVS
++
++ bugzilla:
++ class: Youri::Submit::Action::Bugzilla
++ options:
++ host: localhost
++ base: plf_bugs
++ user: plf
++ pass: s3kr3t
++ contact: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Archive.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Archive.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Archive.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,90 @@
++# $Id: Archive.pm 265457 2010-01-28 13:09:30Z pterjan $
++package Youri::Submit::Action::Archive;
++
++=head1 NAME
++
++Youri::Submit::Action::Archive - Old revisions archiving
++
++=head1 DESCRIPTION
++
++This action plugin ensures archiving of old package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ @_
++ );
++
++ $self-&gt;{_perms} = $options{perms};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # FIXME: workaround for $self-&gt;{_verbose} not being initialized properly
++ $self-&gt;{_verbose} = 1;
++ # all this should be in Mandriva_upload.pm
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ my $main_section = $repository-&gt;_get_main_section($package, $target, $define);
++ print &quot;section $section main_section $main_section\n&quot; if $self-&gt;{_verbose};
++ my $arch = $package-&gt;get_arch();
++ $arch = $self-&gt;{_noarch} if $arch eq 'noarch';
++ my $path = $arch eq 'src' ? &quot;$target/SRPMS&quot; : &quot;$target/$arch/media&quot;;
++ $path = &quot;$repository-&gt;{_install_root}/$path&quot;;
++ $path =~ s,/+,/,g;
++ foreach my $replaced_package (
++ $repository-&gt;get_replaced_packages($package, $target, $define)
++ ) {
++ my $file = $replaced_package-&gt;get_file();
++
++ # trap for debugging bug 34999
++ if ($file =~ /\/[\d.]+\/(main\/updates|.*\/release)/) {
++ my $bugmsg = &quot;BUG#34999 WARNING: trying to remove from a release: $file\n&quot;;
++ open(BUG34999LOG, '&gt;&gt;', &quot;/home/mandrake/bug34999.log&quot;);
++ print $bugmsg;
++ print BUG34999LOG localtime().&quot;: &quot;.$bugmsg;
++ close BUG34999LOG;
++
++ next;
++ }
++
++ my ($rep_section, $rep_main_section) = $file =~ m,$path/(([^/]+)/.*)/[^/]+.rpm,;
++ # We do accept duplicate version for other submedia of the same main media section
++ print &quot;(path '$path') file '$file' section '$rep_section' main_section '$rep_main_section'\n&quot; if $self-&gt;{_verbose};
++ next if $rep_main_section eq $main_section &amp;&amp; $rep_section ne $section;
++ my $dest = $repository-&gt;get_archive_dir($package, $target, $define);
++
++ print &quot;archiving file $file to $dest\n&quot; if $self-&gt;{_verbose};
++
++ unless ($self-&gt;{_test}) {
++ # create destination dir if needed
++ system(&quot;install -d -m &quot; . ($self-&gt;{_perms} + 111) . &quot; $dest&quot;)
++ unless -d $dest;
++
++ # install file to new location
++ system(&quot;install -m $self-&gt;{_perms} $file $dest&quot;);
++
++ print &quot;deleting file $file\n&quot; if $self-&gt;{_verbose};
++ unlink $file unless $self-&gt;{_test};
++ }
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Bugzilla.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Bugzilla.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Bugzilla.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,81 @@
++# $Id: Bugzilla.pm 1700 2006-10-16 12:57:42Z warly $
++package Youri::Submit::Action::Bugzilla;
++
++=head1 NAME
++
++Youri::Submit::Action::Bugzilla - Bugzilla synchronisation
++
++=head1 DESCRIPTION
++
++This action plugin ensures synchronisation with Bugzilla.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Bugzilla;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ host =&gt; '',
++ base =&gt; '',
++ user =&gt; '',
++ pass =&gt; '',
++ contact =&gt; '',
++ @_
++ );
++
++ $self-&gt;{_bugzilla} = Youri::Bugzilla-&gt;new(
++ $options{host},
++ $options{base},
++ $options{user},
++ $options{pass}
++ );
++ $self-&gt;{_contact} = $options{contact};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return unless $package-&gt;is_source();
++
++ my $name = $package-&gt;get_name();
++ my $version = $package-&gt;get_version();
++ my $summary = $package-&gt;get_summary();
++ my $packager = $package-&gt;get_packager();
++ $packager =~ s/.*&lt;(.*)&gt;/$1/;
++
++ if ($self-&gt;{_bugzilla}-&gt;has_package($name)) {
++ my %versions =
++ map { $_ =&gt; 1 }
++ $self-&gt;{_bugzilla}-&gt;get_versions($name);
++ unless ($versions{$version}) {
++ print &quot;adding version $version to bugzilla\n&quot; if $self-&gt;{_verbose};
++ $self-&gt;{_bugzilla}-&gt;add_version($name, $version)
++ unless $self-&gt;{_test};
++ }
++ } else {
++ print &quot;adding package $name to bugzilla\n&quot; if $self-&gt;{_verbose};
++ $self-&gt;{_bugzilla}-&gt;add_package(
++ $name,
++ $summary,
++ $version,
++ $packager,
++ $self-&gt;{_contact}
++ ) unless $self-&gt;{_test};
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/CVS.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/CVS.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/CVS.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,135 @@
++# $Id: CVS.pm 224115 2007-07-02 09:17:15Z pixel $
++package Youri::Submit::Action::CVS;
++
++=head1 NAME
++
++Youri::Submit::Action::CVS - CVS versionning
++
++=head1 DESCRIPTION
++
++This action plugin ensures CVS versionning of package sources.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Cwd;
++use File::Temp qw/tempdir/;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ exclude =&gt; '\.(tar(\.(gz|bz2))?|zip)$',
++ perms =&gt; 644,
++ @_
++ );
++
++ $self-&gt;{_exclude} = $options{exclude};
++ $self-&gt;{_perms} = $options{perms};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return unless $package-&gt;is_source();
++
++ my $name = $package-&gt;get_name();
++ my $version = $package-&gt;get_version();
++ my $release = $package-&gt;get_release();
++
++ my $root = $repository-&gt;get_version_root();
++ my $path = $repository-&gt;get_version_path($package, $target, $define);
++
++ # remember original directory
++ my $original_dir = cwd();
++
++ # get a safe temporary directory
++ my $dir = tempdir( CLEANUP =&gt; 1 );
++ chdir $dir;
++
++ # first checkout base directory only
++ system(&quot;cvs -Q -d $root co -l $path&quot;);
++
++ # try to checkout package directory
++ my $dest = $path . '/' . $name;
++ system(&quot;cvs -Q -d $root co $dest&quot;);
++
++ # create directory if previous import failed
++ unless (-d $dest) {
++ print &quot;adding directory $dest\n&quot; if $self-&gt;{_verbose};
++ system(&quot;install -d -m &quot; . ($self-&gt;{_perms} + 111) . &quot; $dest&quot;);
++ system(&quot;cvs -Q -d $root add $dest&quot;);
++ }
++
++ chdir $dest;
++
++ # remove all files
++ unlink grep { -f } glob '*';
++
++ # extract all rpm files locally
++ $package-&gt;extract();
++
++ # remove excluded files
++ if ($self-&gt;{_exclude}) {
++ unlink grep { -f &amp;&amp; /$self-&gt;{_exclude}/ } glob '*';
++ }
++
++ # uncompress all compressed files
++ system(&quot;bunzip2 *.bz2 2&gt;/dev/null&quot;);
++ system(&quot;gunzip *.gz 2&gt;/dev/null&quot;);
++
++ my (@to_remove, @to_add, @to_add_binary);
++ foreach my $line (`cvs -nq update`) {
++ if ($line =~ /^\? (\S+)/) {
++ if (-B $1) {
++ push(@to_add_binary, $1);
++ } else {
++ push(@to_add, $1);
++ }
++ }
++ if ($line =~ /^U (\S+)/) {
++ push(@to_remove, $1);
++ }
++ }
++ if (@to_remove) {
++ my $to_remove = join(' ', @to_remove);
++ print &quot;removing file(s) $to_remove\n&quot; if $self-&gt;{_verbose};
++ system(&quot;cvs -Q remove $to_remove&quot;);
++ }
++ if (@to_add) {
++ my $to_add = join(' ', @to_add);
++ print &quot;adding text file(s) $to_add\n&quot; if $self-&gt;{_verbose};
++ system(&quot;cvs -Q add $to_add&quot;);
++ }
++ if (@to_add_binary) {
++ my $to_add_binary = join(' ', @to_add_binary);
++ print &quot;adding binary file(s) $to_add_binary\n&quot; if $self-&gt;{_verbose};
++ system(&quot;cvs -Q add -kb $to_add_binary&quot;);
++ }
++
++ print &quot;committing current directory\n&quot; if $self-&gt;{_verbose};
++ system(&quot;cvs -Q commit -m $version-$release&quot;) unless $self-&gt;{_test};
++
++ # tag new release
++ my $tag = &quot;r$version-$release&quot;;
++ $tag =~ s/\./_/g;
++ print &quot;tagging current directory as $tag\n&quot; if $self-&gt;{_verbose};
++ system(&quot;cvs -Q tag $tag&quot;) unless $self-&gt;{_test};
++
++ # get back to original directory
++ chdir $original_dir;
++
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Clean.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Clean.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Clean.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,40 @@
++# $Id: Clean.pm 4742 2007-01-30 09:49:58Z pixel $
++package Youri::Submit::Action::Clean;
++
++=head1 NAME
++
++Youri::Submit::Action::Clean - Old revisions cleanup
++
++=head1 DESCRIPTION
++
++This action plugin ensures cleanup of old package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ foreach my $replaced_package (
++ $repository-&gt;get_replaced_packages($package, $target, $define)
++ ) {
++ my $file = $replaced_package-&gt;as_file();
++ print &quot;deleting file $file\n&quot; if $self-&gt;{_verbose};
++ unlink $file unless $self-&gt;{_test};
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/DkmsModuleInfo.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/DkmsModuleInfo.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/DkmsModuleInfo.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,111 @@
++# $Id$
++package Youri::Submit::Action::DkmsModuleInfo;
++
++=head1 NAME
++
++Youri::Submit::Action::DkmsModuleInfo - extract and commit info from dkms package.
++
++=head1 DESCRIPTION
++
++This action plugin extract modalias and description from dkms packages and commit them
++on a SVN module.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++use File::Temp qw/tempdir/;
++use File::Basename;
++use SVN::Client;
++
++#- inlineed from MDK::Common::Various
++sub chomp_ { my @l = @_; chomp @l; wantarray() ? @l : $l[0] }
++
++sub _init {
++ my ($self, %options) = @_;
++
++ croak &quot;undefined svn module&quot; unless $options{svn_module};
++
++ foreach my $var ('svn_module') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my ($dkms_name) = $package-&gt;get_canonical_name =~ /^dkms-(.*)$/ or return;
++ my $package_name = $package-&gt;get_name;
++ my ($kver) = $package_name =~ /^$dkms_name-kernel-(.*)$/ or return;
++
++ my @files = map { $_-&gt;[0] } $package-&gt;get_files;
++ my @module_files = grep { m!^(/lib/modules/|/var/lib/dkms-binary/).*\.ko(\.gz)?$! } @files
++ or return;
++
++ print &quot;Submit::Action::DkmsModuleInfo: proceeding with $package_name\n&quot; if $self-&gt;{_verbose};
++
++ my $tempdir = tempdir(CLEANUP =&gt; 1);
++ my $file = $package-&gt;as_file;
++ my $cmd = &quot;rpm2cpio $file | (cd $tempdir ; cpio --quiet -id)&quot;;
++ print &quot;Submit::Action::DkmsModuleInfo: doing $cmd\n&quot; if $self-&gt;{_verbose};
++ if (system($cmd) != 0) {
++ print &quot;Submit::Action::DkmsModuleInfo: failed!\n&quot; if $self-&gt;{_verbose};
++ return;
++ }
++
++ my @fields = qw(description alias);
++
++ my (%modules);
++ foreach my $file (@module_files) {
++ print &quot;Submit::Action::DkmsModuleInfo: extracting $file\n&quot; if $self-&gt;{_verbose};
++ my $module = $file;
++ $module =~ s!.*/!!;
++ $module =~ s!\.ko(\.gz)$!!;
++ $modules{$module}{$_} = [ chomp_(`/sbin/modinfo -F $_ $tempdir$file`) ]
++ foreach @fields;
++ }
++
++ eval {
++ my $svn = SVN::Client-&gt;new();
++ my $dir = $tempdir . '/' . basename($self-&gt;{_svn_module});
++ my $revision = $svn-&gt;checkout($self-&gt;{_svn_module}, $dir, 'HEAD', 0);
++ my $vdir = $dir . '/' . $kver;
++ $svn-&gt;update($vdir, 'HEAD', 0);
++ -d $vdir or $svn-&gt;mkdir($vdir);
++ foreach my $module (keys %modules) {
++ print &quot;Submit::Action::DkmsModuleInfo: adding module $module\n&quot; if $self-&gt;{_verbose};
++ foreach my $field (@fields) {
++ my $file = &quot;$vdir/$module.$field&quot;;
++ $svn-&gt;update($file, 'HEAD', 0);
++ my $exists = -f $file;
++ open(my $fh, &quot;&gt;&quot;, $file);
++ print $fh map { &quot;$_\n&quot; } @{$modules{$module}{$field}};
++ $svn-&gt;add($file, 1) if !$exists;
++ }
++ }
++
++ $svn-&gt;log_msg(sub { $_[0] = \&quot;add dkms info for $dkms_name with kernel $kver&quot; });
++ $svn-&gt;commit($vdir, 0);
++ };
++ if (my $error = $@) {
++ print &quot;Submit::Action::DkmsModuleInfo: commit to svn failed ($error)!\n&quot; if $self-&gt;{_verbose};
++ return;
++ }
++
++ 1;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Install.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Install.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Install.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,74 @@
++# $Id: Install.pm 229772 2007-09-26 11:21:07Z blino $
++package Youri::Submit::Action::Install;
++
++=head1 NAME
++
++Youri::Submit::Action::Install - Package installation
++
++=head1 DESCRIPTION
++
++This action plugin ensures installation of new package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ @_
++ );
++
++ $self-&gt;{_perms} = $options{perms};
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $file = $package-&gt;as_file();
++ my $rpm = $package-&gt;get_file_name();
++ my $dest = $repository-&gt;get_install_dir($package, $target, $define);
++
++ # FIXME remove prefix this should be done by a function
++ $rpm =~ s/^\d{14}\.\w*\.\w+\.\d+_//;
++ $rpm =~ s/^\@\d+://;
++ print &quot;installing file $file to $dest/$rpm\n&quot; if $self-&gt;{_verbose};
++
++ unless ($self-&gt;{_test}) {
++ # create destination dir if needed
++ if (! -d $dest) {
++ my $status =
++ system(&quot;install -d -m &quot; . ($self-&gt;{_perms} + 111) . &quot; $dest&quot;);
++ croak &quot;Unable to create directory $dest: $?&quot; if $status;
++ }
++
++ # install file to new location
++ my $status =
++ system(&quot;install -m $self-&gt;{_perms} $file $dest/$rpm&quot;);
++ croak &quot;Unable to install file $file to $dest/$rpm: $?&quot; if $status;
++
++ my $arch = $package-&gt;get_arch();
++ $repository-&gt;set_arch_changed($target, $arch);
++ $repository-&gt;set_install_dir_changed($dest);
++ }
++ $package-&gt;{_file} = &quot;$dest/$rpm&quot;;
++ print &quot;deleting file $file\n&quot; if $self-&gt;{_verbose};
++ unlink $file unless $self-&gt;{_test};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Link.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Link.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Link.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,80 @@
++# $Id: Link.pm 233641 2008-01-31 16:35:55Z pixel $
++package Youri::Submit::Action::Link;
++
++=head1 NAME
++
++Youri::Submit::Action::Link - Noarch packages linking
++
++=head1 DESCRIPTION
++
++This action plugin ensures linking of noarch packages between arch-specific
++directories.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Cwd;
++use File::Spec;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ symbolic =&gt; 0, # use symbolic linking
++ @_
++ );
++
++ $self-&gt;{_symbolic} = $options{symbolic};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # only needed for noarch packages
++ return unless $package-&gt;get_arch() eq 'noarch';
++
++ my $default_dir = $repository-&gt;get_install_dir($package, $target, $define);
++ my $file = $package-&gt;get_file_name();
++
++ # FIXME remove prefix this should be done by a function
++ $file =~ s/^\d{14}\.\w*\.\w+\.\d+_//;
++ $file =~ s/^\@\d+://;
++
++ foreach my $arch ($repository-&gt;get_extra_arches()) {
++ # compute installation target, forcing arch
++ my $other_dir = $repository-&gt;get_install_dir(
++ $package,
++ $target,
++ $define,
++ { arch =&gt; $arch }
++ );
++
++ if (! $self-&gt;{_test}) {
++ my $current_dir = cwd();
++ chdir $other_dir;
++ my $default_file = File::Spec-&gt;abs2rel($default_dir) . '/' . $file;
++ if ($self-&gt;{_symbolic}) {
++ symlink $default_file, $file;
++ } else {
++ link $default_file, $file;
++ }
++ chdir $current_dir;
++ print &quot;set_install_dir_changed($other_dir) for updated $file\n&quot;;
++ $repository-&gt;set_install_dir_changed($other_dir);
++ $repository-&gt;set_arch_changed($target, $arch);
++ }
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Mail.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Mail.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Mail.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,131 @@
++# $Id: Mail.pm 223952 2007-06-23 13:54:13Z pixel $
++package Youri::Submit::Action::Mail;
++
++=head1 NAME
++
++Youri::Submit::Action::Mail - Mail notification
++
++=head1 DESCRIPTION
++
++This action plugin ensures mail notification of new package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use MIME::Entity;
++use Encode qw/from_to/;
++use Carp;
++use Youri::Package;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ mta =&gt; '/usr/sbin/sendmail',
++ to =&gt; '',
++ from =&gt; '',
++ cc =&gt; '',
++ prefix =&gt; '',
++ encoding =&gt; 'quoted-printable',
++ charset =&gt; 'iso-8859-1',
++ @_
++ );
++
++ croak &quot;undefined mail MTA&quot; unless $options{mta};
++ croak &quot;invalid mail MTA $options{mta}&quot; unless -x $options{mta};
++ croak &quot;undefined to&quot; unless $options{to};
++ if ($options{cc}) {
++ croak &quot;cc should be an hashref&quot; unless ref $options{cc} eq 'HASH';
++ }
++ croak &quot;invalid charset $options{charset}&quot;
++ unless Encode::resolve_alias($options{charset});
++
++ $self-&gt;{_mta} = $options{mta};
++ $self-&gt;{_to} = $options{to};
++ $self-&gt;{_from} = $options{from};
++ $self-&gt;{_cc} = $options{cc};
++ $self-&gt;{_prefix} = $options{prefix};
++ $self-&gt;{_encoding} = $options{encoding};
++ $self-&gt;{_charset} = $options{charset};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return unless $package-&gt;is_source();
++
++ my $from = $package-&gt;get_packager();
++
++ # force from adress if defined
++ $from =~ s/&lt;.*&gt;/&lt;$self-&gt;{_from}&gt;/ if $self-&gt;{_from};
++
++ my $subject = $self-&gt;get_subject($package, $repository, $target, $define);
++ my $content = $self-&gt;get_content($package, $repository, $target, $define);
++
++ # ensure proper codeset conversion
++ # for informations coming from package
++ my $charset = $repository-&gt;get_package_charset();
++ from_to($content, $charset, $self-&gt;{_charset});
++ from_to($subject, $charset, $self-&gt;{_charset});
++
++ my $mail = MIME::Entity-&gt;build(
++ Type =&gt; 'text/plain',
++ Charset =&gt; $self-&gt;{_charset},
++ Encoding =&gt; $self-&gt;{_encoding},
++ From =&gt; $from,
++ To =&gt; $self-&gt;{_to},
++ Subject =&gt; $subject,
++ Data =&gt; $content,
++ );
++
++ if ($self-&gt;{_cc}) {
++ my $cc = $self-&gt;{_cc}-&gt;{$package-&gt;get_name()};
++ $mail-&gt;head()-&gt;add('cc', $cc) if $cc;
++ }
++
++ if ($self-&gt;{_test}) {
++ $mail-&gt;print(\*STDOUT);
++ } else {
++ open(MAIL, &quot;| $self-&gt;{_mta} -t -oi -oem&quot;) or die &quot;Can't open MTA program: $!&quot;;
++ $mail-&gt;print(\*MAIL);
++ close MAIL;
++ }
++
++}
++
++sub get_subject {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ return
++ ($self-&gt;{_prefix} ? '[' . $self-&gt;{_prefix} . '] ' : '' ) .
++ &quot;$target &quot; . ($section ? &quot;$section &quot; : '' ) .
++ $package-&gt;as_formated_string('%{name}-%{version}-%{release}');
++}
++
++sub get_content {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $information = $package-&gt;get_information();
++ my $last_change = $package-&gt;get_last_change();
++
++ return
++ $information . &quot;\n&quot; .
++ $last_change-&gt;[Youri::Package::CHANGE_AUTHOR] . &quot;:\n&quot; .
++ $last_change-&gt;[Youri::Package::CHANGE_TEXT];
++}
++
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Markrelease.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Markrelease.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Markrelease.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,56 @@
++# $Id: Markrelease.pm 4743 2007-01-30 09:58:30Z pixel $
++package Youri::Submit::Action::Markrelease;
++
++=head1 NAME
++
++Youri::Submit::Action::Markrelease - calls markrelease
++
++=head1 DESCRIPTION
++
++This action plugin calls markrelease
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ @_
++ );
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ $package-&gt;is_source or return 1;
++ my $file = $package-&gt;get_file();
++ my $srpm_name = $package-&gt;get_canonical_name;
++
++ if ($repository-&gt;package_in_svn($srpm_name)) {
++ my $svn = $repository-&gt;get_svn_url();
++ my ($rev) = $file =~ /.*\/.*?\@(\d+):/;
++ print &quot;Run repsys markrelease -f $file -r $rev $svn/$srpm_name\n&quot;;
++ # FIXME repsys ask for a username and password
++ # FIXME we should use the key in /var/home/mandrake so that /home/mandrake does not
++ # need to be mounted
++ system('repsys', 'markrelease', '-f', $file, '-r', $rev, &quot;$svn/$srpm_name&quot;);
++ }
++ 1
++}
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/RSS.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/RSS.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/RSS.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,102 @@
++# $Id: RSS.pm 1700 2006-10-16 12:57:42Z warly $
++package Youri::Submit::Action::RSS;
++
++=head1 NAME
++
++Youri::Submit::Action::RSS - RSS notification
++
++=head1 DESCRIPTION
++
++This action plugin ensures RSS notification of new package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use XML::RSS;
++use Encode qw/from_to/;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ file =&gt; '',
++ title =&gt; '',
++ link =&gt; '',
++ description =&gt; '',
++ charset =&gt; 'iso-8859-1',
++ max_items =&gt; 10,
++ @_
++ );
++
++ croak &quot;undefined rss file&quot; unless $options{file};
++ croak &quot;invalid charset $options{charset}&quot;
++ unless Encode::resolve_alias($options{charset});
++
++ $self-&gt;{_file} = $options{file};
++ $self-&gt;{_title} = $options{title};
++ $self-&gt;{_link} = $options{link};
++ $self-&gt;{_description} = $options{description};
++ $self-&gt;{_charset} = $options{charset};
++ $self-&gt;{_max_items} = $options{max_items};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return unless $package-&gt;is_source();
++
++ my $subject = $package-&gt;as_formated_string('%{name}-%{version}-%{release}');
++ my $content = $package-&gt;get_information();
++
++ $content =~ s/$/&lt;br\/&gt;/mg;
++
++ # ensure proper codeset conversion
++ # for informations coming from package
++ my $charset = $repository-&gt;get_package_charset();
++ from_to($content, $charset, $self-&gt;{_charset});
++ from_to($subject, $charset, $self-&gt;{_charset});
++
++ my $rss = XML::RSS-&gt;new(
++ encoding =&gt; $self-&gt;{_charset},
++ encode_output =&gt; 1
++ );
++
++ my $file = $self-&gt;{_file};
++ if (-e $file) {
++ $rss-&gt;parsefile($file);
++ splice(@{$rss-&gt;{items}}, $self-&gt;{_max_items})
++ if @{$rss-&gt;{items}} &gt;= $self-&gt;{_max_items};
++ } else {
++ $rss-&gt;channel(
++ title =&gt; $self-&gt;{_title},
++ link =&gt; $self-&gt;{_link},
++ description =&gt; $self-&gt;{_description},
++ language =&gt; 'en'
++ );
++ }
++
++ $rss-&gt;add_item(
++ title =&gt; $subject,
++ description =&gt; $content,
++ mode =&gt; 'insert'
++ );
++
++ if ($self-&gt;{_test}) {
++ print $rss-&gt;as_string();
++ } else {
++ $rss-&gt;save($file);
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Rpminfo.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Rpminfo.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Rpminfo.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,69 @@
++# $Id: Rpminfo.pm 4742 2007-01-30 09:49:58Z pixel $
++package Youri::Submit::Action::Rpminfo;
++
++=head1 NAME
++
++Youri::Submit::Action::RpmInfo - Creates .info files
++
++=head1 DESCRIPTION
++
++This action plugin ensures the creation of .info files
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use File::Basename;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ uphost =&gt; '',
++ user =&gt; '',
++ ssh_key =&gt; '',
++ verbose =&gt; '',
++ @_
++ );
++ croak &quot;undefined upload host&quot; unless $options{uphost};
++ croak &quot;undefined ssh key&quot; unless $options{ssh_key};
++
++ foreach my $var ('perms', 'user', 'uphost', 'ssh_key', 'verbose') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $file = $package-&gt;get_file();
++ my $dest = $repository-&gt;get_upload_dir($package, $target, $define);
++
++ print &quot;Caching rpm information $file on $dest\n&quot; if $self-&gt;{_verbose};
++ my $base = basename ($file);
++ $dest =~ s/\/[0-9]{14}\./\/*./;
++
++ my $cmd = &quot;ssh -i $self-&gt;{_ssh_key} $self-&gt;{_user}\@$self-&gt;{_uphost} \&quot;srpm=`echo /$dest$base`; rpm -q --qf '\%{name}\n\%{epoch}\n\%{version}-\%{release}\n\%{summary}\n' -p \\\$srpm &gt; \\\$srpm.info\&quot;&quot;;
++ print &quot;Submit::Action::RpmInfo: doing $cmd\n&quot; if $self-&gt;{_verbose};
++ if (!$self-&gt;{_test}) {
++ if (!system($cmd)) {
++ print &quot;Submit::Action::RpmInfo: rpminfo succeeded!\n&quot;;
++ return 1
++ }
++ print &quot;Submit::Action::RpmInfo: rpminfo failed!\n&quot;;
++ }
++}
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Send.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Send.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Send.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,77 @@
++# $Id: Send.pm 4744 2007-01-30 09:59:07Z pixel $
++package Youri::Submit::Action::Send;
++
++=head1 NAME
++
++Youri::Submit::Action::Send - upload package
++
++=head1 DESCRIPTION
++
++This action plugin uploads the package on uphost
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use File::Basename;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ uphost =&gt; '',
++ user =&gt; '',
++ ssh_key =&gt; '',
++ verbose =&gt; '',
++ keep_svn_release =&gt; '',
++ @_
++ );
++ croak &quot;undefined upload host&quot; unless $options{uphost};
++ croak &quot;undefined ssh key&quot; unless $options{ssh_key};
++
++ foreach my $var ('perms', 'user', 'uphost', 'ssh_key', 'verbose', 'keep_svn_release') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $file = $package-&gt;get_file();
++ my $dest = $repository-&gt;get_upload_dir($package, $target, $define);
++
++ print &quot;Sending file $file to $dest\n&quot; if $self-&gt;{_verbose};
++ my $base;
++ if ($self-&gt;{_keep_svn_release}) {
++ $base = basename($file)
++ } else {
++ ($base) = $file =~ /.*\/(?:@\d+:)?([^\/]*)/
++ }
++
++ my $cmd = &quot;scp -i $self-&gt;{_ssh_key} $file $self-&gt;{_user}\@$self-&gt;{_uphost}:/$dest$base.new&quot;;
++ my $cmd2 = &quot;ssh -i $self-&gt;{_ssh_key} $self-&gt;{_user}\@$self-&gt;{_uphost} \&quot;mv /$dest$base.new /$dest$base\&quot;&quot;;
++ print &quot;Submit::Action::Send: doing $cmd\n$cmd2\n&quot; if 1 || $self-&gt;{_verbose};
++ if (!$self-&gt;{_test}) {
++ if (!system($cmd)) {
++ if (!system($cmd2)) {
++ print &quot;Submit::Action::Send: upload succeeded!\n&quot;;
++ return 1
++ }
++ }
++ print &quot;Submit::Action::Send: upload failed!\n&quot;;
++ }
++}
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sendcache.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sendcache.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sendcache.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,81 @@
++# $Id: Sendcache.pm 232350 2007-12-07 18:26:17Z spuk $
++package Youri::Submit::Action::Sendcache;
++
++=head1 NAME
++
++Youri::Submit::Action::Sendcache - upload package to cache
++
++=head1 DESCRIPTION
++
++This action plugin uploads the package on uphost
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use File::Basename;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ uphost =&gt; '',
++ user =&gt; '',
++ ssh_key =&gt; '',
++ verbose =&gt; '',
++ root =&gt; '',
++ debug_pkgs =&gt; 0,
++ @_
++ );
++ croak &quot;undefined upload host&quot; unless $options{uphost};
++ croak &quot;undefined ssh key&quot; unless $options{ssh_key};
++
++ foreach my $var ('perms', 'user', 'uphost', 'ssh_key', 'verbose', 'root', 'debug_pkgs') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # only cache debug packages if option debug_pkgs is true
++ return if ($package-&gt;is_debug() &amp;&amp; !$self-&gt;{_debug_pkgs});
++
++ my $file = $package-&gt;get_file();
++ my $dest = $repository-&gt;get_upload_dir($package, $target, $define);
++ $dest =~ s!$repository-&gt;{_upload_root}/$repository-&gt;{_queue}!$self-&gt;{_root}!;
++
++ print &quot;Sending file $file to $dest\n&quot; if $self-&gt;{_verbose};
++ my $destfile = &quot;$dest&quot;.basename($file);
++ $destfile =~ s,/[^/_]+_([^/]+)$,/$1,;
++ $destfile =~ s,/@\d+:,/,;
++ my $destfilehidden = $destfile;
++ $destfilehidden =~ s,/([^/]+)$,/.$1,;
++
++ my $cmd = &quot;scp -i $self-&gt;{_ssh_key} $file $self-&gt;{_user}\@$self-&gt;{_uphost}:/$destfilehidden&quot;;
++ my $cmd2 = &quot;ssh -i $self-&gt;{_ssh_key} $self-&gt;{_user}\@$self-&gt;{_uphost} \&quot;mv /$destfilehidden /$destfile\&quot;&quot;;
++ print &quot;Submit::Action::Send: doing $cmd\n$cmd2\n&quot; if 1 || $self-&gt;{_verbose};
++ if (!$self-&gt;{_test}) {
++ if (!system($cmd)) {
++ if (!system($cmd2)) {
++ print &quot;Submit::Action::Sendcache: upload succeeded!\n&quot;;
++ return 1
++ }
++ }
++ print &quot;Submit::Action::Sendcache: upload failed!\n&quot;;
++ }
++}
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sign.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sign.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Sign.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,56 @@
++# $Id: Sign.pm 1700 2006-10-16 12:57:42Z warly $
++package Youri::Submit::Action::Sign;
++
++=head1 NAME
++
++Youri::Submit::Action::Sign - GPG signature
++
++=head1 DESCRIPTION
++
++This action plugin ensures GPG signature of packages.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ name =&gt; '',
++ path =&gt; $ENV{HOME} . '/.gnupg',
++ passphrase =&gt; '',
++ @_
++ );
++
++ croak &quot;undefined name&quot; unless $options{name};
++ croak &quot;undefined path&quot; unless $options{path};
++ croak &quot;invalid path $options{path}&quot; unless -d $options{path};
++
++ $self-&gt;{_name} = $options{name};
++ $self-&gt;{_path} = $options{path};
++ $self-&gt;{_passphrase} = $options{passphrase};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ $package-&gt;sign(
++ $self-&gt;{_name},
++ $self-&gt;{_path},
++ $self-&gt;{_passphrase}
++ ) unless $self-&gt;{_test};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Unpack.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Unpack.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/Unpack.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,82 @@
++# $Id: Unpack.pm 115370 2007-01-30 09:59:07Z pixel $
++package Youri::Submit::Action::Unpack;
++
++=head1 NAME
++
++Youri::Submit::Action::Unpack - unpack package files
++
++=head1 DESCRIPTION
++
++This action plugin unpack package files somewhere.
++When unpack_inside_distribution_root is set, dest_directory is relative to the distribution root.
++When the package is a noarch, the wanted files are unpacked in distribution root of each archs.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use File::Temp qw/tempdir/;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my ($self, %options) = @_;
++
++ croak &quot;undefined package name&quot; unless $options{name};
++ croak &quot;undefined source sub directory&quot; unless $options{source_subdir};
++ croak &quot;undefined destination directory&quot; unless $options{dest_directory};
++
++ foreach my $var ('name', 'dest_directory', 'source_subdir', 'grep_files', 'unpack_inside_distribution_root') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ $package-&gt;get_name eq $self-&gt;{_name} or return;
++
++ my @dests = $self-&gt;{_unpack_inside_distribution_root} ?
++ (map { &quot;$_/$self-&gt;{_dest_directory}&quot; } $repository-&gt;get_distribution_roots($package, $target))
++ : $self-&gt;{_dest_directory};
++ my $file = $package-&gt;as_file;
++ print &quot;Unpacking rpm $file$self-&gt;{_source_subdir} to @dests\n&quot; if $self-&gt;{_verbose};
++
++ my $tempdir = tempdir(CLEANUP =&gt; 1);
++
++ my $cmd = &quot;rpm2cpio $file | (cd $tempdir ; cpio -id)&quot;;
++ print &quot;Submit::Action::Unpack: doing $cmd\n&quot; if $self-&gt;{_verbose};
++ if (!$self-&gt;{_test} &amp;&amp; system($cmd) != 0) {
++ print &quot;Submit::Action::Unpack: failed!\n&quot; if $self-&gt;{_verbose};
++ return;
++ }
++
++ foreach my $dest (@dests) {
++ my $find_grep = $self-&gt;{_grep_files} ? &quot;find | grep '$self-&gt;{_grep_files}'&quot; : 'find';
++ my $cmd = &quot;cd $tempdir/$self-&gt;{_source_subdir}; $find_grep | cpio -pdu $dest&quot;;
++ print &quot;Submit::Action::Unpack: doing $cmd\n&quot; if $self-&gt;{_verbose};
++ if (!$self-&gt;{_test}) {
++ my @l = glob(&quot;$tempdir/$self-&gt;{_source_subdir}&quot;);
++ if (@l == 1 &amp;&amp; -d $l[0]) {
++ if (system($cmd) != 0) {
++ print &quot;Submit::Action::Unpack: failed!\n&quot; if $self-&gt;{_verbose};
++ }
++ } else {
++ print &quot;Submit::Action::Unpack: directory $self-&gt;{_source_subdir} doesn't exist in package $self-&gt;{_name}\n&quot;;
++ }
++ }
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/UpdateMdvDb.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/UpdateMdvDb.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action/UpdateMdvDb.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,62 @@
++# $Id$
++package Youri::Submit::Action::UpdateMdvDb;
++
++=head1 NAME
++
++Youri::Submit::Action::UpdateMdvDb - Mandriva maintainers database updater
++
++=head1 DESCRIPTION
++
++This action plugin calls an external script to update last commit info, as
++well as add new packages, in the package maintainers database at
++&lt;<A HREF="http://maint.mandriva.com/">http://maint.mandriva.com/</A>&gt;.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Action/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ @_
++ );
++
++ # path for mdvdb-updaterep script
++ $self-&gt;{_mdvdb_updaterep} = $options{mdvdb_updaterep};
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # only SRPMs matter
++ return unless $package-&gt;is_source();
++
++ unless ($self-&gt;{_test}) {
++ my $pkg_name = $package-&gt;get_name();
++ my $pkg_media = $repository-&gt;_get_main_section($package, $target, $define);
++ $package-&gt;get_packager() =~ m/(\w[-_.\w]+\@[-_.\w]+)\W/;
++ my $pkg_commiter = $1;
++
++ if (system($self-&gt;{_mdvdb_updaterep}, &quot;update&quot;, $pkg_name, $pkg_media, $pkg_commiter, &quot;youri&quot;)) {
++ print &quot;ERROR: &quot;.$self-&gt;{_mdvdb_updaterep}.&quot; failed for '$pkg_name', '$pkg_media', '$pkg_commiter'.\n&quot;;
++ } else {
++ print &quot;Updated package maintainers DB for '$pkg_name', '$pkg_media', '$pkg_commiter'.\n&quot; if $self-&gt;{_verbose};
++ }
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2007, Mandriva
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Action.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,27 @@
++# $Id: Base.pm 631 2006-01-26 22:22:23Z guillomovitch $
++package Youri::Submit::Action;
++
++=head1 NAME
++
++Youri::Submit::Action - Abstract action plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines action plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Plugin/;
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/ACL.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/ACL.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/ACL.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,71 @@
++# $Id: ACL.pm 4817 2007-02-09 19:39:05Z blino $
++package Youri::Submit::Check::ACL;
++
++=head1 NAME
++
++Youri::Submit::Check::Tag - Incorrect tag values check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages with incorrect tag values, based on regular
++expressions.
++
++=cut
++
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++my $acl;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ acl_file =&gt; '',
++ @_
++ );
++ $acl = get_acl($options{acl_file});
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $file = $package-&gt;get_full_name();
++ my $arch = $package-&gt;get_arch();
++ my $srpm = $package-&gt;get_canonical_name;
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ my $user = $define-&gt;{user};
++ foreach my $t (keys %$acl) {
++ next if $target !~ /$t/;
++ foreach my $acl (@{$acl-&gt;{$t}}) {
++ my ($a, $media, $r, $users) = @$acl;
++ next if $arch !~ $a || $srpm !~ $r || $section !~ $media;
++ if ($user =~ /$users/) {
++ return
++ } else {
++ return &quot;$user is not authorized to upload packages belonging to $srpm in section $section (authorized persons: &quot; . join(', ', split '\|', $users) . &quot;)&quot;;
++ }
++ }
++ }
++ return
++}
++
++sub get_acl {
++ my ($file) = @_;
++ my %acl;
++ open my $f, $file;
++ while (&lt;$f&gt;) {
++ my ($dis, $arch, $media, $regexp, $users) = split ' ';
++ push @{$acl{$dis}}, [ $arch , $media, $regexp, $users ]
++ }
++ \%acl
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/History.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/History.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/History.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,61 @@
++# $Id: History.pm 1707 2006-10-16 16:26:42Z warly $
++package Youri::Submit::Check::History;
++
++=head1 NAME
++
++Youri::Submit::Check::History - Non-linear history check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages whose history does not include last
++available revision one.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Package;
++use base qw/Youri::Submit::Check/;
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ my $last_revision =
++ $repository-&gt;get_last_older_revision($package, $target, $define);
++
++ if ($last_revision) {
++ # skip the test if last revision has been produced from another source package, as it occurs during package split/merges
++ return
++ if $last_revision-&gt;get_canonical_name()
++ ne $package-&gt;get_canonical_name();
++
++ my ($last_revision_number) = $last_revision-&gt;get_last_change()-&gt;[Youri::Package::CHANGE_AUTHOR] =~ /(\S+)\s*$/;
++ my %entries =
++ map { $_ =&gt; 1 }
++ map { /(\S+)\s*$/ }
++ map { $_-&gt;[Youri::Package::CHANGE_AUTHOR] }
++ $package-&gt;get_changes();
++ unless ($entries{$last_revision_number}) {
++ push(
++ @errors,
++ &quot;Last changelog entry $last_revision_number from last revision &quot; . $last_revision-&gt;get_full_name() . &quot; missing from current changelog&quot;
++ );
++ }
++ }
++
++ return @errors;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Host.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Host.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Host.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,63 @@
++# $Id: Host.pm 230850 2007-10-04 20:07:25Z blino $
++package Youri::Submit::Check::Host;
++
++=head1 NAME
++
++Youri::Submit::Check::Tag - Incorrect tag values check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages with incorrect tag values, based on regular
++expressions.
++
++=cut
++
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++my $host;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ host_file =&gt; '',
++ @_
++ );
++ $host = get_host($options{host_file})
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $file = $package-&gt;get_file;
++ my $arch = $package-&gt;get_arch;
++ my $buildhost = $package-&gt;as_formated_string('%{buildhost}');
++ foreach my $h (keys %$host) {
++ next if $buildhost !~ $h;
++ if ($arch =~ $host-&gt;{$h}) {
++ return
++ }
++ }
++ &quot;Packages build on host $buildhost are not authorized for arch $arch&quot;;
++}
++
++sub get_host {
++ my ($file) = @_;
++ my %host;
++ open my $f, $file;
++ while (&lt;$f&gt;) {
++ my ($host, $arch) = split ' ';
++ $host{$host} = $arch
++ }
++ \%host
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Precedence.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Precedence.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Precedence.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,58 @@
++# $Id: Precedence.pm 1707 2006-10-16 16:26:42Z warly $
++package Youri::Submit::Check::Precedence;
++
++=head1 NAME
++
++Youri::Submit::Check::Precedence - Release check against another check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages whose an older revision already exists for
++another upload target.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ _target =&gt; undef, # mandatory targets
++ @_
++ );
++
++ die &quot;undefined target&quot; unless $options{target};
++
++ $self-&gt;{_target} = $options{target};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ my @older_revisions =
++ $repository-&gt;get_older_revisions($package, $self-&gt;{_target}, $define);
++ if (@older_revisions) {
++ push(
++ @errors,
++ &quot;Older revisions still exists for $self-&gt;{_target}: &quot; . join(', ', @older_revisions)
++ );
++ }
++
++ return @errors;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Queue_recency.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Queue_recency.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Queue_recency.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,40 @@
++# $Id: Queue_recency.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Check::Queue_recency;
++
++=head1 NAME
++
++Youri::Submit::Check::Recency - Release check against current target
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages whose a current or newer revision already
++exists for current upload target.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @newer_revisions =
++ $repository-&gt;get_upload_newer_revisions($package, $target, $define);
++ if (@newer_revisions) {
++ return &quot;Newer revisions already exists for $target in upload queue: &quot; . join(', ', @newer_revisions);
++ }
++ return
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Recency.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Recency.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Recency.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,64 @@
++# $Id: Recency.pm 224793 2007-07-08 02:44:48Z spuk $
++package Youri::Submit::Check::Recency;
++
++=head1 NAME
++
++Youri::Submit::Check::Recency - Release check against current target
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages whose a current or newer revision already
++exists for current upload target.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ my @revisions = $repository-&gt;get_revisions($package, $target, $define, undef, sub { return $_[0]-&gt;compare($package) &gt;= 0 });
++ if (@revisions) {
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ push(
++ @errors,
++ &quot;Current or newer revision(s) already exists in $section for $target: &quot; .
++ join(', ', @revisions)
++ );
++ }
++
++ my $defined_section = $define-&gt;{section};
++
++ # if the user provided a section, check also in the default section
++ if ($defined_section) {
++ $define-&gt;{section} = undef;
++ my @default_revisions = $repository-&gt;get_revisions($package, $target, $define, undef, sub { return $_[0]-&gt;compare($package) &gt;= 0 });
++ if (@default_revisions) {
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ push(
++ @errors,
++ &quot;Current or newer revision(s) already exists in $section for $target: &quot; .
++ join(', ', @default_revisions)
++ );
++ }
++ $define-&gt;{section} = $defined_section;
++ }
++
++ return @errors;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Rpmlint.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Rpmlint.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Rpmlint.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,90 @@
++# $Id: Rpmlint.pm 234384 2008-02-12 09:42:32Z blino $
++package Youri::Submit::Check::Rpmlint;
++
++=head1 NAME
++
++Youri::Submit::Check::Rpmlint - Rpmlint-based check
++
++=head1 DESCRIPTION
++
++This check plugin wraps rpmlint, and reject packages triggering results
++declared as fatal.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Submit::Check::Rpmlint object.
++
++Specific parameters:
++
++=over
++
++=item results $results
++
++List of rpmlint result id considered as fatal.
++
++=item path $path
++
++Path to the rpmlint executable (default: /usr/bin/rpmlint)
++
++=item config $config
++
++Specific rpmlint configuration.
++
++=back
++
++=cut
++
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ results =&gt; undef,
++ path =&gt; '/usr/bin/rpmlint',
++ config =&gt; '',
++ @_
++ );
++
++ croak &quot;no results to check&quot; unless $options{results};
++ croak &quot;fatal should be an arrayref&quot; unless ref $options{results} eq 'ARRAY';
++
++ $self-&gt;{_config} = $options{config};
++ $self-&gt;{_path} = $options{path};
++ $self-&gt;{_pattern} = '^(?:' . join('|', @{$options{results}}) . ')$';
++}
++
++sub run {
++ my ($self, $package, $_repository, $_target, $_define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ my $command = &quot;$self-&gt;{_path} -f $self-&gt;{_config} &quot; . $package-&gt;as_file;
++ open(my $RPMLINT, &quot;$command |&quot;) or die &quot;Can't run $command: $!&quot;;
++ while (my $line = &lt;$RPMLINT&gt;) {
++ $line =~ /^[EW]: \S+ (\S+)(.*)$/ # old rpmlint format
++ || $line =~ /^\S+: [EW]: (\S+)(.*)$/ or next; # new rpmlint format
++ my ($id, $value) = ($1, $2);
++ if ($id =~ /$self-&gt;{_pattern}/o) {
++ push(@errors, &quot;$id$value&quot;);
++ }
++ }
++
++ return @errors;
++}
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under
++the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/SVN.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/SVN.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/SVN.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,79 @@
++# $Id: SVN.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Check::SVN;
++
++=head1 NAME
++
++Youri::Submit::Check::Tag - Incorrect tag values check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages with incorrect tag values, based on regular
++expressions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ svn =&gt; '',
++ @_
++ );
++ $self-&gt;{_svn} = $options{svn};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ if ($section =~ /\/(testing|backport)$/) {
++ # FIXME, right now ignore packages in SVN for testing and backports
++ # we need to find a clean way to handle them
++ return
++ }
++
++ $package-&gt;is_source or return;
++ my $file = $package-&gt;get_file_name;
++ my $srpm_name = $package-&gt;get_canonical_name;
++ if ($repository-&gt;package_in_svn($srpm_name)) {
++ if ($file !~ /(^|\/|$define-&gt;{prefix}_)@\d+:\Q$srpm_name/) {
++ return &quot;package $srpm_name is in the SVN, the uploaded SRPM must look like @&lt;svn rev&gt;:$srpm_name-&lt;version&gt;-&lt;release&gt;.src.rpm (created with getsrpm-mdk $srpm_name)&quot;;
++ } else {
++ print &quot;Package $file is correct\n&quot;;
++ }
++ }
++ return
++}
++
++sub simple_prompt {
++ my $cred = shift;
++ my $realm = shift;
++ my $default_username = shift;
++ my $may_save = shift;
++ my $pool = shift;
++
++ print &quot;Enter authentication info for realm: $realm\n&quot;;
++ print &quot;Username: &quot;;
++ my $username = &lt;&gt;;
++ chomp($username);
++ $cred-&gt;username($username);
++ print &quot;Password: &quot;;
++ my $password = &lt;&gt;;
++ chomp($password);
++ $cred-&gt;password($password);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Section.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Section.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Section.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,58 @@
++# $Id: Precedence.pm 1707 2006-10-16 16:26:42Z warly $
++package Youri::Submit::Check::Section;
++
++=head1 NAME
++
++Youri::Submit::Check::Section - Check if package was submitted to the right section
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages which were submitted to a section
++different than the one where an older version already exists.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ my $submitted_main_section = $repository-&gt;_get_main_section($package, $target, $define);
++
++ # undefine section, so that Repository::_get_section() of Mandriva_upload.pm
++ # finds the section from existing packages
++ my $defined_section = $define-&gt;{section};
++ undef $define-&gt;{section};
++
++ my $old_main_section = $repository-&gt;_get_main_section($package, $target, $define);
++ my @older_revisions = $repository-&gt;get_older_revisions($package, $target, $define);
++
++ # restore defined section
++ $define-&gt;{section} = $defined_section;
++
++ if (@older_revisions &amp;&amp; $submitted_main_section ne $old_main_section) {
++ push(
++ @errors,
++ &quot;Section should be $old_main_section, not $submitted_main_section.&quot;
++ );
++ }
++
++
++ return @errors;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2007, Mandriva
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Source.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Source.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Source.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,45 @@
++# $Id: Source.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Check::Source;
++
++=head1 NAME
++
++Youri::Submit::Check::Tag - Incorrect tag values check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages with incorrect tag values, based on regular
++expressions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ @_
++ );
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $file = $package-&gt;as_file();
++ if (!$package-&gt;is_source()) {
++ return &quot;Package $file is not a source rpm&quot;;
++ }
++ return
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Tag.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Tag.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Tag.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,61 @@
++# $Id: Tag.pm 1707 2006-10-16 16:26:42Z warly $
++package Youri::Submit::Check::Tag;
++
++=head1 NAME
++
++Youri::Submit::Check::Tag - Incorrect tag values check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages with incorrect tag values, based on regular
++expressions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ tags =&gt; undef, # expected tag values
++ @_
++ );
++
++ croak &quot;no tags to check&quot; unless $options{tags};
++ croak &quot;tag should be an hashref&quot; unless ref $options{tags} eq 'HASH';
++
++ $self-&gt;{_tags} = $options{tags};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ foreach my $tag (keys %{$self-&gt;{_tags}}) {
++ my $value = $package-&gt;get_tag($tag);
++ if ($value !~ /$self-&gt;{_tags}-&gt;{$tag}/) {
++ push(
++ @errors,
++ &quot;invalid value $value for tag $tag&quot;
++ );
++ }
++ }
++
++ return @errors;
++
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Type.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Type.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Type.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,54 @@
++# $Id: Type.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Check::Type;
++
++=head1 NAME
++
++Youri::Submit::Check::Type - Type check
++
++=head1 DESCRIPTION
++
++This check plugin rejects packages with incorrect type.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Check/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ type =&gt; undef, # expected type
++ @_
++ );
++
++ croak &quot;no type to check&quot; unless $options{type};
++ croak &quot;invalid type value&quot; unless $options{type} =~ /^(?:source|binary)$/;
++
++ $self-&gt;{_type} = $options{type};
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @errors;
++
++ my $type = $package-&gt;get_type();
++ if ($type ne $self-&gt;{_type}) {
++ push(@errors, &quot;invalid type $type&quot;);
++ }
++
++ return @errors;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Version.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Version.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check/Version.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,102 @@
++# $Id: Version.pm 267050 2010-03-23 17:36:49Z nvigier $
++package Youri::Submit::Check::Version;
++
++=head1 NAME
++
++Youri::Submit::Check::Version - Check if older version already exist in cooker (used in freeze period)
++
++=head1 DESCRIPTION
++
++This check plugin rejects new version of packages if they are not mentioned as authorized
++in the configuration file or in a non frozen section.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use URPM;
++use base qw/Youri::Submit::Check/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ @_
++ );
++
++ foreach my $target (keys %options) {
++ $self-&gt;{$target} = $options{$target}
++ }
++}
++
++sub run {
++ my ($self, $package, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $opt = $self-&gt;{$target};
++ return if $opt-&gt;{mode} eq 'normal';
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++ my $name = $package-&gt;get_canonical_name;
++ return if $name =~ /$opt-&gt;{authorized_packages}/;
++ my $arch = $repository-&gt;get_arch($package, $target, $define);
++ return if $arch =~ /$opt-&gt;{authorized_arches}/;
++ if ($opt-&gt;{mode} eq 'version_freeze') {
++ return if $section =~ /$opt-&gt;{authorized_sections}/;
++ my $user = $define-&gt;{user};
++ return if $user =~ /^($opt-&gt;{authorized_users})$/;
++ my ($package_version) = $package =~ /-([^-]+)-[^-]+\.src$/;
++ $define-&gt;{arch} = 'src';
++ my @revisions = $repository-&gt;get_revisions($package, $target, $define, undef,
++ sub {
++ my ($version) = $_[0] =~ /-([^-]+)-[^-]+\.src$/;
++ URPM::ranges_overlap(&quot;== $version&quot;, &quot;&lt; $package_version&quot;)
++ }
++ );
++ $define-&gt;{arch} = '';
++ if (@revisions) {
++ return &quot;FREEZE, package @revisions of different versions exist in $target\n&quot;;
++ }
++ }
++ # FIXME: The following code is not working and must be reviewed.
++ elsif ($opt-&gt;{mode} eq 'freeze') {
++ my $user = $define-&gt;{user};
++ return if (defined($opt-&gt;{authorized_users}) &amp;&amp; $user =~ /^($opt-&gt;{authorized_users})$/);
++ # XXX: So freeze mode really only check for this exceptions?
++ if ($section !~ /$opt-&gt;{authorized_sections}/) {
++ return &quot;FREEZE: repository $target section $section is frozen, you can still submit your packages in testing\nTo do so use your.devel --define section=&lt;section&gt; $target &lt;package 1&gt; &lt;package 2&gt; ... &lt;package n&gt;&quot;;
++ }
++ } else {
++ # FIXME: Calls to get_source_package seems invalid nowadays.
++ # This results on $source having a null content.
++ my $source = $package-&gt;get_source_package;
++ my ($package_version) = $source =~ /-([^-]+)-[^-]+\.src\.rpm$/;
++ $define-&gt;{arch} = 'src';
++ # FIXME: get_revisions now expects the filter as the 5th element, and not the 4th.
++ my @revisions = $repository-&gt;get_revisions($package, $target, $define,
++ sub {
++ # FIXME: Calls to get_source_package seems invalid nowadays.
++ # This results on $source_package having a null content.
++ my $source_package = $_[0]-&gt;get_source_package;
++ my ($version) = $source_package =~ /-([^-]+)-[^-]+\.src\.rpm$/;
++ print STDERR &quot;Found version $version\n&quot;;
++ URPM::ranges_overlap(&quot;== $version&quot;, &quot;&lt; $package_version&quot;)
++ }
++ );
++ $define-&gt;{arch} = '';
++ if (@revisions) {
++ return &quot;FREEZE, package @revisions of different versions exist in $target\n&quot;;
++ }
++ }
++ return
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2006, YOURI project
++Copyright (C) 2006, Mandriva
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
++
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Check.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,27 @@
++# $Id: Base.pm 631 2006-01-26 22:22:23Z guillomovitch $
++package Youri::Submit::Check;
++
++=head1 NAME
++
++Youri::Submit::Check - Abstract check plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines check plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Plugin/;
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Plugin.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Plugin.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Plugin.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,93 @@
++# $Id: Plugin.pm 4746 2007-01-30 10:01:14Z pixel $
++package Youri::Submit::Plugin;
++
++=head1 NAME
++
++Youri::Submit::Plugin - Abstract youri-submit plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines youri-submit plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Submit::Plugin object.
++
++No generic parameters (subclasses may define additional ones).
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '', # object id
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ @_
++ );
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 get_id()
++
++Returns plugin identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head2 run($package, $repository, $target, $define)
++
++Execute action on given L&lt;Youri::Package&gt; object.
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item run
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/CleanRpmsrate.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/CleanRpmsrate.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/CleanRpmsrate.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,53 @@
++# $Id: CleanRpmsrate.pm 115367 2007-01-30 09:47:04Z pixel $
++package Youri::Submit::Post::CleanRpmsrate;
++
++=head1 NAME
++
++Youri::Submit::Post::CleanRpmsrate - calls clean-rpmsrate
++
++=head1 DESCRIPTION
++
++Calls clean-rpmsrate
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Post/;
++
++#- inlined from MDK::Common::DataStructure
++sub uniq { my %l; $l{$_} = 1 foreach @_; grep { delete $l{$_} } @_ }
++
++sub _init {
++}
++
++sub run {
++ my ($self, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $root = $repository-&gt;get_install_root();
++ my @changed = @{$repository-&gt;get_arch_changed($target)};
++ if (grep { $_ eq 'i586' } @changed) {
++ # x86_64 uses i586 pkgs, so rpmsrate need to be rebuild
++ @changed = uniq(@changed, 'x86_64');
++ }
++ foreach my $arch (@changed) {
++ my $rpmsrate = &quot;$root/$target/$arch/media/media_info/rpmsrate&quot;;
++ my @media = &quot;$root/$target/$arch/media/main/release&quot;;
++ system(&quot;cp&quot;, &quot;$rpmsrate-raw&quot;, &quot;$rpmsrate-new&quot;);
++ system(&quot;clean-rpmsrate&quot;, &quot;$rpmsrate-new&quot;, @media);
++ system(&quot;mv&quot;, &quot;-f&quot;, &quot;$rpmsrate-new&quot;, $rpmsrate);
++ }
++ return
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2007, Mandriva &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">blino at mandriva.com</A>&gt;
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
++
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Gendistrib.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Gendistrib.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Gendistrib.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,66 @@
++# $Id: Gendistrib.pm 115367 2007-01-30 09:47:04Z pixel $
++package Youri::Submit::Post::Gendistrib;
++
++=head1 NAME
++
++Youri::Submit::Post::Gendistrib - calls gendistrib
++
++=head1 DESCRIPTION
++
++Calls gendistrib
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Post/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ user =&gt; '',
++ host =&gt; '',
++ source =&gt; '',
++ destination =&gt; '',
++ @_
++ );
++
++ foreach my $var ('tmpdir', 'command') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++}
++
++sub run {
++ my ($self, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $root = $repository-&gt;get_install_root();
++ (undef, undef, my $hour) = gmtime(time);
++ # during the night, use complete hdlist rebuild
++ my $fast = '--fast';
++ $fast = ''; # blino: don't use fast for now, it might be broken
++ if ($hour &gt; 22 &amp;&amp; $hour &lt; 5) {
++ if ($hour &lt; 4) {
++ $fast = '--blind'
++ } else {
++ $fast = ''
++ }
++ }
++ foreach my $arch (@{$repository-&gt;get_arch_changed($target)}) {
++ my $cmd = &quot;TMPDIR=$self-&gt;{_tmpdir}/$target/$arch time $self-&gt;{_command} --nochkdep --nobadrpm $fast --noclean $root/$target/$arch&quot;;
++ print &quot;$cmd\n&quot;;
++ system($cmd);
++ }
++ return
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, Mandriva &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">warly at mandriva.com</A>&gt;
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
++
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Genhdlist2.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Genhdlist2.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post/Genhdlist2.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,82 @@
++# $Id: Gendistrib.pm 115367 2007-01-30 09:47:04Z pixel $
++package Youri::Submit::Post::Genhdlist2;
++
++=head1 NAME
++
++Youri::Submit::Post::Genhdlist2 - calls genhdlist2
++
++=head1 DESCRIPTION
++
++Calls genhdlist2
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Post/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ user =&gt; '',
++ host =&gt; '',
++ source =&gt; '',
++ destination =&gt; '',
++ @_
++ );
++
++ foreach my $var ('command') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++}
++
++sub run {
++ my ($self, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $root = $repository-&gt;get_install_root();
++ my @changed = @{$repository-&gt;get_install_dir_changed($target)};
++ if (!@changed) {
++ print &quot;nothing to do\n&quot;;
++ return;
++ }
++ foreach my $dir (@changed) {
++ my $file_deps = &quot;$dir/../../media_info/file-deps&quot;;
++ my $file_deps_option = -e $file_deps ? &quot;--file-deps $file_deps&quot; : '';
++ my $cmd = &quot;time $self-&gt;{_command} -v --versioned --allow-empty-media $file_deps_option $dir&quot;;
++ print &quot;$cmd\n&quot;;
++ system($cmd) == 0 or print &quot;ERROR: $cmd failed\n&quot;;
++ }
++
++ # need to redo global MD5SUM. This MD5SUM is mostly obsolete, but is still needed up to 2007.1
++ # (and even on cooker for existing urpmi.cfg)
++ foreach my $arch (@{$repository-&gt;get_arch_changed($target)}) {
++ my $dir = &quot;$root/$target/$arch/media/media_info&quot;;
++ my $cmd = &quot;cd $dir ; time md5sum hdlist_* synthesis.*&quot;;
++ print &quot;$cmd\n&quot;;
++ my $m = `$cmd`;
++ open my $f, '&gt;', &quot;$dir/MD5SUM&quot; or die &quot;Can't write $dir/MD5SUM: $!\n&quot;;
++ print $f $m;
++
++ {
++ require MDV::Distribconf::Build;
++ my $distrib = MDV::Distribconf::Build-&gt;new(&quot;$root/$target/$arch&quot;);
++ $distrib-&gt;loadtree or die &quot;$root/$target/$arch does not seem to be a distribution tree\n&quot;;
++ $distrib-&gt;parse_mediacfg;
++ $distrib-&gt;write_version($distrib-&gt;getfullpath(undef, &quot;VERSION&quot;));
++ print &quot;updated $root/$target/$arch/VERSION\n&quot;;
++ }
++ }
++ return;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, Mandriva &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">warly at mandriva.com</A>&gt;
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
++
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Post.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,27 @@
++# $Id: Post.pm 4746 2007-01-30 10:01:14Z pixel $
++package Youri::Submit::Post;
++
++=head1 NAME
++
++Youri::Submit::Post - Abstract post plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines post plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Plugin/;
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2006, Mandriva
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre/Rsync.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre/Rsync.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre/Rsync.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,87 @@
++# $Id: Rsync.pm 267280 2010-04-01 19:57:53Z bogdano $
++package Youri::Submit::Pre::Rsync;
++
++=head1 NAME
++
++Youri::Submit::Pre::Rsync - Old revisions archiving
++
++=head1 DESCRIPTION
++
++This action plugin ensures archiving of old package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Pre/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ user =&gt; '',
++ host =&gt; '',
++ source =&gt; '',
++ destination =&gt; '',
++ @_
++ );
++
++ foreach my $var ('user', 'host', 'source', 'destination') {
++ $self-&gt;{&quot;_$var&quot;} = $options{$var};
++ }
++}
++
++sub run {
++ my ($self, $pre_packages, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ if (system(&quot;rsync --exclude '*.new' --exclude '.*' --remove-sent-files -avlPHe 'ssh -xc arcfour' $self-&gt;{_user}\@$self-&gt;{_host}:$self-&gt;{_source}/$target/ $self-&gt;{_destination}/$target/&quot;)) {
++ $self-&gt;{_error} = &quot;Rsync command failed ($!)&quot;;
++ return
++ }
++ my $queue = &quot;$self-&gt;{_destination}/$target&quot;;
++ $self-&gt;{_error} = &quot;Reading queue directory failed&quot;;
++ # now get the packages downloaded
++ my %packages;
++ opendir my $queuedh, &quot;$self-&gt;{_destination}/$target/&quot; or return &quot;Could not open $self-&gt;{_destination}/$target&quot;;
++ opendir my $targetdh, $queue or return &quot;Could not open $queue&quot;;
++ my $idx;
++ foreach my $media (readdir $targetdh) {
++ $media =~ /^\.{1,2}$/ and next;
++ print &quot;$target - $media\n&quot;;
++ if (-d &quot;$queue/$media&quot;) {
++ opendir my $submediadh, &quot;$queue/$media&quot; or return &quot;Could not open $queue/$media&quot;;
++ foreach my $submedia (readdir $submediadh) {
++ $submedia =~ /^\.{1,2}$/ and next;
++ print &quot;$target - $media - $submedia\n&quot;;
++ opendir my $rpmdh, &quot;$queue/$media/$submedia&quot; or return &quot;Could not open $queue/$media/$submedia&quot;;
++ foreach my $rpm (readdir $rpmdh) {
++ $rpm =~ /^\.{1,2}$/ and next;
++ print &quot;$target - $media - $submedia : $rpm\n&quot;;
++ my $file = &quot;$queue/$media/$submedia/$rpm&quot;;
++ $file =~ s/\/+/\//g;
++ if ($rpm =~ /^(\d{14}\.\w+\.\w+\.\d+)_.*\.rpm$/) {
++ push @{$packages{$1}{rpms}}, { section =&gt; &quot;$media/$submedia&quot;, file =&gt; $file };
++ } elsif ($rpm =~ /\.rpm$/) {
++ $idx++;
++ push @{$packages{&quot;independant_$idx&quot;}{rpms}}, { section =&gt; &quot;$media/$submedia&quot;, file =&gt; $file }
++ }
++ }
++ }
++ }
++ }
++ foreach my $key (keys %packages) {
++ push @$pre_packages, $packages{$key}{rpms}
++ }
++ return
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, Mandriva &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">warly at mandriva.com</A>&gt;
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Pre.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,27 @@
++# $Id: Pre.pm 4746 2007-01-30 10:01:14Z pixel $
++package Youri::Submit::Pre;
++
++=head1 NAME
++
++Youri::Submit::Pre - Abstract pre plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines pre plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Plugin/;
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2006, Mandriva
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Archive.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Archive.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Archive.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,61 @@
++# $Id: Archive.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Reject::Install;
++
++=head1 NAME
++
++Youri::Submit::Action::Archive - Old revisions archiving
++
++=head1 DESCRIPTION
++
++This action plugin ensures archiving of old package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Reject/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ @_
++ );
++
++ $self-&gt;{_perms} = $options{perms};
++
++ return $self;
++}
++
++sub run {
++ my ($self, $package, $errors, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $file = $package-&gt;get_file();
++ my $rpm = $package-&gt;get_file_name();
++ my $dest = $repository-&gt;get_reject_dir($package, $target, $define);
++
++ # FIXME remove prefix this should be done by a function
++ $rpm =~ s/^\d{14}\.\w+\.\w+\.\d+_//;
++ print &quot;installing file $file to $dest/$rpm\n&quot; ;#if $self-&gt;{_verbose};
++
++ unless ($self-&gt;{_test}) {
++ # create destination dir if needed
++ system(&quot;install -d -m &quot; . ($self-&gt;{_perms} + 111) . &quot; $dest/&quot;)
++ unless -d $dest;
++
++ # install file to new location
++ system(&quot;install -m $self-&gt;{_perms} $file $dest/$rpm&quot;);
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Clean.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Clean.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Clean.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,36 @@
++# $Id: Clean.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Reject::Clean;
++
++=head1 NAME
++
++Youri::Submit::Action::Clean - Old revisions cleanup
++
++=head1 DESCRIPTION
++
++This action plugin ensures cleanup of old package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Reject/;
++
++sub run {
++ my ($self, $package, $errors, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $file = $package-&gt;get_file();
++ print &quot;deleting file $file\n&quot; if $self-&gt;{_verbose};
++ unlink $file unless $self-&gt;{_test};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Install.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Install.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Install.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,63 @@
++# $Id: Install.pm 4747 2007-01-30 10:02:41Z pixel $
++package Youri::Submit::Reject::Install;
++
++=head1 NAME
++
++Youri::Submit::Action::Archive - Old revisions archiving
++
++=head1 DESCRIPTION
++
++This action plugin ensures archiving of old package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Reject/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ perms =&gt; 644,
++ @_
++ );
++
++ $self-&gt;{_perms} = $options{perms};
++ $self-&gt;{_verbose} = $options{verbose};
++}
++
++sub run {
++ my ($self, $package, $errors, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $file = $package-&gt;get_file();
++ my $rpm = $package-&gt;get_file_name();
++ my $dest = $repository-&gt;get_reject_path($package, $target, $define);
++
++ # FIXME remove prefix this should be done by a function
++ $rpm =~ s/^\d{14}\.\w+\.\w+\.\d+_//;
++ print &quot;installing file $file to $dest/$rpm\n&quot; if $self-&gt;{_verbose};
++
++ unless ($self-&gt;{_test}) {
++ # create destination dir if needed
++ system(&quot;install -d -m &quot; . ($self-&gt;{_perms} + 111) . &quot; $dest/&quot;)
++ unless -d $dest;
++
++ # install file to new location
++ system(&quot;install -m $self-&gt;{_perms} $file $dest/$rpm&quot;);
++ }
++ $package-&gt;{_file} = &quot;$dest/$rpm&quot;;
++ print &quot;deleting file $file\n&quot; if $self-&gt;{_verbose};
++ unlink $file unless $self-&gt;{_test};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Mail.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Mail.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject/Mail.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,112 @@
++# $Id: Mail.pm 223952 2007-06-23 13:54:13Z pixel $
++package Youri::Submit::Reject::Mail;
++
++=head1 NAME
++
++Youri::Submit::Action::Mail - Mail notification
++
++=head1 DESCRIPTION
++
++This action plugin ensures mail notification of new package revisions.
++
++=cut
++
++use warnings;
++use strict;
++use MIME::Entity;
++use Encode qw/from_to/;
++use Carp;
++use Youri::Package;
++use base qw/Youri::Submit::Reject/;
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ mta =&gt; '/usr/sbin/sendmail',
++ to =&gt; '',
++ from =&gt; '',
++ cc =&gt; '',
++ prefix =&gt; '',
++ encoding =&gt; 'quoted-printable',
++ charset =&gt; 'iso-8859-1',
++ @_
++ );
++
++ croak &quot;undefined mail MTA&quot; unless $options{mta};
++ croak &quot;invalid mail MTA $options{mta}&quot; unless -x $options{mta};
++ croak &quot;undefined to&quot; unless $options{to};
++ if ($options{cc}) {
++ croak &quot;cc should be an hashref&quot; unless ref $options{cc} eq 'HASH';
++ }
++ croak &quot;invalid charset $options{charset}&quot;
++ unless Encode::resolve_alias($options{charset});
++
++ $self-&gt;{_mta} = $options{mta};
++ $self-&gt;{_to} = $options{to};
++ $self-&gt;{_from} = $options{from};
++ $self-&gt;{_cc} = $options{cc};
++ $self-&gt;{_prefix} = $options{prefix};
++ $self-&gt;{_encoding} = $options{encoding};
++ $self-&gt;{_charset} = $options{charset};
++}
++
++sub run {
++ my ($self, $package, $errors, $repository, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $section = $repository-&gt;_get_section($package, $target, $define);
++
++ my $subject =
++ ($self-&gt;{_prefix} ? '[' . $self-&gt;{_prefix} . '] ' : '' ) . ($section ? &quot;$section &quot; : '') .
++ $package-&gt;get_revision_name();
++ my $information = $package-&gt;get_information();
++ my $last_change = $package-&gt;get_last_change();
++ my $author = $last_change-&gt;[Youri::Package::CHANGE_AUTHOR] if $last_change;
++ my $list = $last_change-&gt;[Youri::Package::CHANGE_TEXT] if $last_change;
++ my $content =
++ &quot;Errors: \n\n&quot; . join(&quot;\n&quot;, map {
++ ( &quot;* $_&quot;, (map { &quot; - $_&quot; } @{$errors-&gt;{$_}}), &quot;\n&quot;);
++ } sort(keys %$errors)) . &quot;\n&quot; .
++ $information . &quot;\n&quot; .
++ $author . &quot;:\n$list&quot;;
++
++ # ensure proper codeset conversion
++ # for informations coming from package
++ my $charset = $repository-&gt;get_package_charset();
++ from_to($content, $charset, $self-&gt;{_charset});
++ from_to($subject, $charset, $self-&gt;{_charset});
++
++ my $mail = MIME::Entity-&gt;build(
++ Type =&gt; 'text/plain',
++ Charset =&gt; $self-&gt;{_charset},
++ Encoding =&gt; $self-&gt;{_encoding},
++ From =&gt; $self-&gt;{_from},
++ To =&gt; $self-&gt;{_to},
++ Subject =&gt; $subject,
++ Data =&gt; $content,
++ );
++
++ if ($self-&gt;{_cc}) {
++ my $cc = $self-&gt;{_cc}-&gt;{$package-&gt;get_name()};
++ $mail-&gt;head()-&gt;add('cc', $cc) if $cc;
++ }
++
++ if ($self-&gt;{_test}) {
++ $mail-&gt;print(\*STDOUT);
++ } else {
++ open(MAIL, &quot;| $self-&gt;{_mta} -t -oi -oem&quot;) or die &quot;Can't open MTA program: $!&quot;;
++ $mail-&gt;print(\*MAIL);
++ close MAIL;
++ }
++
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject.pm
+===================================================================
+--- build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject.pm (rev 0)
++++ build_system/mdv-youri-submit/trunk/lib/Youri/Submit/Reject.pm 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,27 @@
++# $Id: Reject.pm 4746 2007-01-30 10:01:14Z pixel $
++package Youri::Submit::Reject;
++
++=head1 NAME
++
++Youri::Submit::Reject - Abstract reject plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines reject plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base qw/Youri::Submit::Plugin/;
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2006, Mandriva
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-submit/trunk/t/00distribution.t
+===================================================================
+--- build_system/mdv-youri-submit/trunk/t/00distribution.t (rev 0)
++++ build_system/mdv-youri-submit/trunk/t/00distribution.t 2011-01-05 13:19:06 UTC (rev 209)
+@@ -0,0 +1,15 @@
++#!/usr/bin/perl
++# $Id: 00distribution.t 1723 2006-10-17 13:53:27Z warly $
++
++use Test::More;
++
++BEGIN {
++ eval {
++ require Test::Distribution;
++ };
++ if($@) {
++ plan skip_all =&gt; 'Test::Distribution not installed';
++ } else {
++ import Test::Distribution only =&gt; [ qw/use pod description/ ];
++ }
++}
+
+
+Property changes on: build_system/mdv-youri-submit/trunk/t/00distribution.t
+___________________________________________________________________
+Added: svn:executable
+ + *
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/2b91b15e/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001511.html">[Mageia-sysadm] [653] - do not try to do ssl when we cannot, this confuse epoll
+</A></li>
+ <LI>Next message: <A HREF="001513.html">[Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1512">[ date ]</a>
+ <a href="thread.html#1512">[ thread ]</a>
+ <a href="subject.html#1512">[ subject ]</a>
+ <a href="author.html#1512">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001513.html b/zarb-ml/mageia-sysadm/2011-January/001513.html
new file mode 100644
index 000000000..46a37a5b0
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001513.html
@@ -0,0 +1,11447 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B210%5D%20add%20mandriva%20version%20of%20youri-core%2C%0A%20downloaded%20from%20http%3A//svn.%0A%20mandriva.com/svn/soft/build_system/youri/core/trunk/%20at%20revision%20271600&In-Reply-To=%3C20110105132345.9727D41942%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001512.html">
+ <LINK REL="Next" HREF="001514.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B210%5D%20add%20mandriva%20version%20of%20youri-core%2C%0A%20downloaded%20from%20http%3A//svn.%0A%20mandriva.com/svn/soft/build_system/youri/core/trunk/%20at%20revision%20271600&In-Reply-To=%3C20110105132345.9727D41942%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 14:23:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001512.html">[Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600
+</A></li>
+ <LI>Next message: <A HREF="001514.html">[Mageia-sysadm] [654] Add ssh key for pterjan.
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1513">[ date ]</a>
+ <a href="thread.html#1513">[ thread ]</a>
+ <a href="subject.html#1513">[ subject ]</a>
+ <a href="author.html#1513">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 210
+Author: boklm
+Date: 2011-01-05 14:23:45 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+add mandriva version of youri-core, downloaded from <A HREF="http://svn.mandriva.com/svn/soft/build_system/youri/core/trunk/">http://svn.mandriva.com/svn/soft/build_system/youri/core/trunk/</A> at revision 271600
+
+Added Paths:
+-----------
+ build_system/mdv-youri-core/
+ build_system/mdv-youri-core/branches/
+ build_system/mdv-youri-core/tags/
+ build_system/mdv-youri-core/trunk/
+ build_system/mdv-youri-core/trunk/ChangeLog
+ build_system/mdv-youri-core/trunk/MANIFEST.SKIP
+ build_system/mdv-youri-core/trunk/Makefile.PL
+ build_system/mdv-youri-core/trunk/README
+ build_system/mdv-youri-core/trunk/TODO
+ build_system/mdv-youri-core/trunk/bin/
+ build_system/mdv-youri-core/trunk/bin/fillbugzilla
+ build_system/mdv-youri-core/trunk/cgi/
+ build_system/mdv-youri-core/trunk/cgi/maintainers.cgi
+ build_system/mdv-youri-core/trunk/etc/
+ build_system/mdv-youri-core/trunk/etc/bash_completion.d/
+ build_system/mdv-youri-core/trunk/etc/bash_completion.d/youri
+ build_system/mdv-youri-core/trunk/etc/check.conf
+ build_system/mdv-youri-core/trunk/etc/upload.conf
+ build_system/mdv-youri-core/trunk/lib/
+ build_system/mdv-youri-core/trunk/lib/Youri/
+ build_system/mdv-youri-core/trunk/lib/Youri/Bugzilla.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Age.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/Iurt.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/LBD.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Conflicts.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Dependencies.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/MandrivaConflicts.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Missing.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Orphans.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Rpmlint.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Signature.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/CPAN.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Debian.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Fedora.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Freshmeat.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/GNOME.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Gentoo.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/NetBSD.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/RAA.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Sourceforge.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences/File.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/Bugzilla.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/CGI.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/HTML.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/RSS.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/Text.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/HTML.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/Text.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/DBI.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/Iterator.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Config.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Media/
+ build_system/mdv-youri-core/trunk/lib/Youri/Media/URPM.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Media.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Package/
+ build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM4.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Package/Test.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Package/URPM.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Package.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/PLF.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository.pm
+ build_system/mdv-youri-core/trunk/lib/Youri/Utils.pm
+ build_system/mdv-youri-core/trunk/t/
+ build_system/mdv-youri-core/trunk/t/00distribution.t
+ build_system/mdv-youri-core/trunk/t/cowsay-3.03-11mdv2007.0.noarch.rpm
+ build_system/mdv-youri-core/trunk/t/gpghome/
+ build_system/mdv-youri-core/trunk/t/gpghome/pubring.gpg
+ build_system/mdv-youri-core/trunk/t/gpghome/secring.gpg
+ build_system/mdv-youri-core/trunk/t/gpghome/trustdb.gpg
+ build_system/mdv-youri-core/trunk/t/package.t
+ build_system/mdv-youri-core/trunk/t/version.t
+
+Added: build_system/mdv-youri-core/trunk/ChangeLog
+===================================================================
+--- build_system/mdv-youri-core/trunk/ChangeLog (rev 0)
++++ build_system/mdv-youri-core/trunk/ChangeLog 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,2 @@
++2006-04-23 Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at zarb.org</A>&gt; 0.9
++ * initial release
+
+Added: build_system/mdv-youri-core/trunk/MANIFEST.SKIP
+===================================================================
+--- build_system/mdv-youri-core/trunk/MANIFEST.SKIP (rev 0)
++++ build_system/mdv-youri-core/trunk/MANIFEST.SKIP 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,14 @@
++CVS/.*
++\.svn/.*
++^cover_db/
++^blib/
++\.bak$
++\.swp$
++\.tar$
++\.tgz$
++\.tar\.gz$
++\.SKIP$
++~$
++^pm_to_blib$
++^Makefile$
++^Makefile\.old$
+
+Added: build_system/mdv-youri-core/trunk/Makefile.PL
+===================================================================
+--- build_system/mdv-youri-core/trunk/Makefile.PL (rev 0)
++++ build_system/mdv-youri-core/trunk/Makefile.PL 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,31 @@
++# $Id: Makefile.PL 1724 2006-10-17 13:55:27Z warly $
++use ExtUtils::MakeMaker;
++
++WriteMakefile(
++ NAME =&gt; 'youri-core',
++ VERSION =&gt; 0.9,
++ AUTHOR =&gt; 'Youri project &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">youri at zarb.org</A>&gt;',
++ PREREQ_PM =&gt; {
++ 'AppConfig' =&gt; 0,
++ 'YAML' =&gt; 0,
++ 'Pod::Simple::HTMLBatch' =&gt; 0,
++ 'Test::Exception' =&gt; 0,
++ 'Exception' =&gt; 0,
++ 'RPM4' =&gt; 0,
++ 'URPM' =&gt; 0
++ }
++);
++
++package MY;
++
++sub top_targets {
++ my ($self) = @_;
++ my $top_targets = $self-&gt;SUPER::top_targets(@_);
++ $top_targets =~ s/all :: pure_all manifypods/all :: pure_all manifypods htmlifypods/;
++ $top_targets .= &lt;&lt;'EOF';
++htmlifypods : $(TO_INST_PM)
++ if [ ! -d blib/html ]; then mkdir blib/html; fi
++ perl -MPod::Simple::HTMLBatch -e Pod::Simple::HTMLBatch::go lib blib/html
++EOF
++ return $top_targets;
++}
+
+Added: build_system/mdv-youri-core/trunk/README
+===================================================================
+--- build_system/mdv-youri-core/trunk/README (rev 0)
++++ build_system/mdv-youri-core/trunk/README 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,33 @@
++youri-core
++----------
++
++Youri core libraries.
++
++Description
++-----------
++YOURI stands for &quot;Youri Offers an Upload &amp; Repository Infrastucture&quot;. It aims
++to build tools making management of a coherent set of packages easier.
++
++This package provides basic components used by other youri programs.
++
++Installation
++------------
++To install, just use:
++perl Makefile.PL
++make
++make test
++
++Copyright and License
++---------------------
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under
++the same terms as Perl itself.
++
++Authors
++-------
++Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at zarb.org</A>&gt;,
++Pascal Terjan &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">pterjan at zarb.org</A>&gt;
++Damien Krotkine &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">dams at zarb.org</A>&gt;
++Olivier Thauvin &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">nanardon at zarb.org</A>&gt;
++Ville Skytt\xE4 &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">ville.skytta at iki.fi</A>&gt;
+
+Added: build_system/mdv-youri-core/trunk/TODO
+===================================================================
+--- build_system/mdv-youri-core/trunk/TODO (rev 0)
++++ build_system/mdv-youri-core/trunk/TODO 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,7 @@
++1.0 Goals
++=========
++
++library:
++- API-based bugzilla interface, instead of SQL-based one
++- more generic check-specific options handling in medias (don't use a
++specific attribute for each of them)
+
+Added: build_system/mdv-youri-core/trunk/bin/fillbugzilla
+===================================================================
+--- build_system/mdv-youri-core/trunk/bin/fillbugzilla (rev 0)
++++ build_system/mdv-youri-core/trunk/bin/fillbugzilla 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,81 @@
++#!/usr/bin/perl
++# fillbugzilla
++# copyright (c) 2002 Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at zarb.org</A>&gt;
++# $Id: fillbugzilla 1179 2006-08-05 08:30:57Z warly $
++
++use strict;
++use warnings;
++use Getopt::Long;
++use Bugzilla;
++use Mail::Sendmail;
++
++# constants
++my $name = &quot;fillbugzilla&quot;;
++my $version = &quot;1.0&quot;;
++
++# command-line parameters
++my ($base, $user, $pass, $project, $mode, $help);
++GetOptions(
++ &quot;base=s&quot; =&gt; \$base,
++ &quot;user=s&quot; =&gt; \$user,
++ &quot;pass=s&quot; =&gt; \$pass,
++ &quot;mode=s&quot; =&gt; \$mode,
++ &quot;help&quot; =&gt; \$help,
++);
++
++# mandatory argument
++die usage() unless ($base &amp;&amp; $user &amp;&amp; $pass);
++die usage() unless ($mode eq 'package' || $mode eq 'packager');
++
++usage() &amp;&amp; exit 0 if $help;
++
++my $bugzilla = Bugzilla-&gt;new('localhost', $base, $user, $pass);
++
++if ($mode eq 'packager') {
++ while (my $packager = &lt;&gt;) {
++ chomp $packager;
++ my ($name, $login) = split(/\t/, $packager);
++
++ # random passwd
++ my @chars = (0..9, 'A'..'Z', 'a'..'z', '-', '_', '!', '@', '#', '$', '%', '^', '&amp;', '*');
++ my $password = join('', map { $chars[rand(scalar @chars)] } 1 .. 8);
++
++ # insert into database
++ $bugzilla-&gt;add_packager($name, $login, $password);
++
++ # mail user
++ my %mail = (
++ smtp =&gt; 'localhost',
++ To =&gt; $login,
++ From =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">bugmaster at zarb.org</A>',
++ Subject =&gt; 'bugzilla password',
++ 'X-Mailer' =&gt; &quot;$name $version&quot;,
++ );
++ $mail{Message} .= &quot;login: $login\n&quot;;
++ $mail{Message} .= &quot;password: $password\n&quot;;
++ sendmail(%mail) or warn $Mail::Sendmail::error;
++ }
++}
++
++if ($mode eq 'package') {
++ while (my $line = &lt;&gt;) {
++ chomp $line;
++ my ($name, $summary, $version, $maintainer) = split(/\t/, $line);
++ $bugzilla-&gt;add_package($name, $summary, $version, $maintainer);
++ }
++}
++
++sub usage {
++ print &lt;&lt;EOF;
++$name $version
++
++Usage:
++$name --base &lt;base&gt; --user &lt;user&gt; --pass &lt;pass&gt; --mode &lt;mode&gt; &lt; $file
++
++Options:
++--base &lt;base&gt; bugzilla base name
++--user &lt;user&gt; bugzilla base user
++--pass &lt;pass&gt; bugzilla base password
++--mode &lt;mode&gt; package or packager
++EOF
++}
+
+
+Property changes on: build_system/mdv-youri-core/trunk/bin/fillbugzilla
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-core/trunk/cgi/maintainers.cgi
+===================================================================
+--- build_system/mdv-youri-core/trunk/cgi/maintainers.cgi (rev 0)
++++ build_system/mdv-youri-core/trunk/cgi/maintainers.cgi 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,65 @@
++#!/usr/bin/perl
++# $Id: maintainers.cgi 1179 2006-08-05 08:30:57Z warly $
++
++=head1 NAME
++
++maintainers.cgi - youri CGI interface to maintainers list
++
++=head1 VERSION
++
++Version 1.0
++
++=head1 DESCRIPTION
++
++This script allows to get package maintainers list through CGI interface.
++
++=head1 SYNOPSIS
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2004-2005, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=head1 AUTHORS
++
++Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at zarb.org</A>&gt;,
++
++=cut
++
++use Youri::Bugzilla;
++use CGI;
++use AppConfig qw/:argcount :expand/;
++use strict;
++use warnings;
++
++my $config = AppConfig-&gt;new(
++ {
++ GLOBAL =&gt; {
++ DEFAULT =&gt; undef,
++ EXPAND =&gt; EXPAND_ALL,
++ ARGCOUNT =&gt; ARGCOUNT_ONE,
++ }
++ },
++ host =&gt; { ARGCOUNT =&gt; ARGCOUNT_ONE },
++ base =&gt; { ARGCOUNT =&gt; ARGCOUNT_ONE },
++ user =&gt; { ARGCOUNT =&gt; ARGCOUNT_ONE },
++ pass =&gt; { ARGCOUNT =&gt; ARGCOUNT_ONE },
++);
++
++my $home = (getpwnam($ENV{PROJECT}))[7];
++foreach my $file (&quot;/etc/youri/maintainers.conf&quot;, &quot;$home/.youri/maintainers.conf&quot;) {
++ $config-&gt;file($file) if -f $file &amp;&amp; -r $file;
++}
++
++my $bugzilla = Bugzilla-&gt;new(
++ $config-&gt;host(),
++ $config-&gt;base(),
++ $config-&gt;user(),
++ $config-&gt;pass(),
++);
++
++my $cgi = CGI-&gt;new();
++print $cgi-&gt;header(-type=&gt;'text/plain');
++
++$bugzilla-&gt;browse_packages(sub { print &quot;$_[0]\t$_[2]\n&quot;; });
+
+
+Property changes on: build_system/mdv-youri-core/trunk/cgi/maintainers.cgi
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-core/trunk/etc/bash_completion.d/youri
+===================================================================
+--- build_system/mdv-youri-core/trunk/etc/bash_completion.d/youri (rev 0)
++++ build_system/mdv-youri-core/trunk/etc/bash_completion.d/youri 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,141 @@
++# youri tools completion
++# $Id$
++
++_youri-check()
++{
++
++ local cur prev config i mode
++
++ COMPREPLY=()
++ cur=${COMP_WORDS[COMP_CWORD]}
++ prev=${COMP_WORDS[COMP_CWORD-1]}
++
++ case &quot;$prev&quot; in
++ --config)
++ _filedir
++ return 0
++ ;;
++ --skip-plugin)
++ _find_config check.conf
++ if [ -n &quot;$config&quot; ]; then
++ # try to guess mode
++ for (( i=1; i &lt; COMP_CWORD; i++ )); do
++ if [[ &quot;${COMP_WORDS[i]}&quot; != -* ]]; then
++ mode=${COMP_WORDS[i]}
++ break
++ fi
++ done
++
++ if [ -n $mode ]; then
++ COMPREPLY=( $( awk -F= '/^'$mode's/ {print $2}' $config \
++ | grep &quot;^$cur&quot; ) )
++ fi
++ fi
++ return 0
++ ;;
++ --skip-media)
++ _find_config check.conf
++ if [ -n &quot;$config&quot; ]; then
++ COMPREPLY=( $( awk -F= '/^medias/ {print $2}' $config \
++ | grep &quot;^$cur&quot; ) )
++ fi
++ return 0
++ ;;
++ esac
++
++ if [[ &quot;$cur&quot; == -* ]]; then
++ COMPREPLY=( $( compgen -W '--config --skip-plugin --skip-media -h \
++ --help -t --test -v --verbose' -- $cur ) )
++ else
++ _count_args
++ case $args in
++ 1)
++ COMPREPLY=( $( compgen -W 'input output' -- $cur ) )
++ ;;
++ esac
++ fi
++
++}
++complete -F _youri-check youri-check
++
++_youri-upload()
++{
++
++ local cur prev config
++
++ COMPREPLY=()
++ cur=${COMP_WORDS[COMP_CWORD]}
++ prev=${COMP_WORDS[COMP_CWORD-1]}
++
++ case &quot;$prev&quot; in
++ --config)
++ _filedir
++ return 0
++ ;;
++ --skip-check)
++ _find_config upload.conf
++ if [ -n &quot;$config&quot; ]; then
++ COMPREPLY=( $( awk -F= '/^checks/ {print $2}' $config \
++ | grep &quot;^$cur&quot; ) )
++ fi
++ return 0
++ ;;
++ --skip-action)
++ _find_config upload.conf
++ if [ -n &quot;$config&quot; ]; then
++ COMPREPLY=( $( awk -F= '/^actions/ {print $2}' $config \
++ | grep &quot;^$cur&quot; ) )
++ fi
++ return 0
++ ;;
++ esac
++
++ if [[ &quot;$cur&quot; == -* ]]; then
++ COMPREPLY=( $( compgen -W '--config --skip-check --skip-action \
++ --define -h --help -t --test -v --verbose' -- $cur ) )
++ else
++ _count_args
++ case $args in
++ 1)
++ _find_config upload.conf
++ if [ -n &quot;$config&quot; ]; then
++ COMPREPLY=( $( awk -F= '/^targets/ {print $2}' $config \
++ | grep &quot;^$cur&quot; ) )
++ fi
++ ;;
++ *)
++ _filedir
++ ;;
++ esac
++ fi
++
++}
++complete -F _youri-upload youri-upload
++
++_find_config()
++{
++ local name i
++
++ name=$1
++
++ for (( i=1; i &lt; COMP_CWORD; i++ )); do
++ if [[ &quot;${COMP_WORDS[i]}&quot; == --config ]]; then
++ config=${COMP_WORDS[i+1]}
++ break
++ fi
++ done
++ if [ -f &quot;$config&quot; ]; then
++ return 0
++ fi
++
++ if [ -f &quot;$HOME/.youri/$name&quot; ]; then
++ config=$HOME/.youri/$name
++ return 0
++ fi
++
++ if [ -f &quot;/etc/youri/$name&quot; ]; then
++ config=/etc/youri/$name
++ return 0
++ fi
++
++}
+
+Added: build_system/mdv-youri-core/trunk/etc/check.conf
+===================================================================
+--- build_system/mdv-youri-core/trunk/etc/check.conf (rev 0)
++++ build_system/mdv-youri-core/trunk/etc/check.conf 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,300 @@
++# youri-check sample configuration file
++# $Id: check.conf 1179 2006-08-05 08:30:57Z warly $
++
++# resolver declaration
++resolver = cgi
++
++# preferences declaration
++preferences = file_pref
++
++# resultset declaration
++resultset = dbi
++
++# input plugins declaration
++inputs = rpmlint \
++ age \
++ updates \
++ build \
++ conflicts \
++ dependencies \
++ missing \
++ orphans
++
++# output plugins declaration
++outputs = file mail
++
++# medias declaration
++medias = main.i586 \
++ main.x86_64 \
++ main.sources \
++ contrib.i586 \
++ contrib.x86_64 \
++ contrib.sources \
++ free \
++ non-free \
++ free.sources \
++ non-free.sources
++
++# helper variables
++mirror = <A HREF="ftp://ftp.free.fr/pub/Distributions_Linux/Mandrakelinux/devel/cooker">ftp://ftp.free.fr/pub/Distributions_Linux/Mandrakelinux/devel/cooker</A>
++mirror_i586 = $mirror/i586/media
++mirror_x86_64 = $mirror/x86_64/media
++
++# resolver definition
++[cgi]
++class = Youri::Check::Maintainer::Resolver::CGI
++url = <A HREF="http://plf.zarb.org/cgi-bin/maintainers.cgi">http://plf.zarb.org/cgi-bin/maintainers.cgi</A>
++
++# preferences definition
++[file_pref]
++class = Youri::Check::Maintainer::Preferences::File
++
++# resultset definition
++[dbi]
++class = Youri::Check::Resultset::DBI
++driver = mysql
++host = localhost
++base = plf_youri
++user = plf
++pass = s3kr3t
++
++# checks definitions
++[updates]
++class = Youri::Check::Input::Updates
++aliases = &lt;&lt;EOF
++--- #YAML:1.0
++libfame0.8: ~
++EOF
++sources = &lt;&lt;EOF
++--- #YAML:1.0
++debian:
++ class: Youri::Check::Input::Updates::Source::Debian
++ aliases:
++ fuse-emulator: ~
++cpan:
++ class: Youri::Check::Input::Updates::Source::CPAN
++fedora:
++ class: Youri::Check::Input::Updates::Source::Fedora
++gentoo:
++ class: Youri::Check::Input::Updates::Source::Gentoo
++freshmeat:
++ class: Youri::Check::Input::Updates::Source::Freshmeat
++netbsd:
++ class: Youri::Check::Input::Updates::Source::NetBSD
++raa:
++ class: Youri::Check::Input::Updates::Source::RAA
++sourceforge:
++ class: Youri::Check::Input::Updates::Source::Sourceforge
++ aliases:
++ openquicktime: ~
++ klibido: ~
++EOF
++
++[rpmlint]
++class = Youri::Check::Input::Rpmlint
++
++[age]
++class = Youri::Check::Input::Age
++max_age = 12 months
++pattern = %m months
++
++[dependencies]
++class = Youri::Check::Input::Dependencies
++
++[conflicts]
++class = Youri::Check::Input::Conflicts
++
++[build]
++class = Youri::Check::Input::Build
++sources = &lt;&lt;EOF
++--- #YAML:1.0
++stefan:
++ class: Youri::Check::Input::Build::Source::LBD
++ url: <A HREF="http://eijk.homelinux.org/build/">http://eijk.homelinux.org/build/</A>
++ medias:
++ - cooker_plf-free
++ - cooker_plf-non-free
++ archs:
++ - i586
++EOF
++
++[missing]
++class = Youri::Check::Input::Missing
++
++[orphans]
++class = Youri::Check::Input::Orphans
++
++# reports definitions
++[file]
++class = Youri::Check::Output::File
++to = ${HOME}/www/qa
++global = 1
++individual = 1
++formats = &lt;&lt;EOF
++--- #YAML:1.0
++html:
++ class: Youri::Check::Output::File::Format::HTML
++text:
++ class: Youri::Check::Output::File::Format::Text
++rss:
++ class: Youri::Check::Output::File::Format::RSS
++EOF
++
++[mail]
++class = Youri::Check::Output::Mail
++mta = /usr/sbin/sendmail
++to = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf-admin at zarb.org</A>
++from = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
++reply_to = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf-admin at zarb.org</A>
++formats = &lt;&lt;EOF
++--- #YAML:1.0
++text:
++ class: Youri::Check::Output::Mail::Format::Text
++EOF
++
++# media definitions
++[main.i586]
++class = Youri::Media::URPM
++name = main
++type = binary
++path = $mirror_i586/main
++hdlist = $mirror_i586/media_info/hdlist_main.cz
++skip_inputs = &lt;&lt;EOF
++--- #YAML:1.0
++- all
++EOF
++
++[main.x86_64]
++class = Youri::Media::URPM
++name = main
++type = binary
++path = $mirror_x86_64/main
++hdlist = $mirror_x86_64/media_info/hdlist_main.cz
++skip_inputs = &lt;&lt;EOF
++--- #YAML:1.0
++- all
++EOF
++
++[main.sources]
++class = Youri::Media::URPM
++name = main
++type = source
++path = $mirror_i586/main
++hdlist = $mirror_i586/media_info/hdlist_main.src.cz
++skip_inputs = &lt;&lt;EOF
++--- #YAML:1.0
++- all
++EOF
++
++[contrib.i586]
++class = Youri::Media::URPM
++name = contrib
++type = binary
++path = $mirror_i586/contrib
++hdlist = $mirror_i586/media_info/hdlist_contrib.cz
++skip_inputs = &lt;&lt;EOF
++--- #YAML:1.0
++- all
++EOF
++
++[contrib.x86_64]
++class = Youri::Media::URPM
++name = contrib
++type = binary
++path = $mirror_x86_64/contrib
++hdlist = $mirror_x86_64/media_info/hdlist_contrib.cz
++skip_inputs = &lt;&lt;EOF
++--- #YAML:1.0
++- all
++EOF
++
++[contrib.sources]
++class = Youri::Media::URPM
++name = contrib
++type = source
++path = $mirror_i586/contrib
++hdlist = $mirror_i586/media_info/hdlist_contrib.src.cz
++skip_inputs = &lt;&lt;EOF
++--- #YAML:1.0
++- all
++EOF
++
++[free]
++class = Youri::Media::URPM
++name = free
++type = binary
++path = ${HOME}/ftp/mandrake/free/cooker/i586
++hdlist = ${HOME}/ftp/mandrake/free/cooker/i586/hdlist.cz
++rpmlint_config = ${HOME}/etc/rpmlint-free.conf
++allow_deps = &lt;&lt;EOF
++--- #YAML:1.0
++- main.i586
++- main.x86_64
++- contrib.i586
++- contrib.x86_64
++- free
++EOF
++allow_srcs = &lt;&lt;EOF
++--- #YAML:1.0
++- free.sources
++- main.sources
++- contrib.sources
++EOF
++skip_archs = &lt;&lt;EOF
++--- #YAML:1.0
++- ppc
++EOF
++
++[free.sources]
++class = Youri::Media::URPM
++name = free
++type = source
++path = ${HOME}/ftp/mandrake/free/src
++hdlist = ${HOME}/ftp/mandrake/free/src/hdlist.cz
++rpmlint_config = ${HOME}/etc/rpmlint-free.conf
++allow_deps = &lt;&lt;EOF
++--- #YAML:1.0
++- main.i586
++- contrib.i586
++- free
++EOF
++
++[non-free]
++class = Youri::Media::URPM
++name = non-free
++type = binary
++path = ${HOME}/ftp/mandrake/non-free/cooker/i586
++hdlist = ${HOME}/ftp/mandrake/non-free/cooker/i586/hdlist.cz
++rpmlint_config = ${HOME}/etc/rpmlint-non-free.conf
++allow_deps = &lt;&lt;EOF
++--- #YAML:1.0
++- main.i586
++- main.x86_64
++- contrib.i586
++- contrib.x86_64
++- free
++- non-free
++EOF
++allow_srcs = &lt;&lt;EOF
++--- #YAML:1.0
++- non-free.sources
++EOF
++skip_archs = &lt;&lt;EOF
++--- #YAML:1.0
++- ppc
++EOF
++
++[non-free.sources]
++class = Youri::Media::URPM
++name = non-free
++type = source
++path = ${HOME}/ftp/mandrake/non-free/src
++hdlist = ${HOME}/ftp/mandrake/non-free/src/hdlist.cz
++rpmlint_config = ${HOME}/etc/rpmlint-non-free.conf
++allow_deps = &lt;&lt;EOF
++--- #YAML:1.0
++- main.i586
++- contrib.i586
++- free
++- non-free
++EOF
+
+Added: build_system/mdv-youri-core/trunk/etc/upload.conf
+===================================================================
+--- build_system/mdv-youri-core/trunk/etc/upload.conf (rev 0)
++++ build_system/mdv-youri-core/trunk/etc/upload.conf 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,139 @@
++# youri-upload sample configuration file
++# $Id: upload.conf 1179 2006-08-05 08:30:57Z warly $
++
++# repository declaration
++repository = plf
++
++# targets declaration
++targets = cooker 2006.0
++
++# repository definition
++[plf]
++class = Youri::Repository::PLF
++install_root = ${HOME}/ftp/mandriva
++version_root = ${HOME}/cvs
++archive_root = ${HOME}/backup/mandriva
++noarch = i586
++
++# targets definition
++[cooker]
++checks = &lt;&lt;EOF
++--- #YAML:1.0
++- tag
++- recency
++- history
++EOF
++actions = &lt;&lt;EOF
++--- #YAML:1.0
++- sign
++- install
++- link
++- archive
++- clean
++- bugzilla
++- cvs
++- mail
++- rss
++EOF
++
++[2006.0]
++checks = &lt;&lt;EOF
++--- #YAML:1.0
++- type
++- tag
++- recency
++- history
++- precedence
++EOF
++actions = &lt;&lt;EOF
++--- #YAML:1.0
++- sign
++- install
++- link
++- archive
++- clean
++EOF
++
++# checks definition
++[tag]
++class = Youri::Upload::Check::Tag
++tags = &lt;&lt;EOF
++--- #YAML:1.0
++release: 'plf$'
++packager: '&lt;\<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">w+ at zarb</A>\.org&gt;$'
++distribution: '^Mandriva Linux$'
++vendor: '^Penguin Liberation Front$'
++EOF
++
++[recency]
++class = Youri::Upload::Check::Recency
++
++[history]
++class = Youri::Upload::Check::History
++
++[precedence]
++class = Youri::Upload::Check::Precedence
++target = cooker
++
++[type]
++class = Youri::Upload::Check::Type
++type = binary
++
++# actions definitions
++[sign]
++class = Youri::Upload::Action::Sign
++name = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
++path = ${HOME}/.gnupg
++passphrase = s3kr3t
++
++[install]
++class = Youri::Upload::Action::Install
++
++[link]
++class = Youri::Upload::Action::Link
++
++[archive]
++class = Youri::Upload::Action::Archive
++
++[clean]
++class = Youri::Upload::Action::Clean
++
++[mail]
++class = Youri::Upload::Action::Mail
++mta = /usr/sbin/sendmail
++to = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf-announce at zarb.org</A>
++reply_to = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf-discuss at zarb.org</A>
++from = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
++prefix = RPM
++cc = &lt;&lt;EOF
++--- #YAML:1.0
++hot-base: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">david at dindinx.org</A> <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">bellamy at neverland.net</A>
++dcgui: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mathen at ketelhot.de</A>
++dclib: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mathen at ketelhot.de</A>
++Video-DVDRip: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">dvdrip-users at exit1.org</A>
++hackVideo-DVDRip: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">dvdrip-users at exit1.org</A>
++goosnes: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">tak at bard.sytes.net</A>
++avidemux: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">fixounet at free.fr</A>
++vobcopy: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">robos at muon.de</A>
++drip: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">drip-devel at lists.sourceforge.net</A>
++libdscaler: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">vektor at dumbterm.net</A>
++xawdecode: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">pingus77 at ifrance.com</A>
++EOF
++
++[rss]
++class = Youri::Upload::Action::RSS
++file = ${HOME}/www/changelog.rss
++title = PLF packages updates
++link = <A HREF="http://plf.zarb.org/">http://plf.zarb.org/</A>
++description = ChangeLog for PLF packages
++
++[cvs]
++class = Youri::Upload::Action::CVS
++
++[bugzilla]
++class = Youri::Upload::Action::Bugzilla
++host = localhost
++base = plf_bugs
++user = plf
++pass = s3kr3t
++contact = <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">plf at zarb.org</A>
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Bugzilla.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Bugzilla.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Bugzilla.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,482 @@
++# $Id: Bugzilla.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Bugzilla;
++
++=head1 NAME
++
++Youri::Bugzilla - Youri Bugzilla interface
++
++=head1 SYNOPSIS
++
++ use Youri::Bugzilla;
++
++ my $bugzilla = Youri::Bugzilla-&gt;new($host, $base, $user, $pass);
++
++ print $bugzilla-&gt;get_maintainer('foobar');
++
++=head1 DESCRIPTION
++
++This module implement a database-level Bugzilla interface for managing packages.
++
++The legacy Bugzilla database model is mapped this way:
++
++=over
++
++=item *
++
++a maintainer is a user
++
++=item *
++
++a package is a product
++
++=item *
++
++each package has two pseudo components &quot;program&quot; and &quot;package&quot;, owned by the package maintainer
++
++=back
++
++=cut
++
++use DBI;
++use Carp;
++use strict;
++use warnings;
++
++my %queries = (
++ get_package_id =&gt; 'SELECT id FROM products WHERE name = ?',
++ get_maintainer_id =&gt; 'SELECT userid FROM profiles WHERE login_name = ?',
++ get_versions =&gt; 'SELECT value FROM versions WHERE product_id = ?',
++ get_components =&gt; 'SELECT name FROM components WHERE product_id = ?',
++ add_package =&gt; 'INSERT INTO products (name, description) VALUES (?, ?)',
++ add_maintainer =&gt; 'INSERT INTO profiles (login_name, cryptpassword, realname, emailflags, refreshed_when) VALUES (?, ENCRYPT(?), ?, ?, SYSDATE())',
++ add_component =&gt; 'INSERT INTO components (product_id, name, description,initialowner, initialqacontact) VALUES (?, ?, ?, ?, ?)',
++ add_version =&gt; 'INSERT INTO versions (product_id, value) VALUES (?, ?)',
++ del_package =&gt; 'DELETE FROM products WHERE product = ?',
++ del_maintainer =&gt; 'DELETE FROM profiles WHERE login_name = ?',
++ del_components =&gt; 'DELETE FROM components WHERE program = ?',
++ del_versions =&gt; 'DELETE FROM versions WHERE program = ?',
++ reset_password =&gt; 'UPDATE profiles SET cryptpassword = ENCRYPT(?) WHERE login_name = ?',
++ browse_packages =&gt; &lt;&lt;EOF,
++SELECT products.name, max(versions.value), login_name
++FROM products, versions, profiles, components
++WHERE versions.product_id = products.id
++ AND components.product_id = products.id
++ AND profiles.userid = components.initialowner
++ AND components.name = 'package'
++GROUP BY name
++EOF
++ get_maintainer =&gt; &lt;&lt;EOF
++SELECT login_name
++FROM profiles, components, products
++WHERE profiles.userid = components.initialowner
++ AND components.name = 'package'
++ AND components.product_id = products.id
++ AND products.name = ?
++EOF
++);
++
++my @default_flags = qw/
++ ExcludeSelf
++ FlagRequestee
++ FlagRequester
++ emailOwnerRemoveme
++ emailOwnerComments
++ emailOwnerAttachments
++ emailOwnerStatus
++ emailOwnerResolved
++ emailOwnerKeywords
++ emailOwnerCC
++ emailOwnerOther
++ emailOwnerUnconfirmed
++ emailReporterRemoveme
++ emailReporterComments
++ emailReporterAttachments
++ emailReporterStatus
++ emailReporterResolved
++ emailReporterKeywords
++ emailReporterCC
++ emailReporterOther
++ emailReporterUnconfirmed
++ emailQAcontactRemoveme
++ emailQAcontactComments
++ emailQAcontactAttachments
++ emailQAcontactStatus
++ emailQAcontactResolved
++ emailQAcontactKeywords
++ emailQAcontactCC
++ emailQAcontactOther
++ emailQAcontactUnconfirmed
++ emailCClistRemoveme
++ emailCClistComments
++ emailCClistAttachments
++ emailCClistStatus
++ emailCClistResolved
++ emailCClistKeywords
++ emailCClistCC
++ emailCClistOther
++ emailCClistUnconfirmed
++ emailVoterRemoveme
++ emailVoterComments
++ emailVoterAttachments
++ emailVoterStatus
++ emailVoterResolved
++ emailVoterKeywords
++ emailVoterCC
++ emailVoterOther
++ emailVoterUnconfirmed
++/;
++
++my $default_flags = join('~', map { &quot;$_~on&quot; } @default_flags);
++
++=head1 CLASS METHODS
++
++Except stated otherwise, maintainers are specified by their login, and packages
++are specified by their name.
++
++=head2 new($host, $base, $user, $password)
++
++Creates a new L&lt;Youri::Bugzilla&gt; object, wrapping bugzilla database I&lt;$base&gt;
++hosted on I&lt;$host&gt;, and accessed by user I&lt;$user&gt; with password I&lt;$password&gt;.
++
++=cut
++
++sub new {
++ my ($class, $host, $base, $user, $pass) = @_;
++
++ my $dbh = DBI-&gt;connect(&quot;DBI:mysql:database=$base;host=$host&quot;, $user, $pass) or croak &quot;Unable to connect: $DBI::errstr&quot;;
++
++ my $self = bless {
++ _dbh =&gt; $dbh
++ }, $class;
++
++ return $self;
++}
++
++=head1 INSTANCE METHODS
++
++=head2 has_package($package)
++
++Return true if bugzilla contains given package.
++
++=cut
++
++sub has_package {
++ my ($self, $package) = @_;
++ return $self-&gt;_get_package_id($package);
++}
++
++=head2 has_maintainer($maintainer)
++
++Return true if bugzilla contains given maintainer.
++
++=cut
++
++sub has_maintainer {
++ my ($self, $maintainer) = @_;
++ return $self-&gt;_get_maintainer_id($maintainer);
++}
++
++=head2 get_maintainer($package)
++
++Return maintainer of given package.
++
++=cut
++
++sub get_maintainer {
++ my ($self, $package) = @_;
++ return $self-&gt;_get_single('get_maintainer', $package);
++}
++
++=head2 get_versions($package)
++
++Return versions from given package.
++
++=cut
++
++sub get_versions {
++ my ($self, $package) = @_;
++ return $self-&gt;_get_multiple(
++ 'get_versions',
++ $self-&gt;_get_package_id($package)
++ );
++}
++
++=head2 get_components($package)
++
++Return components from given package.
++
++=cut
++
++sub get_components {
++ my ($self, $package) = @_;
++ return $self-&gt;_get_multiple(
++ 'get_components',
++ $self-&gt;_get_package_id($package)
++ );
++}
++
++=head2 get_packages()
++
++Return all packages from the database.
++
++=cut
++
++sub get_packages {
++ my ($self) = @_;
++ return $self-&gt;_get_multiple('get_packages');
++}
++
++sub _get_package_id {
++ my ($self, $package) = @_;
++ return $self-&gt;_get_single('get_package_id', $package);
++}
++
++sub _get_maintainer_id {
++ my ($self, $maintainer) = @_;
++ return $self-&gt;_get_single('get_maintainer_id', $maintainer);
++}
++
++sub _get_single {
++ my ($self, $type, $value) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{$type};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{$type});
++ $self-&gt;{_queries}-&gt;{$type} = $query;
++ }
++
++ $query-&gt;execute($value);
++
++ my @row = $query-&gt;fetchrow_array();
++ return @row ? $row[0]: undef;
++}
++
++sub _get_multiple {
++ my ($self, $type, $value) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{$type};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{$type});
++ $self-&gt;{_queries}-&gt;{$type} = $query;
++ }
++
++ $query-&gt;execute($value);
++
++ my @results;
++ while (my @row = $query-&gt;fetchrow_array()) {
++ push @results, $row[0];
++ }
++ return @results;
++}
++
++=head2 add_package($name, $summary, $version, $maintainer, $contact)
++
++Adds a new package in the database, with given name, summary, version,
++maintainer and initial QA contact.
++
++=cut
++
++sub add_package {
++ my ($self, $name, $summary, $version, $maintainer, $contact) = @_;
++ return unless ref $self;
++
++ my $maintainer_id = $self-&gt;_get_maintainer_id($maintainer);
++ unless ($maintainer_id) {
++ carp &quot;Unknown maintainer $maintainer, aborting&quot;;
++ return;
++ }
++
++ my $contact_id = $self-&gt;_get_maintainer_id($contact);
++ unless ($contact_id) {
++ carp &quot;Unknown QA contact $contact, aborting&quot;;
++ return;
++ }
++
++ my $query = $self-&gt;{_queries}-&gt;{add_package};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{add_package});
++ $self-&gt;{_queries}-&gt;{add_package} = $query;
++ }
++
++ $query-&gt;execute($name, $summary);
++
++ my $package_id = $self-&gt;_get_package_id($name);
++
++ $self-&gt;_add_version($package_id, $version);
++ $self-&gt;_add_component(
++ $package_id,
++ 'package',
++ 'problem related to the package',
++ $maintainer_id,
++ $contact_id
++ );
++ $self-&gt;_add_component(
++ $package_id,
++ 'program',
++ 'problem related to the program',
++ $maintainer_id,
++ $contact_id
++ );
++}
++
++=head2 add_version($package, $version)
++
++Adds a new version to given package.
++
++=cut
++
++sub add_version {
++ my ($self, $package, $version) = @_;
++ return unless ref $self;
++
++ my $package_id = $self-&gt;_get_package_id($package);
++ $self-&gt;_add_version($package_id, $version);
++}
++
++sub _add_version {
++ my ($self, $package_id, $version) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{add_version};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{add_version});
++ $self-&gt;{_queries}-&gt;{add_version} = $query;
++ }
++
++ $query-&gt;execute($package_id, $version);
++}
++
++
++=head2 add_maintainer($name, $login, $password)
++
++Adds a new maintainer in the database, with given name, login and password.
++
++=cut
++
++sub add_maintainer {
++ my ($self, $name, $login, $pass) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{add_maintainer};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{add_maintainer});
++ $self-&gt;{_queries}-&gt;{add_maintainer} = $query;
++ }
++
++ $query-&gt;execute($login, $pass, $name, $default_flags);
++}
++
++sub _add_component {
++ my ($self, $package_id, $name, $description, $maintainer_id, $contact_id) = @_;
++
++ my $query = $self-&gt;{_queries}-&gt;{add_component};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{add_component});
++ $self-&gt;{_queries}-&gt;{add_component} = $query;
++ }
++
++ $query-&gt;execute($package_id, $name, $description, $maintainer_id, $contact_id);
++}
++
++=head2 del_package($package)
++
++Delete given package from database.
++
++=cut
++
++sub del_package {
++ my ($self, $package) = @_;
++ $self-&gt;_delete('del_package', $package);
++ $self-&gt;_delete('del_versions', $package);
++ $self-&gt;_delete('del_components', $package);
++}
++
++=head2 del_maintainer($maintainer)
++
++Delete given maintainer from database.
++
++=cut
++
++sub del_maintainer {
++ my ($self, $maintainer) = @_;
++ $self-&gt;_delete('del_maintainer', $maintainer);
++}
++
++sub _delete {
++ my ($self, $type, $value) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{$type};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{$type});
++ $self-&gt;{_queries}-&gt;{$type} = $query;
++ }
++
++ $query-&gt;execute($value);
++}
++
++=head2 reset_password(I&lt;$maintainer&gt;, I&lt;$password&gt;)
++
++Reset password of a maintainer to given password.
++
++=cut
++
++sub reset_password {
++ my ($self, $login, $pass) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{reset_password};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{reset_password});
++ $self-&gt;{_queries}-&gt;{reset_password} = $query;
++ }
++
++ $query-&gt;execute($pass, $login);
++}
++
++=head2 browse_packages($callback)
++
++Browse all packages from bugzilla, and execute given callback with name and
++maintainer as argument for each of them.
++
++=cut
++
++sub browse_packages {
++ my ($self, $callback) = @_;
++ return unless ref $self;
++
++ my $query = $self-&gt;{_queries}-&gt;{browse_packages};
++ unless ($query) {
++ $query = $self-&gt;{_dbh}-&gt;prepare($queries{browse_packages});
++ $self-&gt;{_queries}-&gt;{browse_packages} = $query;
++ }
++
++ $query-&gt;execute();
++
++ while (my @row = $query-&gt;fetchrow_array()) {
++ $callback-&gt;(@row);
++ }
++}
++
++# close database connection
++sub DESTROY {
++ my ($self) = @_;
++
++ foreach my $query (values %{$self-&gt;{_queries}}) {
++ $query-&gt;finish();
++ }
++
++ $self-&gt;{_dbh}-&gt;disconnect();
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Age.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Age.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Age.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,110 @@
++# $Id: Age.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Age;
++
++=head1 NAME
++
++Youri::Check::Input::Age - Check maximum age
++
++=head1 DESCRIPTION
++
++This plugin checks packages age, and report the ones exceeding maximum limit.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use DateTime;
++use DateTime::Format::Duration;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ arch
++ buildtime
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Age object.
++
++Specific parameters:
++
++=over
++
++=item max_age $age
++
++Maximum age allowed (default: 1 year)
++
++=item pattern $pattern
++
++Pattern used to describe age (default: %Y year)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ max_age =&gt; '1 year',
++ pattern =&gt; '%Y year',
++ @_
++ );
++
++ $self-&gt;{_format} = DateTime::Format::Duration-&gt;new(
++ pattern =&gt; $options{pattern}
++ );
++
++ $self-&gt;{_now} = DateTime-&gt;from_epoch(
++ epoch =&gt; time()
++ );
++
++ $self-&gt;{_max_age} = $options{max_age};
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $max_age_string = $media-&gt;max_age() ?
++ $media-&gt;max_age() :
++ $self-&gt;{_max_age};
++
++ my $max_age = $self-&gt;{_format}-&gt;parse_duration($max_age_string);
++
++ my $check = sub {
++ my ($package) = @_;
++
++ my $buildtime = DateTime-&gt;from_epoch(
++ epoch =&gt; $package-&gt;get_age()
++ );
++
++ my $age = $self-&gt;{_now}-&gt;subtract_datetime($buildtime);
++
++ if (DateTime::Duration-&gt;compare($age, $max_age) &gt; 0) {
++ my $date = $buildtime-&gt;strftime(&quot;%a %d %b %G&quot;);
++
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $package-&gt;get_arch(),
++ buildtime =&gt; $date
++ });
++ }
++ };
++ $media-&gt;traverse_headers($check);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/Iurt.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/Iurt.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/Iurt.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,117 @@
++# $Id: LBD.pm 574 2005-12-27 14:31:16Z guillomovitch $
++package Youri::Check::Input::Build::Source::Iurt;
++
++=head1 NAME
++
++Youri::Check::Input::Build::Source::Iurt - Iurt build log source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Build&gt; collects build logs
++available from a iurt build bot.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use LWP::UserAgent;
++use HTML::TokeParser;
++use base 'Youri::Check::Input::Build::Source';
++
++my %status = (
++ install_deps =&gt; 0,
++ build =&gt; 1,
++ binary_test =&gt; 2
++);
++
++my $pattern = '^('
++ . join('|', keys %status)
++ . ')_\S+-[^-]+-[^-]+\.src\.rpm\.\d+\.log$';
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Build::LBD object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL of logs for this iurt instance (default:
++<A HREF="http://qa.mandriva.com/build/iurt/cooker">http://qa.mandriva.com/build/iurt/cooker</A>)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://qa.mandriva.com/build/iurt/cooker">http://qa.mandriva.com/build/iurt/cooker</A>',
++ @_
++ );
++
++ $self-&gt;{_agent} = LWP::UserAgent-&gt;new();
++
++ # try to connect to base URL directly, and abort if not available
++ my $response = $self-&gt;{_agent}-&gt;head($options{url});
++ die &quot;Unavailable URL $options{url}: &quot; . $response-&gt;status_line()
++ unless $response-&gt;is_success();
++
++ $self-&gt;{_url} = $options{url};
++}
++
++sub fails {
++ my ($self, $name, $version, $release, $arch) = @_;
++
++ my $result;
++ my $url = &quot;$self-&gt;{_url}/$arch/log/$name-$version-$release.src.rpm&quot;;
++ print &quot;Fetching URL $url: &quot; if $self-&gt;{_verbose} &gt; 1;
++ my $response = $self-&gt;{_agent}-&gt;get($url);
++ print $response-&gt;status_line() . &quot;\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ if ($response-&gt;is_success()) {
++ my $parser = HTML::TokeParser-&gt;new(\$response-&gt;content());
++ while (my $token = $parser-&gt;get_tag('a')) {
++ my $href = $token-&gt;[1]-&gt;{href};
++ next unless $href =~ /$pattern/o;
++ my $status = $1;
++ if (
++ !$result-&gt;{status} ||
++ $status{$result-&gt;{status}} &lt; $status{$status}
++ ) {
++ $result-&gt;{status} = $status;
++ $result-&gt;{url} = $url . '/' . $href;
++ }
++ }
++ }
++
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch} = $result;
++
++ return $result-&gt;{status} &amp;&amp; $result-&gt;{status} ne 'binary_test';
++}
++
++sub status {
++ my ($self, $name, $version, $release, $arch) = @_;
++ return
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch}-&gt;{status};
++}
++
++sub url {
++ my ($self, $name, $version, $release, $arch) = @_;
++ return
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch}-&gt;{url};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/LBD.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/LBD.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source/LBD.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,135 @@
++# $Id: LBD.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Build::Source::LBD;
++
++=head1 NAME
++
++Youri::Check::Input::Build::Source::LBD - LBD build log source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Build&gt; collects build logs
++available from a LBD build bot.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use LWP::UserAgent;
++use HTML::TokeParser;
++use base 'Youri::Check::Input::Build::Source';
++
++my @status = qw/
++ OK
++ arch_excl
++ broken
++ cannot_be_installed
++ debug
++ dependency
++ file_not_found
++ multiarch
++ problem
++ unpackaged_files
++/;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Build::LBD object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL of logs for this LBD instance (default: <A HREF="http://eijk.homelinux.org/build">http://eijk.homelinux.org/build</A>)
++
++=item medias $medias
++
++List of medias monitored by this LBD instance
++
++=item archs $archs
++
++List of architectures monitored by this LBD instance
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://eijk.homelinux.org/build">http://eijk.homelinux.org/build</A>',
++ medias =&gt; undef,
++ archs =&gt; undef,
++ @_
++ );
++
++ my $agent = LWP::UserAgent-&gt;new();
++
++ # try to connect to base URL directly, and abort if not available
++ my $response = $agent-&gt;head($options{url});
++ die &quot;Unavailable URL $options{url}: &quot; . $response-&gt;status_line()
++ unless $response-&gt;is_success();
++
++ my $pattern = '^(\S+)-([^-]+)-([^-]+)(?:\.gz)?$';
++
++ foreach my $arch (@{$options{archs}}) {
++ foreach my $media (@{$options{medias}}) {
++ my $url_base = &quot;$options{url}/$arch/$media/BO&quot;;
++ foreach my $status (@status) {
++ my $url = &quot;$url_base/$status/&quot;;
++ print &quot;Fetching URL $url: &quot; if $self-&gt;{_verbose} &gt; 1;
++ my $response = $agent-&gt;get($url);
++ print $response-&gt;status_line() . &quot;\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ if ($response-&gt;is_success()) {
++ my $parser = HTML::TokeParser-&gt;new(\$response-&gt;content());
++ while (my $token = $parser-&gt;get_tag('a')) {
++ my $href = $token-&gt;[1]-&gt;{href};
++ next unless $href =~ /$pattern/o;
++ my $name = $1;
++ my $version = $2;
++ my $release = $3;
++ my $result;
++ $result-&gt;{status} = $status;
++ $result-&gt;{url} = $url . '/' . $href;
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch} = $result;
++ }
++ }
++ }
++ }
++ }
++}
++
++sub fails {
++ my ($self, $name, $version, $release, $arch) = @_;
++
++ my $status =
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch}-&gt;{status};
++
++ return $status &amp;&amp; $status ne 'OK' &amp;&amp; $status ne 'arch_excl';
++}
++
++sub status {
++ my ($self, $name, $version, $release, $arch) = @_;
++ return
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch}-&gt;{status};
++}
++
++sub url {
++ my ($self, $name, $version, $release, $arch) = @_;
++ return
++ $self-&gt;{_results}-&gt;{$name}-&gt;{$version}-&gt;{$release}-&gt;{$arch}-&gt;{url};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build/Source.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,109 @@
++# $Id: Source.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Build::Source;
++
++=head1 NAME
++
++Youri::Check::Input::Build::Source - Abstract build log source
++
++=head1 DESCRIPTION
++
++This abstract class defines the updates source interface for
++L&lt;Youri::Check::Input::Build&gt;.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Build object.
++
++No generic parameters (subclasses may define additional ones).
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '', # object id
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ @_
++ );
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 get_id()
++
++Returns source identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head2 fails($name, $version, $release, $arch)
++
++Returns true if build fails for package with given name, version and release on
++given architecture.
++
++=head2 status($name, $version, $release, $arch)
++
++Returns exact build status for package with given name, version and release on
++given architecture. It has to be called after fails().
++
++=head2 url($name, $version, $release, $arch)
++
++Returns URL of information source for package with given name, version and
++release on given architecture. It has to be called after fails().
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item fails
++
++=item status
++
++=item url
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Build.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,128 @@
++# $Id: Build.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Build;
++
++=head1 NAME
++
++Youri::Check::Input::Build - Check build outputs
++
++=head1 DESCRIPTION
++
++This plugin checks build outputs of packages, and report failures. Additional
++source plugins handle specific sources.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Utils;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ arch
++ bot
++ status
++ /;
++}
++
++sub links {
++ return qw/
++ status url
++ /;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Build object.
++
++Specific parameters:
++
++=over
++
++=item sources $sources
++
++Hash of source plugins definitions
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ sources =&gt; undef,
++ @_
++ );
++
++ croak &quot;No source defined&quot; unless $options{sources};
++ croak &quot;sources should be an hashref&quot; unless ref $options{sources} eq 'HASH';
++
++ foreach my $id (keys %{$options{sources}}) {
++ print &quot;Creating source $id\n&quot; if $options{verbose};
++ eval {
++ push(
++ @{$self-&gt;{_sources}},
++ create_instance(
++ 'Youri::Check::Input::Build::Source',
++ id =&gt; $id,
++ test =&gt; $options{test},
++ verbose =&gt; $options{verbose},
++ %{$options{sources}-&gt;{$id}}
++ )
++ );
++ # register monitored archs
++ $self-&gt;{_archs}-&gt;{$_}-&gt;{$id} = 1
++ foreach @{$options{sources}-&gt;{$id}-&gt;{archs}};
++ };
++ print STDERR &quot;Failed to create source $id: $@\n&quot; if $@;
++ }
++
++ croak &quot;no sources created&quot; unless @{$self-&gt;{_sources}};
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # this is a source media check only
++ return unless $media-&gt;get_type() eq 'source';
++
++ my $callback = sub {
++ my ($package) = @_;
++
++ my $name = $package-&gt;get_name();
++ my $version = $package-&gt;get_version();
++ my $release = $package-&gt;get_release();
++
++ foreach my $source (@{$self-&gt;{_sources}}) {
++ my $id = $source-&gt;get_id();
++ foreach my $arch (keys %{$self-&gt;{_archs}}) {
++ next unless $self-&gt;{_archs}-&gt;{$arch}-&gt;{$id};
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ bot =&gt; $id,
++ status =&gt; $source-&gt;status($name, $version, $release, $arch),
++ url =&gt; $source-&gt;url($name, $version, $release, $arch),
++ }) if $source-&gt;fails(
++ $name,
++ $version,
++ $release,
++ $arch,
++ );
++ }
++ }
++ };
++
++ $media-&gt;traverse_headers($callback);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Conflicts.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Conflicts.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Conflicts.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,231 @@
++# $Id: Conflicts.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Conflicts;
++
++=head1 NAME
++
++Youri::Check::Input::Conflicts - Check file conflicts
++
++=head1 DESCRIPTION
++
++This plugin checks packages files, and report conflict and duplications.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use constant;
++use Youri::Package;
++use base 'Youri::Check::Input';
++
++use constant TYPE_MASK =&gt; 0170000;
++use constant TYPE_DIR =&gt; 0040000;
++
++use constant PACKAGE =&gt; 0;
++use constant MODE =&gt; 1;
++use constant MD5SUM =&gt; 2;
++
++my $compatibility = {
++ x86_64 =&gt; 'i586',
++ i586 =&gt; 'x86_64',
++ sparc64 =&gt; 'sparc',
++ sparc =&gt; 'sparc64',
++ ppc64 =&gt; 'ppc',
++ ppc =&gt; 'ppc64'
++};
++
++sub columns {
++ return qw/
++ arch
++ file
++ error
++ level
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Conflicts object.
++
++No specific parameters.
++
++=cut
++
++sub prepare {
++ my ($self, @medias) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $index = sub {
++ my ($package) = @_;
++
++ # index files
++ foreach my $file ($package-&gt;get_files()) {
++ push(
++ @{$self-&gt;{_files}-&gt;{$file-&gt;[Youri::Package::FILE_NAME]}},
++ [ $package, $file-&gt;[Youri::Package::FILE_MODE], $file-&gt;[Youri::Package::FILE_MD5SUM] ]
++ );
++ }
++ };
++
++ foreach my $media (@medias) {
++ # don't index source media files
++ next unless $media-&gt;get_type() eq 'binary';
++
++ my $media_id = $media-&gt;get_id();
++ $self-&gt;{_medias}-&gt;{$media_id} = 1;
++ print STDERR &quot;Indexing media $media_id files\n&quot;
++ if $self-&gt;{_verbose};
++
++ $media-&gt;traverse_headers($index);
++ }
++}
++
++sub run {
++ my ($self, $media, $result) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # this is a binary media check only
++ return unless $media-&gt;get_type() eq 'binary';
++
++ my $check = sub {
++ my ($package) = @_;
++
++ return if $package-&gt;get_arch() eq 'src';
++
++ my $arch = $package-&gt;get_arch();
++ my $name = $package-&gt;get_name();
++
++ foreach my $file ($package-&gt;get_files()) {
++
++ my $found =
++ $self-&gt;{_files}-&gt;{$file-&gt;[Youri::Package::FILE_NAME]};
++
++ my @found = $found ? @$found : ();
++
++ foreach my $found (@found) {
++ next if $found-&gt;[PACKAGE] == $package;
++ next unless compatible($found-&gt;[PACKAGE], $package);
++ next if conflict($found-&gt;[PACKAGE], $package);
++ next if replace($found-&gt;[PACKAGE], $package);
++ if (
++ ($file-&gt;[Youri::Package::FILE_MODE] &amp; TYPE_MASK) == TYPE_DIR &amp;&amp;
++ ($found-&gt;[MODE] &amp; TYPE_MASK) == TYPE_DIR
++ ) {
++ $result-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;directory $file-&gt;[Youri::Package::FILE_NAME] duplicated with package &quot; . $found-&gt;[PACKAGE]-&gt;get_name(),
++ level =&gt; Youri::Check::Input::WARNING
++ }) unless $self-&gt;_directory_duplicate_exception(
++ $package,
++ $found-&gt;[PACKAGE],
++ $file
++ );
++ } else {
++ if ($found-&gt;[MD5SUM] eq $file-&gt;[Youri::Package::FILE_MD5SUM]) {
++ $result-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;file $file-&gt;[Youri::Package::FILE_NAME] duplicated with package &quot; . $found-&gt;[PACKAGE]-&gt;get_name(),
++ level =&gt; Youri::Check::Input::WARNING
++ }) unless $self-&gt;_file_duplicate_exception(
++ $package,
++ $found-&gt;[PACKAGE],
++ $file
++ );
++ } else {
++ $result-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;non-explicit conflict on file $file-&gt;[Youri::Package::FILE_NAME] with package &quot; . $found-&gt;[PACKAGE]-&gt;get_name(),
++ level =&gt; Youri::Check::Input::ERROR
++ }) unless $self-&gt;_file_conflict_exception(
++ $package,
++ $found-&gt;[PACKAGE],
++ $file
++ );
++ }
++ }
++ }
++ }
++ };
++
++ $media-&gt;traverse_headers($check);
++}
++
++# return true if $package1 is arch-compatible with $package2
++sub compatible {
++ my ($package1, $package2) = @_;
++
++ my $arch1 = $package1-&gt;get_arch();
++ my $arch2 = $package2-&gt;get_arch();
++
++ return 1 if $arch1 eq $arch2;
++
++ return 1 if $compatibility-&gt;{$arch1} &amp;&amp; $compatibility-&gt;{$arch1} eq $arch2;
++
++ return 0;
++}
++
++# return true if $package1 conflict with $package2
++# or the other way around
++sub conflict {
++ my ($package1, $package2) = @_;
++
++ my $name2 = $package2-&gt;get_name();
++
++ foreach my $conflict ($package1-&gt;get_conflicts()) {
++ return 1 if $conflict eq $name2;
++ }
++
++ my $name1 = $package1-&gt;get_name();
++
++ foreach my $conflict ($package2-&gt;get_conflicts()) {
++ return 1 if $conflict eq $name1;
++ }
++
++ return 0;
++}
++
++# return true if $package1 replace $package2
++sub replace {
++ my ($package1, $package2) = @_;
++
++
++ my $name1 = $package1-&gt;get_name();
++ my $name2 = $package2-&gt;get_name();
++
++ return 1 if $name1 eq $name2;
++
++ foreach my $obsolete ($package1-&gt;get_obsoletes()) {
++ return 1 if $obsolete-&gt;[Youri::Package::DEPENDENCY_NAME] eq $name2;
++ }
++
++ return 0;
++}
++
++sub _directory_duplicate_exception {
++ return 0;
++}
++
++sub _file_duplicate_exception {
++ return 0;
++}
++
++sub _file_conflict_exception {
++ return 0;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Dependencies.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Dependencies.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Dependencies.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,162 @@
++# $Id: Dependencies.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Dependencies;
++
++=head1 NAME
++
++Youri::Check::Input::Dependencies - Check dependencies consistency
++
++=head1 DESCRIPTION
++
++This class checks dependencies consistency.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Package;
++use base 'Youri::Check::Input';
++
++use constant MEDIA =&gt; 0;
++use constant RANGE =&gt; 1;
++
++sub columns {
++ return qw/
++ arch
++ file
++ error
++ level
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++sub prepare {
++ my ($self, @medias) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ foreach my $media (@medias) {
++ my $media_id = $media-&gt;get_id();
++ $self-&gt;{_medias}-&gt;{$media_id} = 1;
++ print STDERR &quot;Indexing media $media_id dependencies\n&quot;
++ if $self-&gt;{_verbose};
++
++ my $index = sub {
++ my ($package) = @_;
++
++ # index provides
++ foreach my $provide ($package-&gt;get_provides()) {
++ push(
++ @{$self-&gt;{_provides}-&gt;{$provide-&gt;[Youri::Package::DEPENDENCY_NAME]}},
++ [ $media_id, $provide-&gt;[Youri::Package::DEPENDENCY_RANGE] ]
++ );
++ }
++
++ # index files
++ foreach my $file ($package-&gt;get_files()) {
++ push(
++ @{$self-&gt;{_files}-&gt;{$file-&gt;[Youri::Package::FILE_NAME]}},
++ [ $media_id, undef ]
++ );
++ }
++ };
++ $media-&gt;traverse_headers($index);
++ }
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @allowed_ids = $media-&gt;allow_deps();
++
++ # abort unless all allowed medias are present
++ foreach my $id (@allowed_ids) {
++ unless ($self-&gt;{_medias}-&gt;{$id}) {
++ carp &quot;Missing media $id, aborting&quot;;
++ return;
++ }
++ }
++
++ # index allowed medias
++ my %allowed_ids = map { $_ =&gt; 1 } @allowed_ids;
++ my $allowed_ids = join(&quot;,&quot;, @allowed_ids);
++
++ my $class = $media-&gt;get_package_class();
++
++ my $check = sub {
++ my ($package) = @_;
++
++ my $arch = $package-&gt;get_arch();
++ my $name = $package-&gt;get_name();
++
++ foreach my $require ($package-&gt;get_requires()) {
++
++ my $found =
++ substr($require-&gt;[Youri::Package::DEPENDENCY_NAME], 0, 1) eq '/' ?
++ $self-&gt;{_files}-&gt;{$require-&gt;[Youri::Package::DEPENDENCY_NAME]} :
++ $self-&gt;{_provides}-&gt;{$require-&gt;[Youri::Package::DEPENDENCY_NAME]};
++
++ my @found = $found ? @$found : ();
++
++ if (!@found) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;$require-&gt;[Youri::Package::DEPENDENCY_NAME] not found&quot;,
++ level =&gt; Youri::Check::Input::ERROR
++ });
++ next;
++ }
++
++ my @found_in_media =
++ grep { $allowed_ids{$_-&gt;[MEDIA]} }
++ @found;
++
++ if (!@found_in_media) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;$require-&gt;[Youri::Package::DEPENDENCY_NAME] found in incorrect media $_-&gt;[MEDIA] (allowed $allowed_ids)&quot;,
++ level =&gt; Youri::Check::Input::ERROR
++ }) foreach @found;
++ next;
++ }
++
++ next unless $require-&gt;[Youri::Package::DEPENDENCY_RANGE];
++
++ my @found_in_range =
++ grep {
++ !$_-&gt;[RANGE] ||
++ $class-&gt;compare_ranges(
++ $require-&gt;[Youri::Package::DEPENDENCY_RANGE],
++ $_-&gt;[RANGE]
++ )
++ } @found_in_media;
++
++ if (!@found_in_range) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;$require-&gt;[Youri::Package::DEPENDENCY_NAME] found with incorrect range $_-&gt;[RANGE] (needed $require-&gt;[Youri::Package::DEPENDENCY_RANGE])&quot;,
++ level =&gt; Youri::Check::Input::ERROR
++ }) foreach @found_in_media;
++ next;
++ }
++ }
++ };
++
++ $media-&gt;traverse_headers($check);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/MandrivaConflicts.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/MandrivaConflicts.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/MandrivaConflicts.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,63 @@
++# $Id: Conflicts.pm 533 2005-10-20 07:08:03Z guillomovitch $
++package Youri::Check::Input::MandrivaConflicts;
++
++=head1 NAME
++
++Youri::Check::Input::MandrivaConflicts - Check file conflicts on Mandriva
++
++=head1 DESCRIPTION
++
++This class checks file conflicts between packages, taking care of Mandriva
++packaging policy.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Package;
++use base 'Youri::Check::Input::Conflicts';
++
++sub _directory_duplicate_exception {
++ my ($self, $package1, $package2, $file) = @_;
++
++ # allow shared directories between devel packages of different arch
++ return 1 if _multiarch_exception($package1, $package2);
++
++ # allow shared modules directories between perl packages
++ return 1 if
++ $file-&gt;[Youri::Package::FILE_NAME] =~ /^\/usr\/lib\/perl5\/vendor_perl\// &amp;&amp;
++ $file-&gt;[Youri::Package::FILE_NAME] !~ /^(auto|[^\/]+-linux)$/;
++
++ return 0;
++}
++
++sub _file_duplicate_exception {
++ my ($self, $package1, $package2, $file) = @_;
++
++ # allow shared files between devel packages of different arch
++ return 1 if _multiarch_exception($package1, $package2);
++
++ return 0;
++}
++
++sub _multiarch_exception {
++ my ($package1, $package2) = @_;
++
++ return 1 if
++ $package1-&gt;get_canonical_name() eq $package2-&gt;get_canonical_name()
++ &amp;&amp; $package1-&gt;get_name() =~ /-devel$/
++ &amp;&amp; $package2-&gt;get_name() =~ /-devel$/;
++
++ return 0;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Missing.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Missing.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Missing.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,138 @@
++package Youri::Check::Input::Missing;
++
++=head1 NAME
++
++Youri::Check::Input::Missing - Check components consistency
++
++=head1 DESCRIPTION
++
++This plugin checks consistency between package components, and report outdated
++ones.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use List::MoreUtils qw/all any/;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ component
++ arch
++ revision
++ error
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Missing object.
++
++No specific parameters.
++
++=cut
++
++sub prepare {
++ my ($self, @medias) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ $self-&gt;{_srcs} = ();
++ foreach my $media (@medias) {
++ # only index source media
++ next unless $media-&gt;get_type() eq 'source';
++
++ my $media_id = $media-&gt;get_id();
++ $self-&gt;{_medias}-&gt;{$media_id} = 1;
++ print STDERR &quot;Indexing media $media_id packages\n&quot; if $self-&gt;{_verbose};
++
++ my $index = sub {
++ my ($package) = @_;
++ $self-&gt;{_srcs}-&gt;{$media_id}-&gt;{$package-&gt;get_name()} =
++ $package-&gt;get_version() . '-' . $package-&gt;get_release();
++ };
++
++ $media-&gt;traverse_headers($index);
++ }
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # this is a binary media check only
++ return unless $media-&gt;get_type() eq 'binary';
++
++ my @allowed_ids = $media-&gt;allow_srcs();
++
++ # abort unless all allowed medias are present
++ foreach my $id (@allowed_ids) {
++ unless ($self-&gt;{_medias}-&gt;{$id}) {
++ carp &quot;Missing media $id, aborting&quot;;
++ return;
++ }
++ }
++
++ my $class = $media-&gt;get_package_class();
++
++ my $check_package = sub {
++ my ($package) = @_;
++ my $canonical_name = $package-&gt;get_canonical_name();
++
++ my $bin_revision =
++ $package-&gt;get_version() . '-' . $package-&gt;get_release();
++
++ my $src_revision;
++ foreach my $id (@allowed_ids) {
++ $src_revision = $self-&gt;{_srcs}-&gt;{$id}-&gt;{$canonical_name};
++ last if $src_revision;
++ }
++
++ if ($src_revision) {
++ # check if revision match
++ unless ($src_revision eq $bin_revision) {
++ if ($class-&gt;compare_versions($src_revision, $bin_revision) &gt; 0) {
++ # binary package is obsolete
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ component =&gt; $package-&gt;get_name(),
++ arch =&gt; $package-&gt;get_arch(),
++ revision =&gt; $bin_revision,
++ error =&gt; &quot;Obsolete binaries (source $src_revision found)&quot;,
++ });
++ } else {
++ # source package is obsolete
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ component =&gt; $package-&gt;get_canonical_name(),
++ arch =&gt; 'src',
++ revision =&gt; $src_revision,
++ error =&gt; &quot;Obsolete source (binaries $bin_revision found)&quot;,
++ });
++ }
++ }
++ } else {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ component =&gt; $package-&gt;get_name(),
++ arch =&gt; $package-&gt;get_arch(),
++ revision =&gt; $bin_revision,
++ error =&gt; &quot;Missing source package&quot;,
++ });
++ }
++ };
++
++ $media-&gt;traverse_headers($check_package);
++}
++
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Orphans.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Orphans.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Orphans.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,74 @@
++package Youri::Check::Input::Orphans;
++
++=head1 NAME
++
++Youri::Check::Input::Orphans - Check maintainance
++
++=head1 DESCRIPTION
++
++This plugin checks maintainance status of packages, and reports unmaintained
++ones.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ error
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Orphans object.
++
++No specific parameters.
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ resolver =&gt; undef,
++ @_
++ );
++
++ croak &quot;No resolver defined&quot; unless $options{resolver};
++
++ $self-&gt;{_resolver} = $options{resolver};
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # this is a source media check only
++ return unless $media-&gt;get_type() eq 'source';
++
++ my $check = sub {
++ my ($package) = @_;
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ error =&gt; &quot;unmaintained package&quot;
++ }) unless $self-&gt;{_resolver}-&gt;get_maintainer($package);
++ };
++
++ $media-&gt;traverse_headers($check);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Rpmlint.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Rpmlint.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Rpmlint.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,113 @@
++# $Id: Rpmlint.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Rpmlint;
++
++=head1 NAME
++
++Youri::Check::Input::Rpmlint - Check packages with rpmlint
++
++=head1 DESCRIPTION
++
++This plugins checks packages with rpmlint, and reports output.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ arch
++ file
++ error
++ level
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Rpmlint object.
++
++Specific parameters:
++
++=over
++
++=item path $path
++
++Path to the rpmlint executable (default: /usr/bin/rpmlint)
++
++=item config $config
++
++Specific rpmlint configuration.
++
++=back
++
++=cut
++
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ path =&gt; '/usr/bin/rpmlint', # path to rpmlint
++ config =&gt; '', # default rpmlint configuration
++ @_
++ );
++
++ $self-&gt;{_path} = $options{path};
++ $self-&gt;{_config} = $options{config};
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $config = $media-&gt;rpmlint_config() ?
++ $media-&gt;rpmlint_config() :
++ $self-&gt;{_config};
++
++ my $check = sub {
++ my ($file, $package) = @_;
++
++ my $arch = $package-&gt;get_arch();
++ my $name = $package-&gt;get_name();
++
++ my $command = &quot;$self-&gt;{_path} -f $config $file&quot;;
++ open(RPMLINT, &quot;$command |&quot;) or die &quot;Can't run $command: $!&quot;;
++ while (&lt;RPMLINT&gt;) {
++ chomp;
++ if (/^E: \Q$name\E (.+)/) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; $1,
++ level =&gt; Youri::Check::Input::ERROR
++ });
++ } elsif (/^W: \Q$name\E (.+)/) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; $1,
++ level =&gt; Youri::Check::Input::WARNING
++ });
++ }
++ }
++ close(RPMLINT);
++ };
++
++ $media-&gt;traverse_files($check);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Signature.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Signature.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Signature.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,96 @@
++# $Id: Rpmlint.pm 567 2005-12-12 21:24:56Z guillomovitch $
++package Youri::Check::Input::Signature;
++
++=head1 NAME
++
++Youri::Check::Input::Signature - Check signature
++
++=head1 DESCRIPTION
++
++This plugin checks packages signature, and report unsigned ones.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ arch
++ file
++ error
++ /;
++}
++
++sub links {
++ return qw//;
++}
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Signature object.
++
++Specific parameters:
++
++=over
++
++=item key $key
++
++Expected GPG key identity
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ key =&gt; '',
++ @_
++ );
++
++ $self-&gt;{_key} = $options{key};
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $check = sub {
++ my ($package) = @_;
++
++ my $arch = $package-&gt;get_arch();
++ my $name = $package-&gt;get_name();
++
++ my $key = $package-&gt;get_gpg_key();
++
++ if (!$key) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;unsigned package $name&quot;
++ });
++ } elsif ($key ne $self-&gt;{_key}) {
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ arch =&gt; $arch,
++ file =&gt; $name,
++ error =&gt; &quot;invalid key id $key for package $name (allowed $self-&gt;{_key})&quot;
++ });
++ }
++
++ };
++
++ $media-&gt;traverse_headers($check);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/CPAN.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/CPAN.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/CPAN.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,75 @@
++# $Id: CPAN.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::CPAN;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::CPAN - CPAN updates source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from CPAN.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::CPAN object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to CPAN full modules list (default:
++<A HREF="http://www.cpan.org/modules/01modules.index.html">http://www.cpan.org/modules/01modules.index.html</A>)
++
++=back
++
++=cut
++
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://www.cpan.org/modules/01modules.index.html">http://www.cpan.org/modules/01modules.index.html</A>',
++ @_
++ );
++
++ my $versions;
++ open(INPUT, &quot;GET $options{url} |&quot;) or croak &quot;Can't fetch $options{url}: $!&quot;;
++ while (&lt;INPUT&gt;) {
++ next unless $_ =~ /&gt;([\w-]+)-([\d\.]+)\.tar\.gz&lt;\/a&gt;/;
++ $versions-&gt;{$1} = $2;
++ }
++ close(INPUT);
++
++ $self-&gt;{_versions} = $versions;
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return &quot;<A HREF="http://search.cpan.org/dist/$name">http://search.cpan.org/dist/$name</A>&quot;;
++}
++
++sub _name {
++ my ($self, $name) = @_;
++ $name =~ s/^perl-//g;
++ return $name;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Debian.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Debian.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Debian.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,82 @@
++# $Id: Debian.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::Debian;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::Debian - Debian source for updates
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++ available from Debian.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::Debian object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to Debian mirror content file (default: <A HREF="http://ftp.debian.org/ls-lR.gz">http://ftp.debian.org/ls-lR.gz</A>)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://ftp.debian.org/ls-lR.gz">http://ftp.debian.org/ls-lR.gz</A>',
++ @_
++ );
++
++ my $versions;
++ open(INPUT, &quot;GET $options{url} | zcat |&quot;) or croak &quot;Can't fetch $options{url}: $!&quot;;
++ while (my $line = &lt;INPUT&gt;) {
++ next unless $line =~ /([\w\.-]+)_([\d\.]+)\.orig\.tar\.gz$/;
++ my $name = $1;
++ my $version = $2;
++ $versions-&gt;{$name} = $version;
++ }
++ close(INPUT);
++
++ $self-&gt;{_versions} = $versions;
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return &quot;<A HREF="http://packages.debian.org/$name">http://packages.debian.org/$name</A>&quot;;
++}
++
++sub _name {
++ my ($self, $name) = @_;
++
++ if ($name =~ /^(perl|ruby)-([-\w]+)$/) {
++ $name = lc(&quot;lib$2-$1&quot;);
++ } elsif ($name =~ /^apache-([-\w]+)$/) {
++ $name = &quot;libapache-$1&quot;;
++ $name =~ s/_/-/g;
++ }
++
++ return $name;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Fedora.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Fedora.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Fedora.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,63 @@
++# $Id: Fedora.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::Fedora;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::Fedora - Fedora updates source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from Fedora.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::Fedora object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to Fedora development SRPMS directory (default:
++<A HREF="http://fr.rpmfind.net/linux/fedora/core/development/SRPMS">http://fr.rpmfind.net/linux/fedora/core/development/SRPMS</A>)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://fr.rpmfind.net/linux/fedora/core/development/SRPMS">http://fr.rpmfind.net/linux/fedora/core/development/SRPMS</A>',
++ @_
++ );
++
++ my $versions;
++ open(INPUT, &quot;GET $options{url} |&quot;) or die &quot;Can't fetch $options{url}: $!\n&quot;;
++ while (&lt;INPUT&gt;) {
++ next unless $_ =~ /&gt;([\w-]+)-([\w\.]+)-[\w\.]+\.src\.rpm&lt;\/a&gt;/;
++ $versions-&gt;{$1} = $2;
++ }
++ close(INPUT);
++
++ $self-&gt;{_versions} = $versions;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Freshmeat.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Freshmeat.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Freshmeat.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,111 @@
++# $Id: Freshmeat.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::Freshmeat;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::Freshmeat - Freshmeat source for updates
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from Freshmeat.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use XML::Twig;
++use LWP::UserAgent;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::Freshmeat
++object.
++
++Specific parameters:
++
++=over
++
++=item preload true/false
++
++Allows to load full Freshmeat catalogue at once instead of checking each software independantly (default: false)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ preload =&gt; 0,
++ @_
++ );
++
++ if ($options{preload}) {
++ my $versions;
++
++ my $project = sub {
++ my ($twig, $project) = @_;
++ my $name = $project-&gt;first_child('projectname_short')-&gt;text();
++ my $version = $project-&gt;first_child('latest_release')-&gt;first_child('latest_release_version')-&gt;text();
++ $versions-&gt;{$name} = $version;
++ $twig-&gt;purge();
++ };
++
++ my $twig = XML::Twig-&gt;new(
++ TwigRoots =&gt; { project =&gt; $project }
++ );
++
++ my $url = '<A HREF="http://download.freshmeat.net/backend/fm-projects.rdf.bz2">http://download.freshmeat.net/backend/fm-projects.rdf.bz2</A>';
++
++ open(INPUT, &quot;GET $url | bzcat |&quot;) or die &quot;Can't fetch $url: $!\n&quot;;
++ $twig-&gt;parse(\*INPUT);
++ close(INPUT);
++
++ $self-&gt;{_versions} = $versions;
++ }
++}
++
++sub _version {
++ my ($self, $name) = @_;
++
++ if ($self-&gt;{_versions}) {
++ return $self-&gt;{_versions}-&gt;{$name};
++ } else {
++ my $version;
++
++ my $latest_release_version = sub {
++ $version = $_[1]-&gt;text();
++ };
++
++ my $twig = XML::Twig-&gt;new(
++ TwigRoots =&gt; { latest_release_version =&gt; $latest_release_version }
++ );
++
++ my $url = &quot;<A HREF="http://freshmeat.net/projects-xml/$name">http://freshmeat.net/projects-xml/$name</A>&quot;;
++
++ open(INPUT, &quot;GET $url |&quot;) or die &quot;Can't fetch $url: $!\n&quot;;
++ # freshmeat answer with an HTML page when project doesn't exist
++ $twig-&gt;safe_parse(\*INPUT);
++ close(INPUT);
++
++ return $version;
++ }
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return &quot;<A HREF="http://freshmeat.net/projects/$name">http://freshmeat.net/projects/$name</A>&quot;;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/GNOME.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/GNOME.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/GNOME.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,104 @@
++# $Id$
++package Youri::Check::Input::Updates::Source::GNOME;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::GNOME - GNOME updates source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from GNOME.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use LWP::UserAgent;
++use HTML::TokeParser;
++use List::MoreUtils 'any';
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::Gnome object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to GNOME sources directory (default:
++<A HREF="http://fr2.rpmfind.net/linux/gnome.org/sources">http://fr2.rpmfind.net/linux/gnome.org/sources</A>)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://fr2.rpmfind.net/linux/gnome.org/sources/">http://fr2.rpmfind.net/linux/gnome.org/sources/</A>', # default url
++ # We use HTTP as it offers a better sorting (1.2 &lt; 1.10)
++ @_
++ );
++
++ $self-&gt;{_agent} = LWP::UserAgent-&gt;new();
++ my $response = $self-&gt;{_agent}-&gt;get($options{url});
++ if($response-&gt;is_success()) {
++ my $parser = HTML::TokeParser-&gt;new(\$response-&gt;content());
++ while (my $token = $parser-&gt;get_tag('a')) {
++ my $href = $token-&gt;[1]-&gt;{href};
++ next unless $href =~ /^([-\w]+)\/$/o;
++ $self-&gt;{_names}-&gt;{$1} = 1;
++ }
++ }
++
++ $self-&gt;{_url} = $options{url};
++}
++
++sub _version {
++ my ($self, $name) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return unless $self-&gt;{_names}-&gt;{$name};
++
++ my $response = $self-&gt;{_agent}-&gt;get(&quot;$self-&gt;{_url}/$name/&quot;);
++ if($response-&gt;is_success()) {
++ my $major;
++ my $parser = HTML::TokeParser-&gt;new(\$response-&gt;content());
++ while (my $token = $parser-&gt;get_tag('a')) {
++ my $href = $token-&gt;[1]-&gt;{href};
++ next unless $href =~ /^([.\d]+)\/$/o;
++ $major = $1;
++ }
++ return unless $major;
++
++ $response = $self-&gt;{_agent}-&gt;get(&quot;$self-&gt;{_url}/$name/$major/&quot;);
++ if($response-&gt;is_success()) {
++ $parser = HTML::TokeParser-&gt;new(\$response-&gt;content());
++ while (my $token = $parser-&gt;get_tag('a')) {
++ my $href = $token-&gt;[1]-&gt;{href};
++ next unless $href =~ /^LATEST-IS-([.\d]+)$/o;
++ return $1;
++ }
++ }
++ }
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return $self-&gt;{_url}.&quot;$name/&quot;;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Gentoo.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Gentoo.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Gentoo.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,75 @@
++# $Id: Gentoo.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::Gentoo;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::Gentoo - Gentoo updates source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from Gentoo.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use LWP::Simple;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::Gentoo object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to Gentoo snapshots directory (default:
++<A HREF="http://gentoo.mirror.sdv.fr/snapshots">http://gentoo.mirror.sdv.fr/snapshots</A>)
++
++=back
++
++=cut
++
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://gentoo.mirror.sdv.fr/snapshots">http://gentoo.mirror.sdv.fr/snapshots</A>', # default URL
++ @_
++ );
++
++ my $versions;
++ my $content = get($options{url});
++ my $file;
++ while ($content =~ /&lt;A HREF=&quot;(portage-\d{8}.tar.bz2)&quot;&gt;/g) {
++ $file = $1;
++ }
++ open(INPUT, &quot;GET $options{url}/$file | tar tjf - |&quot;) or croak &quot;Can't fetch $options{url}/$file: $!&quot;;
++ while (my $line = &lt;INPUT&gt;) {
++ next unless $line =~ /.*\/([\w-]+)-([\d\.]+)(:?-r\d)?\.ebuild$/;
++ $versions-&gt;{$1} = $2;
++ }
++ close(INPUT);
++
++ $self-&gt;{_versions} = $versions;
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return &quot;<A HREF="http://packages.gentoo.org/search/?sstring=$name">http://packages.gentoo.org/search/?sstring=$name</A>&quot;;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/NetBSD.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/NetBSD.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/NetBSD.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,75 @@
++# $Id$
++package Youri::Check::Input::Updates::Source::NetBSD;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::NetBSD - NetBSD source for updates
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++ available from NetBSD.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Input::Updates::Source';
++use IO::Ftp;
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::NetBSD object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to NetBSD mirror content file, without ftp: (default: //ftp.free.fr/mirrors/ftp.netbsd.org/NetBSD-current/pkgsrc/README-all.html)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '//ftp.free.fr/mirrors/ftp.netbsd.org/NetBSD-current/pkgsrc/README-all.html',
++ @_
++ );
++
++ my $versions;
++ my $urls;
++
++ my $in = IO::Ftp-&gt;new('&lt;',$options{url}) or croak &quot;Can't fetch $options{url}: $!&quot;;
++ while (my $line = &lt;$in&gt;) {
++ next unless $line =~ /&lt;!-- (.+)-([^-]*?)(nb\d*)? \(for sorting\).*?href=&quot;([^&quot;]+)&quot;/;
++ my $name = $1;
++ my $version = $2;
++ $versions-&gt;{$name} = $version;
++ $urls-&gt;{$name} = $4;
++ }
++ close($in);
++
++ $self-&gt;{_versions} = $versions;
++ $self-&gt;{_urls} = $urls;
++ $self-&gt;{_url} = $options{url};
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return $self-&gt;{_urls}-&gt;{$name};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/RAA.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/RAA.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/RAA.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,121 @@
++# $Id: RAA.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::RAA;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::RAA - RAA updates source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from RAA.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use SOAP::Lite;
++use List::MoreUtils 'any';
++use Youri::Package;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::RAA object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++URL to RAA SOAP interface (default:
++<A HREF="http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4">http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4</A>)
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '<A HREF="http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4/">http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4/</A>',
++ @_
++ );
++
++ my $raa = SOAP::Lite-&gt;service($options{url})
++ or croak &quot;Can't connect to $options{url}&quot;;
++
++ $self-&gt;{_raa} = $raa;
++ $self-&gt;{_names} = $raa-&gt;names();
++}
++
++sub get_version {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $name;
++ if (ref $package &amp;&amp; $package-&gt;isa('Youri::Package')) {
++ # don't bother checking for non-ruby packages
++ if (
++ any { $_-&gt;[Youri::Package::DEPENDENCY_NAME] =~ /ruby/ }
++ $package-&gt;get_requires()
++ ) {
++ $name = $package-&gt;get_canonical_name();
++ } else {
++ return;
++ }
++ } else {
++ $name = $package;
++ }
++
++ # translate in grabber namespace
++ $name = $self-&gt;get_name($name);
++
++ # return if aliased to null
++ return unless $name;
++
++ # susceptible to throw exception for timeout
++ eval {
++ my $gem = $self-&gt;{_raa}-&gt;gem($name);
++ return $gem-&gt;{project}-&gt;{version} if $gem;
++ };
++
++ return;
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return &quot;<A HREF="http://raa.ruby-lang.org/project/$name/">http://raa.ruby-lang.org/project/$name/</A>&quot;;
++}
++
++sub _name {
++ my ($self, $name) = @_;
++
++ if (ref $self) {
++ my $match = $name;
++ $match =~ s/^ruby[-_]//;
++ $match =~ s/[-_]ruby$//;
++ my @results =
++ grep { /^(ruby[-_])?\Q$match\E([-_]ruby)$/ }
++ @{$self-&gt;{_names}};
++ if (@results) {
++ return $results[0];
++ } else {
++ return $name;
++ }
++ } else {
++ return $name;
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Sourceforge.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Sourceforge.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source/Sourceforge.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,103 @@
++# $Id: Sourceforge.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source::Sourceforge;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source::Sourceforge - Sourceforge updates source
++
++=head1 DESCRIPTION
++
++This source plugin for L&lt;Youri::Check::Input::Updates&gt; collects updates
++available from Sourceforge.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use LWP::UserAgent;
++use HTML::TokeParser;
++use Youri::Check::Input::Updates;
++use base 'Youri::Check::Input::Updates::Source';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates::Source::Sourceforge
++object.
++
++No specific parameters.
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ @_
++ );
++
++ $self-&gt;{_agent} = LWP::UserAgent-&gt;new();
++}
++
++sub get_version {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $name;
++ if (ref $package &amp;&amp; $package-&gt;isa('Youri::Package')) {
++ # don't bother checking for packages without sf.net URL
++ my $url = $package-&gt;get_url();
++ if (
++ $url =~ /http:\/\/(.*)\.sourceforge\.net/ ||
++ $url =~ /http:\/\/.*sourceforge\.net\/projects\/([^\/]+)/
++ ) {
++ $name = $package-&gt;get_canonical_name();
++ } else {
++ return;
++ }
++ } else {
++ $name = $package;
++ }
++
++ # translate in grabber namespace
++ $name = $self-&gt;get_name($name);
++
++ # return if aliased to null
++ return unless $name;
++
++ my $response = $self-&gt;{_agent}-&gt;get($self-&gt;_url($name));
++ if($response-&gt;is_success()) {
++ my $max = 0;
++ my $parser = HTML::TokeParser-&gt;new(\$response-&gt;content());
++ while (my $token = $parser-&gt;get_tag('a')) {
++ my $text = $parser-&gt;get_trimmed_text(&quot;/$token-&gt;[0]&quot;);
++ next unless $text;
++ next unless $text =~ /^
++ \Q$name\E
++ [._-]?($Youri::Check::Input::Updates::VERSION_REGEXP)
++ [._-]?(w(?:in)?(?:32)?|mips|sparc|bin|ppc|i\d86|src|sources?)?
++ \.(?:tar\.(?:gz|bz2)|tgz|zip)
++ $/iox;
++ my $version = $1;
++ my $arch = $2;
++ next if $arch &amp;&amp; $arch !~ /(src|sources?)/;
++ $max = $version if Youri::Check::Input::Updates::is_newer($version, $max);
++ }
++ return $max if $max;
++ }
++ return;
++}
++
++sub _url {
++ my ($self, $name) = @_;
++ return &quot;<A HREF="http://prdownloads.sourceforge.net/$name/">http://prdownloads.sourceforge.net/$name/</A>&quot;;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates/Source.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,240 @@
++# $Id: Source.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates::Source;
++
++=head1 NAME
++
++Youri::Check::Input::Updates::Source - Abstract updates source
++
++=head1 DESCRIPTION
++
++This abstract class defines the updates source interface for
++L&lt;Youri::Check::Input::Updates&gt;.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates object.
++
++Generic parameters (subclasses may define additional ones):
++
++=over
++
++=item aliases $aliases
++
++Hash of package aliases.
++
++=back
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '', # object id
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ aliases =&gt; undef, # aliases
++ resolver =&gt; undef, # maintainer resolver
++ preferences =&gt; undef, # maintainer preferences
++ check_id =&gt; '', # parent check id
++ @_
++ );
++
++ if ($options{aliases}) {
++ croak &quot;aliases should be an hashref&quot; unless ref $options{aliases} eq 'HASH';
++ }
++ if ($options{resolver}) {
++ croak &quot;resolver should be a Youri::Check::Maintainer::Resolver object&quot; unless $options{resolver}-&gt;isa(&quot;Youri::Check::Maintainer::Resolver&quot;);
++ }
++ if ($options{preferences}) {
++ croak &quot;preferences should be a Youri::Check::Maintainer::Preferences object&quot; unless $options{preferences}-&gt;isa(&quot;Youri::Check::Maintainer::Preferences&quot;);
++ }
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ _aliases =&gt; $options{aliases},
++ _resolver =&gt; $options{resolver},
++ _preferences =&gt; $options{preferences},
++ _check_id =&gt; $options{check_id},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++Excepted explicit statement, package name is expressed with Mandriva naming
++conventions.
++
++=head2 get_id()
++
++Returns source identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head2 get_version($package)
++
++Returns available version for given package, which can be either a full
++L&lt;Youri::Package&gt; object or just a package name.
++
++=cut
++
++sub get_version {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $name = ref $package &amp;&amp; $package-&gt;isa('Youri::Package') ?
++ $package-&gt;get_canonical_name() :
++ $package;
++
++ # translate in grabber namespace
++ $name = $self-&gt;get_name($name);
++
++ # return if aliased to null
++ return unless $name;
++
++ # return subclass computation
++ return $self-&gt;_version($name);
++}
++
++=head2 get_url($name)
++
++Returns the URL of information source for package with given name.
++
++=cut
++
++sub get_url {
++ my ($self, $name) = @_;
++
++ # retun subclass computation
++ return $self-&gt;_url($self-&gt;get_name($name));
++}
++
++=head2 name($name)
++
++Returns name converted to specific source naming conventions for package with given name.
++
++=cut
++
++sub get_name {
++ my ($self, $name) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # return config aliases if it exists
++ if ($self-&gt;{_aliases} ) {
++ return $self-&gt;{_aliases}-&gt;{$name} if exists $self-&gt;{_aliases}-&gt;{$name};
++ }
++
++ # return maintainer aliases if it exists
++ if ($self-&gt;{_resolver} &amp;&amp; $self-&gt;{_preferences}) {
++ my $maintainer = $self-&gt;{_resolver}-&gt;get_maintainer($name);
++ if ($maintainer) {
++ my $aliases = $self-&gt;{_preferences}-&gt;get_preference(
++ $maintainer,
++ $self-&gt;{_check_id},
++ 'aliases'
++ );
++ if ($aliases) {
++ if ($aliases-&gt;{all}) {
++ return $aliases-&gt;{all}-&gt;{$name} if exists $aliases-&gt;{all}-&gt;{$name};
++ }
++ if ($aliases-&gt;{$self-&gt;{_id}}) {
++ return $aliases-&gt;{$self-&gt;{_id}}-&gt;{$name} if exists $aliases-&gt;{$self-&gt;{_id}}-&gt;{$name};
++ }
++ }
++ }
++ }
++
++ # return return subclass computation
++ return $self-&gt;_name($name);
++}
++
++=head2 _version($name)
++
++Hook called by default B&lt;version()&gt; implementation after name translation.
++
++=cut
++
++sub _version {
++ my ($self, $name) = @_;
++ return $self-&gt;{_versions}-&gt;{$name};
++}
++
++=head2 _url($name)
++
++Hook called by default B&lt;url()&gt; implementation after name translation.
++
++=cut
++
++sub _url {
++ my ($self, $name) = @_;
++ return undef;
++}
++
++=head2 _name($name)
++
++Hook called by default B&lt;name()&gt; implementation if given name was not found in
++the aliases.
++
++=cut
++
++sub _name {
++ my ($self, $name) = @_;
++ return $name;
++}
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item version
++
++As an alternative, the B&lt;_version()&gt; hook can be implemented.
++
++=item url
++
++As an alternative, the &lt;_url()&gt; hook can be implemented.
++
++=item name
++
++As an alternative, the B&lt;_name()&gt; hook can be implemented.
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input/Updates.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,275 @@
++# $Id: Updates.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input::Updates;
++
++=head1 NAME
++
++Youri::Check::Input::Updates - Check available updates
++
++=head1 DESCRIPTION
++
++This plugin checks available updates for packages, and report existing ones.
++Additional source plugins handle specific sources.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Memoize;
++use Youri::Utils;
++use base 'Youri::Check::Input';
++
++sub columns {
++ return qw/
++ current
++ available
++ source
++ /;
++}
++
++sub links {
++ return qw/
++ source url
++ /;
++}
++
++memoize('is_newer');
++
++our $VERSION_REGEXP = 'v?([\d._-]*\d)[._ -]*(?:(alpha|beta|pre|rc|pl|rev|cvs|svn|[a-z])[_ -.]*([\d.]*))?([_ -.]*.*)';
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input::Updates object.
++
++Specific parameters:
++
++=over
++
++=item aliases $aliases
++
++Hash of global aliases definitions
++
++=item sources $sources
++
++Hash of source plugins definitions
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ aliases =&gt; undef,
++ sources =&gt; undef,
++ @_
++ );
++
++ croak &quot;No source defined&quot; unless $options{sources};
++ croak &quot;sources should be an hashref&quot; unless ref $options{sources} eq 'HASH';
++ if ($options{aliases}) {
++ croak &quot;aliases should be an hashref&quot; unless ref $options{aliases} eq 'HASH';
++ }
++
++ foreach my $id (keys %{$options{sources}}) {
++ print &quot;Creating source $id\n&quot; if $options{verbose};
++ eval {
++ # add global aliases if defined
++ if ($options{aliases}) {
++ foreach my $alias (keys %{$options{aliases}}) {
++ $options{sources}-&gt;{$id}-&gt;{aliases}-&gt;{$alias} =
++ $options{aliases}-&gt;{$alias}
++ }
++ }
++
++ push(
++ @{$self-&gt;{_sources}},
++ create_instance(
++ 'Youri::Check::Input::Updates::Source',
++ id =&gt; $id,
++ test =&gt; $options{test},
++ verbose =&gt; $options{verbose},
++ check_id =&gt; $options{id},
++ resolver =&gt; $options{resolver},
++ preferences =&gt; $options{preferences},
++ %{$options{sources}-&gt;{$id}}
++ )
++ );
++ };
++ print STDERR &quot;Failed to create source $id: $@\n&quot; if $@;
++ }
++
++ croak &quot;no sources created&quot; unless @{$self-&gt;{_sources}};
++}
++
++sub run {
++ my ($self, $media, $resultset) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # this is a source media check only
++ return unless $media-&gt;get_type() eq 'source';
++
++ my $callback = sub {
++ my ($package) = @_;
++
++ my $name = $package-&gt;get_name();
++ my $version = $package-&gt;get_version();
++ my $release = $package-&gt;get_release();
++
++ # compute version with rpm subtilities related to preversions
++ my $current_version = ($release =~ /^0\.(\w+)\.\w+$/) ?
++ $version . $1 :
++ $version;
++ my $current_stable = is_stable($current_version);
++
++ my ($max_version, $max_source, $max_url);
++ $max_version = $current_version;
++
++ foreach my $source (@{$self-&gt;{_sources}}) {
++ my $available_version = $source-&gt;get_version($package);
++ if (
++ $available_version &amp;&amp;
++ (! $current_stable || is_stable($available_version)) &amp;&amp;
++ is_newer($available_version, $max_version)
++ ) {
++ $max_version = $available_version;
++ $max_source = $source-&gt;get_id();
++ $max_url = $source-&gt;get_url($name);
++ }
++ }
++ $resultset-&gt;add_result($self-&gt;{_id}, $media, $package, {
++ current =&gt; $current_version,
++ available =&gt; $max_version,
++ source =&gt; $max_source,
++ url =&gt; $max_url
++ }) if $max_version ne $current_version;
++ };
++
++ $media-&gt;traverse_headers($callback);
++}
++
++=head2 is_stable($version)
++
++Checks if given version is stable.
++
++=cut
++
++sub is_stable {
++ my ($version) = @_;
++ return $version !~ /alpha|beta|pre|rc|cvs|svn/i;
++
++}
++
++=head2 is_newer($v1, $v2)
++
++Checks if $v1 is newer than $v2.
++
++This function will return true only if we are sure this is newer (and not equal).
++If we can't compare the versions, a warning will be displayed.
++
++=cut
++
++sub is_newer {
++ my ($v1, $v2) = @_;
++ return 0 if $v1 eq $v2;
++
++ # Reject strange cases
++ # One is a large number (like date or revision) and the other one not, or
++ # has different length
++ if (($v1 =~ /^\d{3,}$/ || $v2 =~ /^\d{3,}$/)
++ &amp;&amp; (join('0',split(/\d/, $v1.&quot;X&quot;)) ne join('0',split(/\d/, $v2.&quot;X&quot;)))) {
++ carp &quot;strange : $v1 vs $v2&quot;;
++ return 0;
++ }
++
++ my %states = (alpha=&gt;-4,beta=&gt;-3,pre=&gt;-2,rc=&gt;-1);
++ my $i; $states{$_} = ++$i foreach 'a'..'z';
++
++ if ($v1 =~ /^[\d._-]+$/ &amp;&amp; $v2 =~ /^[\d._-]+$/) {
++ my @v1 = split(/[._-]/, $v1);
++ my @v2 = split(/[._-]/, $v2);
++ if (join(''<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">, at v1</A>) eq (join ''<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">, at v2</A>)) {
++ # Might be something like 1.2.0 vs 1.20, usual false positive
++ carp &quot;strange : $v1 vs $v2&quot;;
++ return 0;
++ }
++ for my $i (0 .. $#v1) {
++ $v1[$i] ||= 0;
++ $v2[$i] ||= 0;
++ return 1 if $v1[$i] &gt; $v2[$i];
++ return 0 if $v1[$i] &lt; $v2[$i];
++ }
++ # When v2 is longer than v1 but start the same, v1 &lt;= v2
++ return 0;
++ } else {
++ my ($num1, $state1, $statenum1, $other1, $num2, $state2, $statenum2, $other2);
++
++ if ($v1 =~ /^$VERSION_REGEXP$/io) {
++ ($num1, $state1, $statenum1, $other1) = ($1, &quot;\L$2&quot;, $3, $4);
++ } else {
++ carp &quot;unknown version format $v1&quot;;
++ return 0;
++ }
++
++ if ($v2 =~ /^$VERSION_REGEXP$/io) {
++ ($num2, $state2, $statenum2, $other2) = ($1, &quot;\L$2&quot;, $3, $4);
++ } else {
++ carp &quot;unknown version format $v2&quot;;
++ return 0;
++ }
++
++ # If we know the format of only one, there might be an issue, do nothing
++
++ if (($other1 &amp;&amp; ! $other2 )||(!$other1 &amp;&amp; $other2 )) {
++ carp &quot;can't compare $v1 vs $v2&quot;;
++ return 0;
++ }
++
++ return 1 if is_newer($num1, $num2);
++ return 0 unless $num1 eq $num2;
++
++ # The numeric part is the same but not the end
++
++ if ($state1 eq '') {
++ return 1 if $state2 =~ /^(alpha|beta|pre|rc)/;
++ return 0 if $state2 =~ /^([a-z]|pl)$/;
++ carp &quot;unknown state format $state2&quot;;
++ return 0;
++ }
++
++ if ($state2 eq '') {
++ return 0 if $state1 =~ /^(alpha|beta|pre|rc)/;
++ return 1 if $state1 =~ /^([a-z]|pl)$/;
++ carp &quot;unknown state format $state1&quot;;
++ return 0;
++ }
++
++ if ($state1 eq $state2) {
++ return 1 if is_newer($statenum1, $statenum2);
++ return 0 unless $statenum1 eq $statenum2;
++ # If everything is the same except this, just compare it
++ # as we have no idea on the format
++ return &quot;$other1&quot; gt &quot;$other2&quot;;
++ }
++
++ my $s1 = 0;
++ my $s2 = 0;
++ $s1=$states{$state1} if exists $states{$state1};
++ $s2=$states{$state2} if exists $states{$state2};
++ return $s1&gt;$s2 if ($s1 != 0 &amp;&amp; $s2 != 0);
++ return 1 if $s1&lt;0 &amp;&amp; $state2 =~ /^([a-z]|pl)$/;
++ return 0 if $s2&lt;0 &amp;&amp; $state1 =~ /^([a-z]|pl)$/;
++ carp &quot;unknown case $v1, $v2&quot;;
++ return 0;
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Input.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Input.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Input.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,120 @@
++# $Id: Input.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Input;
++
++=head1 NAME
++
++Youri::Check::Input - Abstract input plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines input plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Utils;
++
++use constant WARNING =&gt; 'warning';
++use constant ERROR =&gt; 'error';
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Input object.
++
++No generic parameters (subclasses may define additional ones).
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '', # object id
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ resolver =&gt; undef, # maintainer resolver
++ preferences =&gt; undef, # maintainer preferences
++ @_
++ );
++
++ if ($options{resolver}) {
++ croak &quot;resolver should be a Youri::Check::Maintainer::Resolver object&quot; unless $options{resolver}-&gt;isa(&quot;Youri::Check::Maintainer::Resolver&quot;);
++ }
++ if ($options{preferences}) {
++ croak &quot;preferences should be a Youri::Check::Maintainer::Preferences object&quot; unless $options{preferences}-&gt;isa(&quot;Youri::Check::Maintainer::Preferences&quot;);
++ }
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ _resolver =&gt; $options{resolver},
++ _preferences =&gt; $options{preferences},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 get_id()
++
++Returns plugin identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head2 prepare(@medias)
++
++Perform optional preliminary initialisation, using given list of
++&lt;Youri::Media&gt; objects.
++
++=cut
++
++sub prepare {
++ # do nothing
++}
++
++=head2 run($media, $resultset)
++
++Check the packages from given L&lt;Youri::Media&gt; object, and store the
++result in given L&lt;Youri::Check::Resultset&gt; object.
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item run
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences/File.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences/File.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences/File.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,87 @@
++# $Id: File.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Maintainer::Preferences::File;
++
++=head1 NAME
++
++Youri::Check::Maintainer::Preferences::File - File-based maintainer preferences implementation
++
++=head1 DESCRIPTION
++
++This is a file-based L&lt;Youri::Check::Maintainer::Preferences&gt; implementation.
++
++It uses files in maintainer home directories.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Config;
++use base 'Youri::Check::Maintainer::Preferences';
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Maintainer::Preferences::File object.
++
++No specific parameters.
++
++=cut
++
++sub get_preference {
++ my ($self, $maintainer, $plugin, $value) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ return unless $maintainer &amp;&amp; $plugin &amp;&amp; $value;
++
++ print &quot;Retrieving maintainer $maintainer preferences\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ $self-&gt;_load_config($maintainer)
++ unless exists $self-&gt;{_config}-&gt;{$maintainer};
++
++ return $self-&gt;{_config}-&gt;{$maintainer} ?
++ $self-&gt;{_config}-&gt;{$maintainer}-&gt;get($plugin . '_' . $value) :
++ undef;
++}
++
++sub _load_config {
++ my ($self, $maintainer) = @_;
++
++ print &quot;Attempting to load maintainers preferences for $maintainer\n&quot; if $self-&gt;{_verbose} &gt; 1;
++
++
++ my ($login) = $maintainer =~ /^(\S+)\@\S+$/;
++ my $home = (getpwnam($login))[7];
++ my $file = &quot;$home/.youri/check.prefs&quot;;
++
++ if (-f $file &amp;&amp; -r $file) {
++ print &quot;Found, loading\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ my $config = Youri::Config-&gt;new(
++ {
++ CREATE =&gt; 1,
++ GLOBAL =&gt; {
++ DEFAULT =&gt; undef,
++ EXPAND =&gt; EXPAND_VAR | EXPAND_ENV,
++ ARGCOUNT =&gt; ARGCOUNT_ONE,
++ }
++ }
++ );
++ $config-&gt;file($file);
++ $self-&gt;{_config}-&gt;{$maintainer} = $config;
++ } else {
++ print &quot;Not found, aborting\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ $self-&gt;{_config}-&gt;{$maintainer} = undef;
++ }
++
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Preferences.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,80 @@
++# $Id: Preferences.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Maintainer::Preferences;
++
++=head1 NAME
++
++Youri::Check::Maintainer::Preferences - Abstract maintainer preferences
++
++=head1 DESCRIPTION
++
++This abstract class defines Youri::Check::Maintainer::Preferences interface.
++
++=head1 SYNOPSIS
++
++ use Youri::Check::Maintainer::Preferences::Foo;
++
++ my $preferences = Youri::Check::Maintainer::Preferences::Foo-&gt;new();
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Maintainer::Preferences object.
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ @_
++ );
++
++ my $self = bless {
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head2 get_preference($maintainer, $plugin, $item)
++
++Returns preference of given maintainer for given plugin and configuration item.
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item get
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/Bugzilla.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/Bugzilla.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/Bugzilla.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,100 @@
++# $Id: Bugzilla.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Maintainer::Resolver::Bugzilla;
++
++=head1 NAME
++
++Youri::Check::Maintainer::Resolver::Bugzilla - Bugzilla-based maintainer resolver
++
++=head1 DESCRIPTION
++
++This is a Bugzilla-based L&lt;Youri::Check::Maintainer::Resolver&gt; implementation.
++
++It uses Bugzilla SQL database for resolving maintainers.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Bugzilla;
++use base 'Youri::Check::Maintainer::Resolver';
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Maintainer::Resolver::Bugzilla object.
++
++Specific parameters:
++
++=over
++
++=item host $host
++
++Bugzilla database host.
++
++=item base $base
++
++Bugzilla database name.
++
++=item user $user
++
++Bugzilla database user.
++
++=item pass $pass
++
++Bugzilla database password.
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ host =&gt; '', # host of the bug database
++ base =&gt; '', # name of the bug database
++ user =&gt; '', # user of the bug database
++ pass =&gt; '', # pass of the bug database
++ @_
++ );
++
++ croak &quot;No host given&quot; unless $options{host};
++ croak &quot;No base given&quot; unless $options{base};
++ croak &quot;No user given&quot; unless $options{user};
++ croak &quot;No pass given&quot; unless $options{pass};
++
++ my $bugzilla = Youri::Bugzilla-&gt;new(
++ $options{host},
++ $options{base},
++ $options{user},
++ $options{pass}
++ );
++
++ $self-&gt;{_bugzilla} = $bugzilla;
++}
++
++sub get_maintainer {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $name = ref $package &amp;&amp; $package-&gt;isa('Youri::Package') ?
++ $package-&gt;get_canonical_name() :
++ $package;
++
++ $self-&gt;{_maintainers}-&gt;{$name} =
++ $self-&gt;{_bugzilla}-&gt;get_maintainer($name)
++ unless exists $self-&gt;{_maintainers}-&gt;{$name};
++
++ return $self-&gt;{_maintainers}-&gt;{$name};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/CGI.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/CGI.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver/CGI.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,79 @@
++# $Id: CGI.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Maintainer::Resolver::CGI;
++
++=head1 NAME
++
++Youri::Check::Maintainer::Resolver::CGI - CGI-based maintainer resolver
++
++=head1 DESCRIPTION
++
++This is a CGI-based L&lt;Youri::Check::Maintainer::Resolver&gt; implementation.
++
++It uses a remote CGI to resolve maintainers.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Maintainer::Resolver';
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Maintainer::Resolver::CGI object.
++
++Specific parameters:
++
++=over
++
++=item url $url
++
++CGI's URL.
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ url =&gt; '', # url to fetch maintainers
++ @_
++ );
++
++ croak &quot;No URL given&quot; unless $options{url};
++
++ open (INPUT, &quot;GET $options{url} |&quot;);
++ while (&lt;INPUT&gt;) {
++ chomp;
++ my ($package, $maintainer) = split(/\t/, $_);
++ $self-&gt;{_maintainers}-&gt;{$package} = $maintainer if $maintainer;
++ }
++ close(INPUT);
++}
++
++sub get_maintainer {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ print &quot;Retrieving package $package maintainer\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ my $name = ref $package &amp;&amp; $package-&gt;isa('Youri::Package') ?
++ $package-&gt;get_canonical_name() :
++ $package;
++
++ return $self-&gt;{_maintainers}-&gt;{$name};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Maintainer/Resolver.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,86 @@
++# $Id: Resolver.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Maintainer::Resolver;
++
++=head1 NAME
++
++Youri::Check::Maintainer::Resolver - Abstract maintainer resolver
++
++=head1 DESCRIPTION
++
++This abstract class defines Youri::Check::Maintainer::Resolver interface.
++
++=head1 SYNOPSIS
++
++ use Youri::Check::Maintainer::Resolver::Foo;
++
++ my $resolver = Youri::Check::Maintainer::Resolver::Foo-&gt;new();
++
++ print $resolver-&gt;get_maintainer('foo');
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Utils;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Maintainer::Resolver object.
++
++No generic parameters (subclasses may define additional ones).
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ @_
++ );
++
++ my $self = bless {
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose}
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head2 get_maintainer($package)
++
++Returns maintainer for given package, which can be either a full
++L&lt;Youri::Package&gt; object or just a package name.
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item get_maintainer
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/HTML.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/HTML.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/HTML.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,222 @@
++# $Id: HTML.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Output::File::Format::HTML;
++
++=head1 NAME
++
++Youri::Check::Output::File::Format::HTML - File HTML format support
++
++=head1 DESCRIPTION
++
++This format plugin for L&lt;Youri::Check::Output::File&gt; provides HTML format
++support.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use CGI;
++use base 'Youri::Check::Output::File::Format';
++
++sub extension {
++ return 'html';
++}
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ style =&gt; &lt;&lt;EOF, # css style
++h1 {
++ text-align:center;
++}
++table {
++ border-style:solid;
++ border-width:1px;
++ border-color:black;
++ width:100%;
++}
++tr.odd {
++ background-color:white;
++}
++tr.even {
++ background-color:silver;
++}
++p.footer {
++ font-size:smaller;
++ text-align:center;
++}
++EOF
++ @_
++ );
++
++ $self-&gt;{_style} = $options{style};
++ $self-&gt;{_cgi} = CGI-&gt;new();
++}
++
++sub get_report {
++ my ($self, $time, $title, $iterator, $type, $columns, $links, $maintainer) = @_;
++
++ my $content;
++ my $lead_columns = [
++ $maintainer ?
++ qw/package media/ :
++ qw/package media maintainer/
++ ];
++ my $line;
++ my @results;
++ $content .= $self-&gt;{_cgi}-&gt;start_table();
++ $content .= $self-&gt;{_cgi}-&gt;Tr([
++ $self-&gt;{_cgi}-&gt;th([
++ @$lead_columns,
++ @$columns
++ ])
++ ]);
++ while (my $result = $iterator-&gt;get_result()) {
++ if (@results &amp;&amp; $result-&gt;{package} ne $results[0]-&gt;{package}) {
++ $content .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ $links,
++ $line++ % 2 ? 'odd' : 'even',
++ \@results
++ );
++ @results = ();
++ }
++ push(@results, $result);
++ }
++ $content .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ $links,
++ $line++ % 2 ? 'odd' : 'even',
++ \@results
++ );
++ $content .= $self-&gt;{_cgi}-&gt;end_table();
++
++ return $self-&gt;_get_html_page($time, $title, \$content);
++}
++
++sub get_index {
++ my ($self, $time, $title, $reports, $maintainers) = @_;
++
++ my $content;
++
++ if ($reports) {
++ $content .= $self-&gt;{_cgi}-&gt;h2(&quot;Reports&quot;);
++ my @types = keys %{$reports};
++
++ $content .= $self-&gt;{_cgi}-&gt;start_ul();
++ foreach my $type (sort @types) {
++ my $item;
++ $item = $self-&gt;{_cgi}-&gt;a(
++ { href =&gt; &quot;$type.html&quot; },
++ $type
++ );
++ foreach my $extension (@{$reports-&gt;{$type}}) {
++ next if ($extension eq extension());
++ $item .= &quot; &quot;.$self-&gt;{_cgi}-&gt;a(
++ { href =&gt; &quot;$type.$extension&quot; },
++ &quot;[$extension]&quot;
++ );
++ }
++ $content .= $self-&gt;{_cgi}-&gt;li($item);
++ }
++ $content .= $self-&gt;{_cgi}-&gt;end_ul();
++ }
++
++ if ($maintainers) {
++ $content .= $self-&gt;{_cgi}-&gt;h2(&quot;Individual reports&quot;);
++
++ $content .= $self-&gt;{_cgi}-&gt;start_ul();
++ foreach my $maintainer (sort @{$maintainers}) {
++ $content .= $self-&gt;{_cgi}-&gt;li(
++ $self-&gt;{_cgi}-&gt;a(
++ { href =&gt; &quot;$maintainer/index.html&quot; },
++ _obfuscate($maintainer)
++ )
++ );
++ }
++ $content .= $self-&gt;{_cgi}-&gt;end_ul();
++ }
++
++ return $self-&gt;_get_html_page($time, $title, \$content);
++}
++
++sub _get_formated_results {
++ my ($self, $lead_columns, $columns, $links, $class, $results) = @_;
++
++ my $content;
++ $content .= $self-&gt;{_cgi}-&gt;end_Tr();
++ for my $i (0 .. $#$results) {
++ $content .= $self-&gt;{_cgi}-&gt;start_Tr(
++ { class =&gt; $class }
++ );
++ if ($i == 0) {
++ # first line contains spanned cells
++ $content .= $self-&gt;{_cgi}-&gt;td(
++ { rowspan =&gt; scalar @$results },
++ [
++ map { $results-&gt;[$i]-&gt;{$_} }
++ @$lead_columns
++ ]
++ );
++ }
++ $content .= $self-&gt;{_cgi}-&gt;td(
++ [
++ map {
++ $links-&gt;{$_} &amp;&amp; $results-&gt;[$i]-&gt;{$links-&gt;{$_}} ?
++ $self-&gt;{_cgi}-&gt;a(
++ { href =&gt; $results-&gt;[$i]-&gt;{$links-&gt;{$_}} },
++ $self-&gt;{_cgi}-&gt;escapeHTML($results-&gt;[$i]-&gt;{$_})
++ ) :
++ $self-&gt;{_cgi}-&gt;escapeHTML($results-&gt;[$i]-&gt;{$_})
++ } @$columns
++ ]
++ );
++ $content .= $self-&gt;{_cgi}-&gt;end_Tr();
++ }
++
++ return $content;
++}
++
++
++sub _get_html_page {
++ my ($self, $time, $title, $body) = @_;
++
++ my $content;
++ $content .= $self-&gt;{_cgi}-&gt;start_html(
++ -title =&gt; $title,
++ -style =&gt; { code =&gt; $self-&gt;{_style} }
++ );
++ $content .= $self-&gt;{_cgi}-&gt;h1($title);
++ $content .= $$body;
++ $content .= $self-&gt;{_cgi}-&gt;hr();
++ $content .= $self-&gt;{_cgi}-&gt;p(
++ { class =&gt; 'footer' },
++ &quot;Page generated $time&quot;
++ );
++ $content .= $self-&gt;{_cgi}-&gt;end_html();
++
++ return \$content;
++}
++
++sub _obfuscate {
++ my ($email) = @_;
++
++ return unless $email;
++
++ $email =~ s/\@/ at /;
++ $email =~ s/\./ dot /;
++
++ return $email;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/RSS.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/RSS.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/RSS.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,68 @@
++# $Id$
++package Youri::Check::Output::File::Format::RSS;
++
++=head1 NAME
++
++Youri::Check::Output::File::Format::RSS - File RSS format support
++
++=head1 DESCRIPTION
++
++This format plugin for L&lt;Youri::Check::Output::File&gt; provides RSS format
++support.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use XML::RSS;
++use base 'Youri::Check::Output::File::Format';
++
++sub extension {
++ return 'rss';
++}
++
++sub get_report {
++ my ($self, $time, $title, $iterator, $type, $columns, $links, $maintainer) = @_;
++
++ return unless $maintainer;
++
++ my $rss = new XML::RSS (version =&gt; '2.0');
++ $rss-&gt;channel(
++ title =&gt; $title,
++ description =&gt; $title,
++ language =&gt; 'en',
++ ttl =&gt; 1440
++ );
++
++ while (my $result = $iterator-&gt;get_result()) {
++ if ($type eq 'updates') {
++ $rss-&gt;add_item(
++ title =&gt; &quot;$result-&gt;{package} $result-&gt;{available} is available&quot;,
++ description =&gt; &quot;Current version is $result-&gt;{current}&quot;,
++ link =&gt; $result-&gt;{url} ?
++ $result-&gt;{url} : $result-&gt;{source},
++ guid =&gt; &quot;$result-&gt;{package}-$result-&gt;{available}&quot;
++ );
++ } else {
++ $rss-&gt;add_item(
++ title =&gt; &quot;[$type] $result-&gt;{package}&quot;,
++ description =&gt; join(&quot;\n&quot;, (map { $result-&gt;{$_} || '' } @$columns)),
++ link =&gt; $result-&gt;{url},
++ guid =&gt; &quot;$type-$result-&gt;{package}&quot;
++ );
++ }
++ }
++
++ return \$rss-&gt;as_string();
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/Text.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/Text.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format/Text.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,88 @@
++# $Id: Text.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Output::File::Format::Text;
++
++=head1 NAME
++
++Youri::Check::Output::File::Format::Text - File text format support
++
++=head1 DESCRIPTION
++
++This format plugin for L&lt;Youri::Check::Output::File&gt; provides text format
++support.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Output::File::Format';
++
++sub extension {
++ return 'txt';
++}
++
++sub get_report {
++ my ($self, $time, $title, $iterator, $type, $columns, $links, $maintainer) = @_;
++
++ my $content;
++ $content .= $title;
++ $content .= &quot;\n&quot;;
++
++ my $lead_columns = [
++ $maintainer ?
++ qw/package media/ :
++ qw/package media maintainer/
++ ];
++ my @results;
++ $content .= join(&quot;\t&quot;, @$lead_columns, @$columns) . &quot;\n&quot;;
++ while (my $result = $iterator-&gt;get_result()) {
++ if (@results &amp;&amp; $result-&gt;{package} ne $results[0]-&gt;{package}) {
++ $content .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ \@results
++ );
++ @results = ();
++ }
++ push(@results, $result);
++ }
++ $content .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ \@results
++ );
++
++ $content .= &quot;\n&quot;;
++ $content .= &quot;Page generated $time\n&quot;;
++
++ return \$content;
++}
++
++sub _get_formated_results {
++ my ($self, $lead_columns, $columns, $results) = @_;
++
++ my $content;
++ $content .= join(
++ &quot;\t&quot;,
++ (map { $results-&gt;[0]-&gt;{$_} || '' } @$lead_columns),
++ (map { $results-&gt;[0]-&gt;{$_} || '' } @$columns)
++ ) . &quot;\n&quot;;
++ for my $i (1 .. $#$results) {
++ $content .= join(
++ &quot;\t&quot;,
++ (map { '' } @$lead_columns),
++ (map { $results-&gt;[$i]-&gt;{$_} || '' } @$columns)
++ ) . &quot;\n&quot;;
++ }
++ return $content;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File/Format.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,66 @@
++# $Id: Base.pm 579 2006-01-09 21:17:54Z guillomovitch $
++package Youri::Check::Output::File::Format;
++
++=head1 NAME
++
++Youri::Check::Output::File::Format - Abstract file format support
++
++=head1 DESCRIPTION
++
++This abstract class defines the format support interface for
++L&lt;Youri::Check::Output::File&gt;.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '',
++ test =&gt; 0,
++ verbose =&gt; 0,
++ @_
++ );
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head2 get_id()
++
++Returns format handler identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/File.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,203 @@
++# $Id: Text.pm 523 2005-10-11 08:36:49Z misc $
++package Youri::Check::Output::File;
++
++=head1 NAME
++
++Youri::Check::Output::File - Report results in files
++
++=head1 DESCRIPTION
++
++This plugin reports results in files. Additional subplugins handle specific
++formats.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use File::Basename;
++use File::Path;
++use DateTime;
++use Youri::Utils;
++use base 'Youri::Check::Output';
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ to =&gt; '', # target directory
++ noclean =&gt; 0, # don't clean up target directory
++ noempty =&gt; 0, # don't generate empty reports
++ formats =&gt; undef,
++ @_
++ );
++
++ croak &quot;no format defined&quot; unless $options{formats};
++ croak &quot;formats should be an hashref&quot; unless ref $options{formats} eq 'HASH';
++
++ my $now = DateTime-&gt;now(time_zone =&gt; 'local');
++ my $time = &quot;the &quot; . $now-&gt;ymd() . &quot; at &quot; . $now-&gt;hms();
++
++ $self-&gt;{_to} = $options{to};
++ $self-&gt;{_noclean} = $options{noclean};
++ $self-&gt;{_noempty} = $options{noempty};
++ $self-&gt;{_time} = $time;
++
++ foreach my $id (keys %{$options{formats}}) {
++ print &quot;Creating format $id\n&quot; if $options{verbose};
++ eval {
++ push(
++ @{$self-&gt;{_formats}},
++ create_instance(
++ 'Youri::Check::Output::File::Format',
++ id =&gt; $id,
++ test =&gt; $options{test},
++ verbose =&gt; $options{verbose},
++ %{$options{formats}-&gt;{$id}}
++ )
++ );
++ };
++ print STDERR &quot;Failed to create format $id: $@\n&quot; if $@;
++ }
++
++ croak &quot;no formats created&quot; unless @{$self-&gt;{_formats}};
++}
++
++sub _init_report {
++ my ($self) = @_;
++
++ # clean up output directory
++ unless ($self-&gt;{_test} || $self-&gt;{_noclean} || !$self-&gt;{_to}) {
++ my @files = glob($self-&gt;{_to} . '/*');
++ rmtree(\@files) if @files;
++ }
++}
++
++sub _global_report {
++ my ($self, $resultset, $type, $columns, $links) = @_;
++
++ foreach my $format (@{$self-&gt;{_formats}}) {
++ my $iterator = $resultset-&gt;get_iterator(
++ $type,
++ [ 'package' ]
++ );
++
++ return if $self-&gt;{_noempty} &amp;&amp; ! $iterator-&gt;has_results();
++
++ my $content = $format-&gt;get_report(
++ $self-&gt;{_time},
++ &quot;$type global report&quot;,
++ $iterator,
++ $type,
++ $columns,
++ $links,
++ undef
++ );
++
++ # create and register file
++ my $extension = $format-&gt;extension();
++ $self-&gt;_write_file(
++ &quot;$self-&gt;{_to}/$type.$extension&quot;,
++ $content
++ );
++ push(
++ @{$self-&gt;{_files}-&gt;{global}-&gt;{$type}},
++ $extension
++ );
++ }
++}
++
++sub _individual_report {
++ my ($self, $resultset, $type, $columns, $links, $maintainer) = @_;
++
++ foreach my $format (@{$self-&gt;{_formats}}) {
++ my $iterator = $resultset-&gt;get_iterator(
++ $type,
++ [ 'package' ],
++ { maintainer =&gt; [ $maintainer ] }
++ );
++
++ return if $self-&gt;{_noempty} &amp;&amp; ! $iterator-&gt;has_results();
++
++ my $content = $format-&gt;get_report(
++ $self-&gt;{_time},
++ &quot;$type individual report for $maintainer&quot;,
++ $iterator,
++ $type,
++ $columns,
++ $links,
++ $maintainer
++ );
++
++ # create and register file
++ my $extension = $format-&gt;extension();
++ $self-&gt;_write_file(
++ &quot;$self-&gt;{_to}/$maintainer/$type.$extension&quot;,
++ $content
++ );
++ push(
++ @{$self-&gt;{_files}-&gt;{maintainers}-&gt;{$maintainer}-&gt;{$type}},
++ $extension
++ );
++ }
++}
++
++sub _finish_report {
++ my ($self, $types, $maintainers) = @_;
++
++ foreach my $format (@{$self-&gt;{_formats}}) {
++ next unless $format-&gt;can('get_index');
++ my $extension = $format-&gt;extension();
++ print STDERR &quot;writing global index page\n&quot; if $self-&gt;{_verbose};
++ $self-&gt;_write_file(
++ &quot;$self-&gt;{_to}/index.$extension&quot;,
++ $format-&gt;get_index(
++ $self-&gt;{_time},
++ &quot;QA global report&quot;,
++ $self-&gt;{_files}-&gt;{global},
++ [ keys %{$self-&gt;{_files}-&gt;{maintainers}} ],
++ )
++ );
++ foreach my $maintainer (@$maintainers) {
++ print STDERR &quot;writing index page for $maintainer\n&quot; if $self-&gt;{_verbose};
++
++ $self-&gt;_write_file(
++ &quot;$self-&gt;{_to}/$maintainer/index.$extension&quot;,
++ $format-&gt;get_index(
++ $self-&gt;{_time},
++ &quot;QA report for $maintainer&quot;,
++ $self-&gt;{_files}-&gt;{maintainers}-&gt;{$maintainer},
++ undef,
++ )
++ );
++ }
++ }
++}
++
++sub _write_file {
++ my ($self, $file, $content) = @_;
++
++ return unless $content;
++
++ my $dirname = dirname($file);
++ mkpath($dirname) unless -d $dirname;
++
++ if ($self-&gt;{_test}) {
++ *OUT = *STDOUT;
++ } else {
++ open(OUT, &quot;&gt;$file&quot;) or die &quot;Can't open file $file: $!&quot;;
++ }
++
++ print OUT $$content;
++
++ close(OUT) unless $self-&gt;{_test};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/HTML.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/HTML.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/HTML.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,158 @@
++# $Id: Mail.pm 580 2006-01-11 22:59:36Z guillomovitch $
++package Youri::Check::Output::Mail::Format::HTML;
++
++=head1 NAME
++
++Youri::Check::Output::Mail::Format::HTML - Mail HTML format support
++
++=head1 DESCRIPTION
++
++This format plugin for L&lt;Youri::Check::Output::Mail&gt; provides HTML format
++support.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use CGI;
++use base 'Youri::Check::Output::Mail::Format';
++
++sub type {
++ return 'text/html';
++}
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ style =&gt; &lt;&lt;EOF, # css style
++h1 {
++ text-align:center;
++}
++table {
++ border-style:solid;
++ border-width:1px;
++ border-color:black;
++ width:100%;
++}
++tr.odd {
++ background-color:white;
++}
++tr.even {
++ background-color:silver;
++}
++p.footer {
++ font-size:smaller;
++ text-align:center;
++}
++EOF
++ @_
++ );
++
++ $self-&gt;{_style} = $options{style};
++ $self-&gt;{_cgi} = CGI-&gt;new();
++}
++
++sub get_report {
++ my ($self, $time, $title, $iterator, $type, $columns, $links, $maintainer) = @_;
++
++ my $body;
++ my $lead_columns = [
++ $maintainer ?
++ qw/package media/ :
++ qw/package media maintainer/
++ ];
++ my $line;
++ my @results;
++ $body .= $self-&gt;{_cgi}-&gt;start_table();
++ $body .= $self-&gt;{_cgi}-&gt;Tr([
++ $self-&gt;{_cgi}-&gt;th([
++ @$lead_columns,
++ @$columns
++ ])
++ ]);
++ while (my $result = $iterator-&gt;get_result()) {
++ if (@results &amp;&amp; $result-&gt;{package} ne $results[0]-&gt;{package}) {
++ $body .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ $links,
++ $line++ % 2 ? 'odd' : 'even',
++ \@results
++ );
++ @results = ();
++ }
++ push(@results, $result);
++ }
++ $body .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ $links,
++ $line++ % 2 ? 'odd' : 'even',
++ \@results
++ );
++ $body .= $self-&gt;{_cgi}-&gt;end_table();
++
++ my $content;
++ $content .= $self-&gt;{_cgi}-&gt;start_html(
++ -title =&gt; $title,
++ -style =&gt; { code =&gt; $self-&gt;{_style} }
++ );
++ $content .= $self-&gt;{_cgi}-&gt;h1($title);
++ $content .= $body;
++ $content .= $self-&gt;{_cgi}-&gt;hr();
++ $content .= $self-&gt;{_cgi}-&gt;p(
++ { class =&gt; 'footer' },
++ &quot;Page generated $time&quot;
++ );
++ $content .= $self-&gt;{_cgi}-&gt;end_html();
++
++ return \$content;
++}
++
++sub _get_formated_results {
++ my ($self, $lead_columns, $columns, $links, $class, $results) = @_;
++
++ my $content;
++ $content .= $self-&gt;{_cgi}-&gt;end_Tr();
++ for my $i (0 .. $#$results) {
++ $content .= $self-&gt;{_cgi}-&gt;start_Tr(
++ { class =&gt; $class }
++ );
++ if ($i == 0) {
++ # first line contains spanned cells
++ $content .= $self-&gt;{_cgi}-&gt;td(
++ { rowspan =&gt; scalar @$results },
++ [
++ map { $results-&gt;[$i]-&gt;{$_} }
++ @$lead_columns
++ ]
++ );
++ }
++ $content .= $self-&gt;{_cgi}-&gt;td(
++ [
++ map {
++ $links-&gt;{$_} &amp;&amp; $results-&gt;[$i]-&gt;{$links-&gt;{$_}} ?
++ $self-&gt;{_cgi}-&gt;a(
++ { href =&gt; $results-&gt;[$i]-&gt;{$links-&gt;{$_}} },
++ $self-&gt;{_cgi}-&gt;escapeHTML($results-&gt;[$i]-&gt;{$_})
++ ) :
++ $self-&gt;{_cgi}-&gt;escapeHTML($results-&gt;[$i]-&gt;{$_})
++ } @$columns
++ ]
++ );
++ $content .= $self-&gt;{_cgi}-&gt;end_Tr();
++ }
++
++ return $content;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/Text.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/Text.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format/Text.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,83 @@
++# $Id: Mail.pm 580 2006-01-11 22:59:36Z guillomovitch $
++package Youri::Check::Output::Mail::Format::Text;
++
++=head1 NAME
++
++Youri::Check::Output::Mail::Format::Text - Mail text format support
++
++=head1 DESCRIPTION
++
++This format plugin for L&lt;Youri::Check::Output::Mail&gt; provides text format
++support.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use base 'Youri::Check::Output::Mail::Format';
++
++sub type {
++ return 'text/plain';
++}
++
++sub get_report {
++ my ($self, $time, $title, $iterator, $type, $columns, $links, $maintainer) = @_;
++
++ my $content;
++ my $lead_columns = [
++ $maintainer ?
++ qw/package media/ :
++ qw/package media maintainer/
++ ];
++ my @results;
++ $content .= join(&quot;\t&quot;, @$lead_columns, @$columns) . &quot;\n&quot;;
++ while (my $result = $iterator-&gt;get_result()) {
++ if (@results &amp;&amp; $result-&gt;{package} ne $results[0]-&gt;{package}) {
++ $content .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ \@results
++ );
++ @results = ();
++ }
++ push(@results, $result);
++ }
++
++ $content .= $self-&gt;_get_formated_results(
++ $lead_columns,
++ $columns,
++ \@results
++ );
++
++ return \$content;
++}
++
++sub _get_formated_results {
++ my ($self, $lead_columns, $columns, $results) = @_;
++
++ my $content;
++ $content .= join(
++ &quot;\t&quot;,
++ (map { $results-&gt;[0]-&gt;{$_} || '' } @$lead_columns),
++ (map { $results-&gt;[0]-&gt;{$_} || '' } @$columns)
++ ) . &quot;\n&quot;;
++ for my $i (1 .. $#$results) {
++ $content .= join(
++ &quot;\t&quot;,
++ (map { '' } @$lead_columns),
++ (map { $results-&gt;[$i]-&gt;{$_} || '' } @$columns)
++ ) . &quot;\n&quot;;
++ }
++ return $content;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail/Format.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,66 @@
++# $Id: Base.pm 579 2006-01-09 21:17:54Z guillomovitch $
++package Youri::Check::Output::Mail::Format;
++
++=head1 NAME
++
++Youri::Check::Output::Mail::Format - Abstract mail format support
++
++=head1 DESCRIPTION
++
++This abstract class defines the format support interface for
++L&lt;Youri::Check::Output::Mail&gt;.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '',
++ test =&gt; 0,
++ verbose =&gt; 0,
++ @_
++ );
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head2 get_id()
++
++Returns format handler identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output/Mail.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,156 @@
++# $Id: Mail.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Output::Mail;
++
++=head1 NAME
++
++Youri::Check::Output::Mail - Report results by mail
++
++=head1 DESCRIPTION
++
++This plugin reports results by mail. Additional subplugins handle specific
++formats.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use MIME::Entity;
++use Youri::Utils;
++use base 'Youri::Check::Output';
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ from =&gt; '', # mail from header
++ to =&gt; '', # mail to header
++ reply_to =&gt; '', # mail reply-to header
++ mta =&gt; '', # mta path
++ noempty =&gt; 1, # don't generate empty reports
++ formats =&gt; {},
++ @_
++ );
++
++ croak &quot;no format defined&quot; unless $options{formats};
++ croak &quot;formats should be an hashref&quot; unless ref $options{formats} eq 'HASH';
++
++ $self-&gt;{_from} = $options{from};
++ $self-&gt;{_to} = $options{to};
++ $self-&gt;{_reply_to} = $options{reply_to};
++ $self-&gt;{_mta} = $options{mta};
++ $self-&gt;{_noempty} = $options{noempty};
++
++ foreach my $id (keys %{$options{formats}}) {
++ print &quot;Creating format $id\n&quot; if $options{verbose};
++ eval {
++ push(
++ @{$self-&gt;{_formats}},
++ create_instance(
++ 'Youri::Check::Output::Mail::Format',
++ id =&gt; $id,
++ test =&gt; $options{test},
++ verbose =&gt; $options{verbose},
++ %{$options{formats}-&gt;{$id}}
++ )
++ );
++ };
++ print STDERR &quot;Failed to create format $id: $@\n&quot; if $@;
++ }
++
++ croak &quot;no formats created&quot; unless @{$self-&gt;{_formats}};
++}
++
++sub _global_report {
++ my ($self, $resultset, $type, $columns, $links) = @_;
++
++ foreach my $format (@{$self-&gt;{_formats}}) {
++ my $iterator = $resultset-&gt;get_iterator(
++ $type,
++ [ 'package' ]
++ );
++
++ return if $self-&gt;{_noempty} &amp;&amp; ! $iterator-&gt;has_results();
++
++ my $content = $format-&gt;get_report(
++ $self-&gt;{_time},
++ &quot;$type global report&quot;,
++ $iterator,
++ $type,
++ $columns,
++ $links,
++ undef
++ );
++
++ $self-&gt;_send_mail(
++ $format-&gt;type(),
++ $self-&gt;{_to},
++ &quot;$type global report&quot;,
++ $content,
++ );
++ }
++}
++
++sub _individual_report {
++ my ($self, $resultset, $type, $columns, $links, $maintainer) = @_;
++
++ foreach my $format (@{$self-&gt;{_formats}}) {
++ my $iterator = $resultset-&gt;get_iterator(
++ $type,
++ [ 'package' ],
++ { maintainer =&gt; [ $maintainer ] }
++ );
++
++ return if $self-&gt;{_noempty} &amp;&amp; ! $iterator-&gt;has_results();
++
++ my $content = $format-&gt;get_report(
++ $self-&gt;{_time},
++ &quot;$type individual report for $maintainer&quot;,
++ $iterator,
++ $type,
++ $columns,
++ $links,
++ $maintainer
++ );
++
++ $self-&gt;_send_mail(
++ $format-&gt;type(),
++ $maintainer,
++ &quot;$type individual report for $maintainer&quot;,
++ $content,
++ );
++ }
++
++}
++
++sub _send_mail {
++ my ($self, $type, $to, $subject, $content) = @_;
++
++ return unless $content;
++
++ my $mail = MIME::Entity-&gt;build(
++ 'Type' =&gt; $type,
++ 'From' =&gt; $self-&gt;{_from},
++ 'Reply-To' =&gt; $self-&gt;{_reply_to},
++ 'To' =&gt; $to,
++ 'Subject' =&gt; $subject,
++ 'Data' =&gt; $$content
++ );
++
++ if ($self-&gt;{_test}) {
++ $mail-&gt;print(\*STDOUT);
++ } else {
++ open(MAIL, &quot;| $self-&gt;{_mta} -t -oi -oem&quot;) or die &quot;Can't open MTA program: $!&quot;;
++ $mail-&gt;print(\*MAIL);
++ close MAIL;
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Output.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Output.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Output.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,190 @@
++# $Id: Output.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Check::Output;
++
++=head1 NAME
++
++Youri::Check::Output - Abstract output plugin
++
++=head1 DESCRIPTION
++
++This abstract class defines output plugin interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Youri::Utils;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Check::Output object.
++
++Generic parameters (subclasses may define additional ones):
++
++=over
++
++=item global true/false
++
++Global reports generation (default: true).
++
++=item individual true/false
++
++Individual reports generation (default: true).
++
++=back
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ id =&gt; '',
++ test =&gt; 0,
++ verbose =&gt; 0,
++ global =&gt; 1,
++ individual =&gt; 1,
++ config =&gt; undef,
++ @_
++ );
++
++ croak &quot;Neither global nor individual reporting selected&quot; unless $options{global} || $options{individual};
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ _global =&gt; $options{global},
++ _individual =&gt; $options{individual},
++ _config =&gt; $options{config}
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 get_id()
++
++Returns plugin identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head2 run($resultset)
++
++Reports the result stored in given L&lt;Youri::Check::Resultset&gt; object.
++
++=cut
++
++sub run {
++ my ($self, $resultset) = @_;
++
++ $self-&gt;_init_report();
++
++ # get types and maintainers list from resultset
++ my @maintainers = $resultset-&gt;get_maintainers();
++ my @types = $resultset-&gt;get_types();
++
++ foreach my $type (@types) {
++ # get formatting instructions from class
++ my $class = $self-&gt;{_config}-&gt;get($type . '_class');
++ load($class);
++ my @columns = $class-&gt;columns();
++ my %links = $class-&gt;links();
++
++ if ($self-&gt;{_global}) {
++ print STDERR &quot;generating global report for $type\n&quot; if $self-&gt;{_verbose};
++ $self-&gt;_global_report(
++ $resultset,
++ $type,
++ \@columns,
++ \%links
++ );
++ }
++
++ if ($self-&gt;{_individual}) {
++ foreach my $maintainer (@maintainers) {
++ print STDERR &quot;generating individual report for $type and $maintainer\n&quot; if $self-&gt;{_verbose};
++
++ $self-&gt;_individual_report(
++ $resultset,
++ $type,
++ \@columns,
++ \%links,
++ $maintainer
++ );
++ }
++ }
++ }
++
++ $self-&gt;_finish_report(\@types, \@maintainers);
++}
++
++sub _init_report {
++ # do nothing
++}
++
++sub _global_report {
++ # do nothing
++}
++
++sub _individual_report {
++ # do nothing
++}
++
++sub _finish_report {
++ # do nothing
++}
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item run
++
++As an alternative, the following hooks can be implemented:
++
++=over
++
++=item _init_report
++
++=item _global_report
++
++=item _individual_report
++
++=item _finish_report
++
++=back
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/DBI.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/DBI.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/DBI.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,372 @@
++# $Id: Result.pm 485 2005-08-01 21:48:21Z guillomovitch $
++package Youri::Check::Resultset::DBI;
++
++=head1 NAME
++
++Youri::Check::Resultset::DBI - DBI-based resultset
++
++=head1 DESCRIPTION
++
++This is a DBI-based L&lt;Youri::Check::Resultset&gt; implementation.
++
++It can be created with any DBI-supported database.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use DBI 1.38;
++use base 'Youri::Check::Resultset';
++
++my %tables = (
++ packages =&gt; {
++ id =&gt; 'SERIAL PRIMARY KEY',
++ package =&gt; 'TEXT',
++ media =&gt; 'TEXT',
++ maintainer =&gt; 'TEXT',
++ }
++);
++
++my %queries = (
++ add_package =&gt;
++ 'INSERT INTO packages (package, media, maintainer) VALUES (?, ?, ?)',
++ get_package_id =&gt;
++ 'SELECT id FROM packages WHERE package = ?',
++ get_maintainers =&gt;
++ 'SELECT DISTINCT(maintainer) FROM packages WHERE maintainer IS NOT NULL',
++);
++
++=head1 CLASS METHODS
++
++=head2 new(%hash)
++
++Creates and returns a new Youri::Check::Resultset::DBI object.
++
++Specific parameters:
++
++=over
++
++=item driver $driver
++
++Use given string as DBI driver.
++
++=item base $base
++
++Use given string as database name.
++
++=item port $port
++
++Use given string as database port.
++
++=item user $user
++
++Use given string as database user.
++
++=item pass $pass
++
++Use given string as database password.
++
++=back
++
++=cut
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ driver =&gt; '', # driver
++ base =&gt; '', # base
++ port =&gt; '', # port
++ user =&gt; '', # user
++ pass =&gt; '', # pass
++ @_
++ );
++
++ croak &quot;No driver defined&quot; unless $options{driver};
++ croak &quot;No base defined&quot; unless $options{base};
++
++ my $datasource = &quot;DBI:$options{driver}:dbname=$options{base}&quot;;
++ $datasource .= &quot;;host=$options{host}&quot; if $options{host};
++ $datasource .= &quot;;port=$options{port}&quot; if $options{port};
++
++ $self-&gt;{_dbh} = DBI-&gt;connect($datasource, $options{user}, $options{pass}, {
++ RaiseError =&gt; 1,
++ PrintError =&gt; 0,
++ AutoCommit =&gt; 1
++ }) or croak &quot;Unable to connect: $DBI::errstr&quot;;
++
++ $self-&gt;{_dbh}-&gt;trace($options{verbose} - 1) if $options{verbose} &gt; 1;
++}
++
++sub clone {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $clone = bless {
++ _test =&gt; $self-&gt;{_test},
++ _verbose =&gt; $self-&gt;{_verbose},
++ _resolver =&gt; $self-&gt;{_resolver},
++ _dbh =&gt; $self-&gt;{_dbh}-&gt;clone()
++ }, ref $self;
++
++ return $clone;
++}
++
++sub reset {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ foreach my $table ($self-&gt;_get_tables()) {
++ my $query = &quot;DROP TABLE $table&quot;;
++ $self-&gt;{_dbh}-&gt;do($query);
++ }
++
++ foreach my $table (keys %tables) {
++ $self-&gt;_create_table($table, $tables{$table});
++ }
++}
++
++sub _get_tables {
++ my ($self) = @_;
++ my @tables = $self-&gt;{_dbh}-&gt;tables(undef, undef, '%', 'TABLE');
++ # unquote table name if needed
++ my $char = $self-&gt;{_dbh}-&gt;get_info(29);
++ @tables = map { substr($_, 1 , -1) } @tables if $char;
++ return @tables;
++}
++
++sub _get_columns {
++ my ($self, $table) = @_;
++ # proper way would be to use column_info(), but unfortunatly DBD::SQLite
++ # doesn't support it :(
++ return
++ keys
++ %{$self-&gt;{_dbh}-&gt;selectrow_hashref(&quot;SELECT * from $table&quot;)};
++}
++
++sub _create_table {
++ my ($self, $name, $fields) = @_;
++
++ my $query = &quot;CREATE TABLE $name (&quot; .
++ join(',',
++ map { &quot;$_ $fields-&gt;{$_}&quot; }
++ keys %$fields
++ ) .
++ &quot;)&quot;;
++ $self-&gt;{_dbh}-&gt;do($query);
++}
++
++sub add_result {
++ my ($self, $type, $media, $package, $values) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ croak &quot;No type defined&quot; unless $type;
++ croak &quot;No package defined&quot; unless $package;
++ croak &quot;No values defined&quot; unless $values;
++
++ my $key = &quot;add_$type&quot;;
++ my $sth = $self-&gt;{_sths}-&gt;{$key};
++
++ unless ($sth) {
++ my @fields = keys %$values;
++ $self-&gt;_create_table($type, {
++ 'package_id' =&gt; 'INT',
++ map { $_ =&gt; 'TEXT' } @fields
++ });
++ my $query = &quot;INSERT INTO $type (&quot; .
++ join(',', 'package_id', @fields) .
++ &quot;) VALUES (&quot; .
++ join(',', '?', map { '?' } @fields) .
++ &quot;)&quot;;
++ $sth = $self-&gt;{_dbh}-&gt;prepare($query);
++ $self-&gt;{_sths}-&gt;{$key} = $sth;
++ }
++
++ print &quot;adding result for type $type and package $package\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ $sth-&gt;execute(
++ $self-&gt;_get_package_id(
++ $package-&gt;get_canonical_name(),
++ $media-&gt;get_name(),
++ ),
++ values %$values
++ );
++}
++
++sub get_types {
++ my ($self) = @_;
++
++ return
++ grep { ! $tables{$_} }
++ $self-&gt;_get_tables();
++}
++
++sub get_maintainers {
++ my ($self) = @_;
++
++ return $self-&gt;_get_multiple_values('get_maintainers');
++}
++
++sub get_iterator {
++ my ($self, $id, $sort, $filter) = @_;
++
++ die 'No id given, aborting'
++ unless $id;
++ die 'sort should be an arrayref'
++ if $sort and ref $sort ne 'ARRAY';
++ die 'filter should be an hashref'
++ if $filter and ref $filter ne 'HASH';
++
++ my $query = $self-&gt;_get_iterator_query($id, $sort, $filter);
++
++ my $sth = $self-&gt;{_dbh}-&gt;prepare($query);
++ $sth-&gt;execute();
++
++ return Youri::Check::Resultset::DBI::Iterator-&gt;new($sth);
++}
++
++sub _get_iterator_query {
++ my ($self, $table, $sort, $filter) = @_;
++
++ my @fields =
++ grep { ! /package_id/ }
++ $self-&gt;_get_columns($table);
++
++ my $query = &quot;SELECT DISTINCT &quot; .
++ join(',', qw/package media maintainer/, @fields) .
++ &quot; FROM $table, packages&quot; .
++ &quot; WHERE packages.id = $table.package_id&quot;;
++
++ if ($filter) {
++ foreach my $column (keys %{$filter}) {
++ foreach my $value (@{$filter-&gt;{$column}}) {
++ $query .= &quot; AND $column = &quot; . $self-&gt;{_dbh}-&gt;quote($value);
++ }
++ }
++ }
++
++ if ($sort) {
++ $query .= &quot; ORDER BY &quot; . join(', ', @{$sort});
++ }
++
++ return $query;
++}
++
++sub _get_package_id {
++ my ($self, $package, $media) = @_;
++
++ my $id = $self-&gt;_get_single_value(
++ 'get_package_id',
++ $package
++ );
++ $id = $self-&gt;_add_package($package, $media) unless $id;
++
++ return $id;
++}
++
++sub _add_package {
++ my ($self, $package, $media) = @_;
++
++ my $maintainer = $self-&gt;{_resolver} ?
++ $self-&gt;{_resolver}-&gt;get_maintainer($package) :
++ undef;
++
++ my $sth =
++ $self-&gt;{_sths}-&gt;{add_package} ||=
++ $self-&gt;{_dbh}-&gt;prepare($queries{add_package});
++
++ $sth-&gt;execute(
++ $package,
++ $media,
++ $maintainer
++ );
++
++ my $id = $self-&gt;{_dbh}-&gt;last_insert_id(undef, undef, 'packages', 'id');
++
++ return $id;
++}
++
++sub _get_single_value {
++ my ($self, $query, @values) = @_;
++
++ my $sth =
++ $self-&gt;{_sths}-&gt;{$query} ||=
++ $self-&gt;{_dbh}-&gt;prepare($queries{$query});
++
++ $sth-&gt;execute(@values);
++
++ my @row = $sth-&gt;fetchrow_array();
++ return @row ? $row[0]: undef;
++}
++
++sub _get_multiple_values {
++ my ($self, $query, @values) = @_;
++
++ my $sth =
++ $self-&gt;{_sths}-&gt;{$query} ||=
++ $self-&gt;{_dbh}-&gt;prepare($queries{$query});
++
++ $sth-&gt;execute(@values);
++
++ my @results;
++ while (my @row = $sth-&gt;fetchrow_array()) {
++ push @results, $row[0];
++ }
++ return @results;
++}
++
++# close database connection
++sub DESTROY {
++ my ($self) = @_;
++
++ foreach my $sth (values %{$self-&gt;{_sths}}) {
++ $sth-&gt;finish() if $sth;
++ }
++
++ # warning, may be called before _dbh is created
++ $self-&gt;{_dbh}-&gt;disconnect() if $self-&gt;{_dbh};
++}
++
++package Youri::Check::Resultset::DBI::Iterator;
++
++sub new {
++ my ($class, $sth) = @_;
++
++ my $self = bless {
++ _sth =&gt; $sth,
++ _queue =&gt; []
++ }, $class;
++
++ return $self;
++}
++
++sub has_results {
++ my ($self) = @_;
++
++ return 1 if @{$self-&gt;{_queue}};
++
++ push(
++ @{$self-&gt;{_queue}},
++ $self-&gt;{_sth}-&gt;fetchrow_hashref()
++ );
++
++ return defined $self-&gt;{_queue}-&gt;[-1];
++}
++
++sub get_result {
++ my ($self) = @_;
++
++ return @{$self-&gt;{_queue}} ?
++ shift @{$self-&gt;{_queue}}:
++ $self-&gt;{_sth}-&gt;fetchrow_hashref();
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/Iterator.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/Iterator.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset/Iterator.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,22 @@
++# $Id: Base.pm 483 2005-08-01 21:39:05Z guillomovitch $
++package Youri::Check::Resultset::Iterator;
++
++=head1 INSTANCE METHODS
++
++=head2 has_results()
++
++Returns true if results are available.
++
++=head2 get_result()
++
++Returns next available result, as an field =&gt; value hash reference.
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Check/Resultset.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,116 @@
++# $Id: Base.pm 483 2005-08-01 21:39:05Z guillomovitch $
++package Youri::Check::Resultset;
++
++=head1 NAME
++
++Youri::Check::Resultset - Abstract resultset
++
++=head1 DESCRIPTION
++
++This abstract class defines Youri::Check::Resultset interface
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Scalar::Util qw/blessed/;
++use Youri::Utils;
++
++=head1 CLASS METHODS
++
++=head2 new(%hash)
++
++Creates and returns a new Youri::Check::Resultset object.
++
++No generic parameters (subclasses may define additional ones).
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ my %options = (
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ resolver =&gt; undef, # maintainer resolver,
++ mode =&gt; 'output', # access mode
++ @_
++ );
++
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my $self = bless {
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ _resolver =&gt; $options{resolver},
++ _mode =&gt; $options{mode}
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 set_resolver()
++
++Set L&lt;Youri::Check::Maintainer::Resolver&gt; object used to resolve package
++maintainers.
++
++=cut
++
++sub set_resolver {
++ my ($self, $resolver) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ croak &quot;resolver should be a Youri::Check::Maintainer::Resolver object&quot;
++ unless blessed $resolver &amp;&amp;
++ $resolver-&gt;isa(&quot;Youri::Check::Maintainer::Resolver&quot;);
++
++ $self-&gt;{_resolver} = $resolver;
++}
++
++=head2 clone()
++
++Clone resultset object.
++
++=head2 reset()
++
++Reset resultset object, by deleting all contained results.
++
++=head2 add_result($type, $media, $package, $values)
++
++Add given hash reference as a new result for given type and L&lt;Youri::Package&gt; object.
++
++=head2 get_maintainers()
++
++Returns the list of all maintainers with results.
++
++=head2 get_iterator($id, $sort, $filter)
++
++Returns a L&lt;Youri::Check::Resultset::Iterator&gt; object over results for given input it, with optional sort and filter directives.
++
++sort must be an arrayref of column names, such as [ 'package' ].
++
++filter must be a hashref of arrayref of acceptables values indexed by column names, such as { level =&gt; [ 'warning', 'error'] }.
++
++=head1 SUBCLASSING
++
++All instances methods have to be implemented.
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Config.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Config.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Config.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,202 @@
++# $Id: Config.pm 1709 2006-10-16 16:33:43Z warly $
++package Youri::Config;
++
++=head1 NAME
++
++Youri::Application - Youri application handler
++
++=head1 SYNOPSIS
++
++ use Youri::Application;
++
++ my $app = Youri::Application-&gt;new(
++ options =&gt; {
++ help =&gt; '|h!'
++ },
++ directories =&gt; [ '/etc/youri', &quot;$ENV{HOME}/.youri&quot; ],
++ file =&gt; 'app.conf',
++ );
++
++ # get command line argument
++ my $foo = $app-&gt;get_arg('foo');
++
++ # get configuration file parameter
++ my $bar = $app-&gt;get_param('bar');
++
++=head1 DESCRIPTION
++
++This class handle configuration for all YOURI applications.
++
++The command line specification is used to manage arguments through
++Getopt::Long. Unless B&lt;--config&gt; argument is given, the list of directories is
++then scanned for a file with given name, and halt as soon as it find one. If no
++readable file is found, an exception is thrown. The file is then processed
++through YAML::AppConfig. If parsing fails, an exception is thrown.
++
++=head1 CONFIGURATION FILE FORMAT
++
++=head2 SHARED KEYS
++
++In addition to the application-specific optional or mandatory parameters, all
++YOURI applications support the following optional top-level parameters:
++
++=over
++
++=item B&lt;includes&gt;
++
++A list of additional configuration files.
++
++=item B&lt;foo&gt;
++
++An arbitrary variable, usable everywhere else in the file.
++
++=back
++
++=head2 PLUGIN DEFINITION
++
++All YOURI application heavily rely on plugins defined in their configuration
++files. A plugin definition is composed from the following parameters:
++
++=over
++
++=item B&lt;class&gt;
++
++The class of this plugin.
++
++=item B&lt;options&gt;
++
++The options of this plugin.
++
++=back
++
++=head1 SEE ALSO
++
++YAML::AppConfig, Getopt::Long
++
++=cut
++
++use strict;
++use warnings;
++use YAML::AppConfig;
++use Getopt::Long;
++use File::Spec;
++use Pod::Usage;
++use Carp;
++
++sub new {
++ my ($class, %options) = @_;
++
++
++ # command line arguments
++ my $args = {
++ verbose =&gt; 0
++ };
++ my @args;
++ if ($options{args}) {
++ while (my ($arg, $spec) = each %{$options{args}}) {
++ push(@args, ($arg . $spec) =&gt; \$args-&gt;{$arg});
++ }
++ }
++ push(@args,
++ 'config=s' =&gt; \$args-&gt;{config},
++ 'h|help' =&gt; \$args-&gt;{help},
++ 'v|verbose+' =&gt; \$args-&gt;{verbose}
++ );
++ GetOptions(@args);
++
++ if ($args-&gt;{help}) {
++ if (!@ARGV) {
++ # standard help, available immediatly
++ my $filename = (caller)[1];
++ pod2usage(
++ -input =&gt; $filename,
++ -verbose =&gt; 0
++ );
++ }
++ }
++
++ # config files parameters
++
++ # find configuration file to use
++ my $main_file;
++ if ($args-&gt;{config}) {
++ if (! -f $args-&gt;{config}) {
++ croak &quot;Non-existing file $args-&gt;{config}&quot;;
++ } elsif (! -r $args-&gt;{config}) {
++ croak &quot;Non-readable file $args-&gt;{config}&quot;;
++ } else {
++ $main_file = $args-&gt;{config};
++ }
++ } else {
++ foreach my $directory (@{$options{directories}}) {
++ my $file = &quot;$directory/$options{file}&quot;;
++ next unless -f $file &amp;&amp; -r $file;
++ $main_file = $file;
++ last;
++ }
++ croak 'No config file found, aborting' unless $main_file;
++ }
++
++ my $params;
++ eval {
++ $params = YAML::AppConfig-&gt;new(file =&gt; $main_file);
++ };
++ if ($@) {
++ croak &quot;Invalid configuration file $main_file, aborting&quot;;
++ }
++
++ # process inclusions
++ my $includes = $params-&gt;get('includes');
++ if ($includes) {
++ foreach my $include_file (@{$includes}) {
++ # convert relative path to absolute ones
++ $include_file = File::Spec-&gt;rel2abs(
++ $include_file, (File::Spec-&gt;splitpath($main_file))[1]
++ );
++
++ if (! -f $include_file) {
++ warn &quot;Non-existing file $include_file, skipping&quot;;
++ } elsif (! -r $include_file) {
++ warn &quot;Non-readable file $include_file, skipping&quot;;
++ } else {
++ eval {
++ $params-&gt;merge(file =&gt; $include_file);
++ };
++ if ($@) {
++ carp &quot;Invalid included configuration file $include_file, skipping&quot;;
++ }
++ }
++ }
++ }
++
++ my $self = bless {
++ _args =&gt; $args,
++ _params =&gt; $params
++ }, $class;
++
++ return $self;
++}
++
++sub get_arg {
++ my ($self, $arg) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_args}-&gt;{$arg};
++}
++
++sub get_param {
++ my ($self, $param) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_params}-&gt;get($param);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Media/URPM.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Media/URPM.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Media/URPM.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,273 @@
++# $Id: URPM.pm 1179 2006-08-05 08:30:57Z warly $
++package Youri::Media::URPM;
++
++=head1 NAME
++
++Youri::Media::URPM - URPM-based media implementation
++
++=head1 DESCRIPTION
++
++This is an URPM-based L&lt;Youri::Media&gt; implementation.
++
++It can be created either from local or remote full (hdlist) or partial
++(synthesis) compressed header files, or from a package directory. File-based
++inputs are only usable with this latest option.
++
++=cut
++
++use URPM;
++use File::Find;
++use File::Temp ();
++use Youri::Utils;
++use LWP::Simple;
++use Carp;
++use strict;
++use warnings;
++use Youri::Package::URPM;
++
++use base 'Youri::Media';
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Media::URPM object.
++
++Specific parameters:
++
++=over
++
++=item synthesis $synthesis
++
++Path, URL or list of path or URL of synthesis file used for creating
++this media. If a list is given, the first successfully accessed will be used,
++so as to allow better reliability.
++
++=item hdlist $hdlist
++
++Path, URL or list of path or URL of hdlist file used for creating
++this media. If a list is given, the first successfully accessed will be used,
++so as to allow better reliability.
++
++=item path $path
++
++Path or list of pathes of package directory used for creating this
++media. If a list is given, the first successfully accessed will be used, so as
++to allow better reliability.
++
++=item max_age $age
++
++Maximum age of packages for this media.
++
++=item rpmlint_config $file
++
++rpmlint configuration file for this media.
++
++=back
++
++In case of multiple B&lt;synthesis&gt;, B&lt;hdlist&gt; and B&lt;path&gt; options given, they
++will be tried in this order, so as to minimize parsing time.
++
++=cut
++
++sub _init {
++ my $self = shift;
++
++ my %options = (
++ hdlist =&gt; '', # hdlist from which to create this media
++ synthesis =&gt; '', # synthesis from which to create this media
++ path =&gt; '', # directory from which to create this media
++ max_age =&gt; '', # maximum build age for packages
++ rpmlint_config =&gt; '', # rpmlint configuration for packages
++ @_
++ );
++
++ my $urpm = URPM-&gt;new();
++ SOURCE: {
++ if ($options{synthesis}) {
++ foreach my $file (
++ ref $options{synthesis} eq 'ARRAY' ?
++ @{$options{synthesis}} :
++ $options{synthesis}
++ ) {
++ print &quot;Attempting to retrieve synthesis $file\n&quot;
++ if $options{verbose};
++ my $synthesis = $self-&gt;_get_file($file);
++ if ($synthesis) {
++ $urpm-&gt;parse_synthesis($synthesis, keep_all_tags =&gt; 1);
++ last SOURCE;
++ }
++ }
++ }
++
++ if ($options{hdlist}) {
++ foreach my $file (
++ ref $options{hdlist} eq 'ARRAY' ?
++ @{$options{hdlist}} :
++ $options{hdlist}
++ ) {
++ print &quot;Attempting to retrieve hdlist $file\n&quot;
++ if $options{verbose};
++ my $hdlist = $self-&gt;_get_file($file);
++ if ($hdlist) {
++ $urpm-&gt;parse_hdlist($hdlist, keep_all_tags =&gt; 1);
++ last SOURCE;
++ }
++ }
++ }
++
++ if ($options{path}) {
++ foreach my $path (
++ ref $options{path} eq 'ARRAY' ?
++ @{$options{path}} :
++ $options{path}
++ ) {
++ print &quot;Attempting to scan directory $path\n&quot;
++ if $options{verbose};
++ unless (-d $path) {
++ carp &quot;non-existing directory $path&quot;;
++ next;
++ }
++ unless (-r $path) {
++ carp &quot;non-readable directory $path&quot;;
++ next;
++ }
++
++ my $parse = sub {
++ return unless -f $File::Find::name;
++ return unless -r $File::Find::name;
++ return unless /\.rpm$/;
++
++ $urpm-&gt;parse_rpm($File::Find::name, keep_all_tags =&gt; 1);
++ };
++
++ find($parse, $path);
++ last SOURCE;
++ }
++ }
++
++ croak &quot;no source specified&quot;;
++ }
++
++ $self-&gt;{_urpm} = $urpm;
++ $self-&gt;{_path} = $options{path};
++ $self-&gt;{_max_age} = $options{max_age};
++ $self-&gt;{_rpmlint_config} = $options{rpmlint_config};
++
++ return $self;
++}
++
++sub _remove_all_archs {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ $self-&gt;{_urpm}-&gt;{depslist} = [];
++}
++
++sub _remove_archs {
++ my ($self, $skip_archs) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $urpm = $self-&gt;{_urpm};
++ $urpm-&gt;{depslist} = [
++ grep { ! $skip_archs-&gt;{$_-&gt;arch()} } @{$urpm-&gt;{depslist}}
++ ];
++}
++
++=head1 INSTANCE METHODS
++
++=head2 max_age()
++
++Returns maximum age of packages for this media.
++
++=cut
++
++sub max_age {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_max_age};
++}
++
++=head2 rpmlint_config()
++
++Returns rpmlint configuration file for this media.
++
++=cut
++
++sub rpmlint_config {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_rpmlint_config};
++}
++
++sub get_package_class {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return &quot;Youri::Package::URPM&quot;;
++}
++
++sub traverse_files {
++ my ($self, $function) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $callback = sub {
++ return unless -f $File::Find::name;
++ return unless -r $File::Find::name;
++ return unless $_ =~ /\.rpm$/;
++
++ my $package = Youri::Package::URPM-&gt;new(file =&gt; $File::Find::name);
++ return if $self-&gt;{_skip_archs}-&gt;{$package-&gt;get_arch()};
++
++ $function-&gt;($File::Find::name, $package);
++ };
++
++ find($callback, $self-&gt;{_path});
++}
++
++sub traverse_headers {
++ my ($self, $function) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ $self-&gt;{_urpm}-&gt;traverse(sub {
++ local $_; # workaround mysterious problem between URPM and AppConfig
++ $function-&gt;(Youri::Package::URPM-&gt;new(header =&gt; $_[0]));
++ });
++
++}
++
++sub _get_file {
++ my ($self, $file) = @_;
++
++ if ($file =~ /^(?:http|ftp):\/\/.*$/) {
++ my $tempfile = File::Temp-&gt;new();
++ my $status = getstore($file, $tempfile-&gt;filename());
++ unless (is_success($status)) {
++ carp &quot;invalid URL $file: $status&quot;;
++ return;
++ }
++ return $tempfile;
++ } else {
++ unless (-f $file) {
++ carp &quot;non-existing file $file&quot;;
++ return;
++ }
++ unless (-r $file) {
++ carp &quot;non-readable file $file&quot;;
++ return;
++ }
++ return $file;
++ }
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Media.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Media.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Media.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,311 @@
++# $Id: Media.pm 1710 2006-10-16 16:35:11Z warly $
++package Youri::Media;
++
++=head1 NAME
++
++Youri::Media - Abstract media class
++
++=head1 DESCRIPTION
++
++This abstract class defines Youri::Media interface.
++
++=cut
++
++use Carp;
++use strict;
++use warnings;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Media object.
++
++Generic parameters:
++
++=over
++
++=item id $id
++
++Media id.
++
++=item name $name
++
++Media name.
++
++=item type $type (source/binary)
++
++Media type.
++
++=item test true/false
++
++Test mode (default: false).
++
++=item verbose true/false
++
++Verbose mode (default: false).
++
++=item allow_deps $media_ids
++
++list of ids of medias allowed to provide dependencies.
++
++=item skip_tests $test_ids
++
++list of ids of test plugins to skip.
++
++=item skip_archs $arches
++
++list of arches to skip.
++
++=back
++
++Subclass may define additional parameters.
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ name =&gt; '', # media name
++ canonical_name =&gt; '', # media canonical name
++ type =&gt; '', # media type
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ allow_deps =&gt; undef, # list of media ids from which deps are allowed
++ allow_srcs =&gt; undef, # list of media ids from which packages can be built
++ skip_tests =&gt; undef, # list of tests ids to skip
++ skip_archs =&gt; undef, # list of archs for which to skip tests
++ @_
++ );
++
++
++ croak &quot;No type given&quot; unless $options{type};
++ croak &quot;Wrong value for type: $options{type}&quot;
++ unless $options{type} =~ /^(?:binary|source)$/o;
++
++ # some options need to be arrays. Check it and convert to hashes
++ foreach my $option (qw(allow_deps allow_srcs skip_archs skip_tests)) {
++ next unless defined $options{$option};
++ croak &quot;$option should be an arrayref&quot; unless ref $options{$option} eq 'ARRAY';
++ $options{$option} = {
++ map { $_ =&gt; 1 } @{$options{$option}}
++ };
++ }
++
++ my $self = bless {
++ _id =&gt; $options{id},
++ _name =&gt; $options{name} || $options{id},
++ _type =&gt; $options{type},
++ _allow_deps =&gt; $options{allow_deps},
++ _allow_srcs =&gt; $options{allow_srcs},
++ _skip_archs =&gt; $options{skip_archs},
++ _skip_tests =&gt; $options{skip_tests},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ # remove unwanted archs
++ if ($options{skip_archs}-&gt;{all}) {
++ $self-&gt;_remove_all_archs()
++ } elsif ($options{skip_archs}) {
++ $self-&gt;_remove_archs($options{skip_archs});
++ }
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 get_id()
++
++Returns media identity.
++
++=cut
++
++sub get_id {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_id};
++}
++
++=head2 get_name()
++
++Returns the name of this media.
++
++=cut
++
++sub get_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_name};
++}
++
++=head2 get_type()
++
++Returns the type of this media.
++
++=cut
++
++sub get_type {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_type};
++}
++
++=head2 allow_deps()
++
++Returns the list of id of medias allowed to provide dependencies for this
++media.
++
++=cut
++
++sub allow_deps {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return keys %{$self-&gt;{_allow_deps}};
++}
++
++=head2 allow_dep($media_id)
++
++Tells wether media with given id is allowed to provide dependencies for
++this media.
++
++=cut
++
++sub allow_dep {
++ my ($self, $dep) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_allow_deps}-&gt;{all} ||
++ $self-&gt;{_allow_deps}-&gt;{$dep};
++}
++
++=head2 allow_srcs()
++
++Returns the list medias where the source packages can be
++
++=cut
++
++sub allow_srcs {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return keys %{$self-&gt;{_allow_srcs}};
++}
++
++=head2 allow_src($media_id)
++
++Tells wether media with given id is allowed to host sources dependencies for
++this media.
++
++=cut
++
++sub allow_src {
++ my ($self, $src) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_allow_srcs}-&gt;{all} || $self-&gt;{_allow_srcs}-&gt;{$src};
++}
++
++=head2 skip_archs()
++
++Returns the list of arch which are to be skipped for this media.
++
++=cut
++
++sub skip_archs {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return keys %{$self-&gt;{_skip_archs}};
++}
++
++=head2 skip_arch($arch)
++
++Tells wether given arch is to be skipped for this media.
++
++=cut
++
++sub skip_arch {
++ my ($self, $arch) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_skip_archs}-&gt;{all} ||
++ $self-&gt;{_skip_archs}-&gt;{$arch};
++}
++
++=head2 skip_tests()
++
++Returns the list of id of test which are to be skipped for this media.
++
++=cut
++
++sub skip_tests {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return keys %{$self-&gt;{_skip_tests}};
++}
++
++=head2 skip_test($test_id)
++
++Tells wether test with given id is to be skipped for this media.
++
++=cut
++
++sub skip_test {
++ my ($self, $test) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_skip_tests}-&gt;{all} ||
++ $self-&gt;{_skip_tests}-&gt;{$test};
++}
++
++=head2 get_package_class()
++
++Return package class for this media.
++
++=head2 traverse_files($function)
++
++Apply given function to all files of this media.
++
++=head2 traverse_headers($function)
++
++Apply given function to all headers of this media.
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item traverse_headers
++
++=item traverse_files
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,58 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Package/URPM.pm 2257 2006-07-05T09:22:47.088572Z guillaume $
++package Youri::Package::RPM;
++
++=head1 NAME
++
++Youri::Package::RPM - Base class for all RPM-based package implementation
++
++=head1 DESCRIPTION
++
++This bases class factorize code between various RPM-based package
++implementation.
++
++=cut
++
++use strict;
++use warnings;
++use base 'Youri::Package';
++use Carp;
++
++sub get_pattern {
++ my ($class, $name, $version, $release, $arch) = @_;
++
++ return
++ ($name ? quotemeta($name) : '[\w-]+' ).
++ '-' .
++ ($version ? quotemeta($version) : '[^-]+' ).
++ '-' .
++ ($release ? quotemeta($release) : '[^-]+' ).
++ '\.' .
++ ($arch ? quotemeta($arch) : '\w+' ).
++ '\.rpm';
++}
++
++sub as_file {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_file};
++}
++
++sub is_debug {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $name = $self-&gt;get_name();
++ my $group = $self-&gt;get_tag('group');
++
++ # debug packages' names must end in -debug, except kernel
++ if ($group =~ m,^Development/Debug$, &amp;&amp;
++ ($name =~ /-debug$/o || $name =~ /^kernel-.*-debug/o)) {
++ return 1;
++ }
++ else {
++ return 0;
++ }
++}
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM4.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM4.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Package/RPM4.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,424 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Package/URPM.pm 2129 2006-06-23T09:41:01.599329Z guillomovitch $
++package Youri::Package::RPM4;
++
++=head1 NAME
++
++Youri::Package::RPM4 - URPM-based rpm package implementation
++
++=head1 DESCRIPTION
++
++This is an RPM4-based L&lt;Youri::Package&gt; implementation for rpm.
++
++=cut
++
++use strict;
++use warnings;
++use Carp;
++use RPM4;
++use RPM4::Header;
++use RPM4::Sign;
++use File::Spec;
++use Scalar::Util qw/refaddr/;
++use base 'Youri::Package::RPM';
++use overload
++ '&quot;&quot;' =&gt; 'as_string',
++ '0+' =&gt; '_to_number',
++ fallback =&gt; 1;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Package::RPM4 object.
++
++Specific parameters:
++
++=over
++
++=item file $file
++
++Path of file to use for creating this package.
++
++=item header $header
++
++L&lt;RPM4::Header&gt; object to use for creating this package.
++
++=back
++
++=cut
++
++sub _init {
++ my ($self, %options) = @_;
++
++ my $header;
++ HEADER: {
++ if (exists $options{header}) {
++ croak &quot;undefined header&quot;
++ unless $options{header};
++ croak &quot;invalid header&quot;
++ unless $options{header}-&gt;isa('RPM4::Header');
++ $header = $options{header};
++ last HEADER;
++ }
++
++ if (exists $options{file}) {
++ croak &quot;undefined file&quot;
++ unless $options{file};
++ croak &quot;non-existing file $options{file}&quot;
++ unless -f $options{file};
++ croak &quot;non-readable file $options{file}&quot;
++ unless -r $options{file};
++ $header = RPM4::Header-&gt;new($options{file});
++ croak &quot;Can't get header from file $options{file}&quot; if (!$header);
++
++ last HEADER;
++ }
++
++ croak &quot;no way to extract header from arguments&quot;;
++ }
++
++ $self-&gt;{_header} = $header;
++ $self-&gt;{_file} = File::Spec-&gt;rel2abs($options{file});
++}
++
++sub compare_versions {
++ my ($class, $version1, $version2) = @_;
++
++ return RPM4::rpmvercmp($version1, $version2);
++}
++
++sub _depsense2flag {
++ my ($string) = @_;
++ my @flags = 0;
++ push(@flags, 'EQUAL') if ($string =~ /=/);
++ push(@flags, 'LESS') if ($string =~ /&lt;/);
++ push(@flags, 'GREATER') if ($string =~ /&gt;/);
++ return \@flags;
++}
++
++sub check_ranges_compatibility {
++ my ($class, $range1, $range2) = @_;
++ my @deps1 = split(/ /, $range1);
++ my @deps2 = split(/ /, $range2);
++ $deps1[1] = _depsense2flag($range1);
++ $deps2[1] = _depsense2flag($range2);
++ my $dep1 = RPM4::Header::Dependencies(
++ &quot;PROVIDENAME&quot;,
++ \@deps1,
++ );
++ my $dep2 = RPM4::Header::Dependencies(
++ &quot;PROVIDENAME&quot;,
++ \@deps2,
++ );
++
++ return $dep1-&gt;overlap($dep2);
++}
++
++sub get_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('name');
++}
++
++sub get_version {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('version');
++}
++
++sub get_release {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('release');
++}
++
++sub get_revision {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;queryformat('%|EPOCH?{%{EPOCH}:}:{}|%{VERSION}-%{RELEASE}');
++}
++
++sub get_file_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;queryformat('%{NAME}-%{VERSION}-%{RELEASE}.%|SOURCERPM?{%{ARCH}}:{src}|.rpm');
++}
++
++
++sub get_arch {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;queryformat('%|SOURCERPM?{%{ARCH}}:{src}|');
++}
++
++sub get_url {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('url');
++}
++
++sub get_summary {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('summary');
++}
++
++sub get_description {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('description');
++}
++
++sub get_packager {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('packager');
++}
++
++sub is_source {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;issrc();
++}
++
++sub is_binary {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return !$self-&gt;{_header}-&gt;issrc();
++}
++
++sub get_type {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_header}-&gt;issrc() ?
++ &quot;source&quot; :
++ &quot;binary&quot;;
++}
++
++sub get_age {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('buildtime');
++}
++
++sub get_source_package {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;tag('sourcerpm');
++}
++
++sub get_canonical_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ $self-&gt;{_header}-&gt;sourcerpmname() =~ /^(\S+)-[^-]+-[^-]+\.src\.rpm$/;
++ return $1;
++}
++
++sub get_tag {
++ my ($self, $tag) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ #croak &quot;invalid tag $tag&quot; unless $self-&gt;{_header}-&gt;can($tag);
++ return $self-&gt;{_header}-&gt;tag($tag);
++}
++
++
++sub _get_dependencies {
++ my ($self, $deptype) = @_;
++ my $deps = $self-&gt;{_header}-&gt;dep($deptype);
++ my @deps_list;
++ if ($deps) {
++ $deps-&gt;init();
++ while ($deps-&gt;next() &gt;= 0) {
++ my @deps = $deps-&gt;info();
++ $deps[1] =~ m/^rpmlib\(/ and next; # skipping internal rpmlib dep
++ $deps[2] =~ s/^=$/==/; # rpm say foo = 1, not foo == 1, == come from URPM, which sucks
++ my $range = $deps[3] ? ($deps[2] . ' ' . $deps[3]) : undef;
++ push(@deps_list, [ $deps[1], $range ]);
++ }
++ }
++ @deps_list
++}
++
++sub get_requires {
++ my ($self) = @_;
++
++ return $self-&gt;_get_dependencies('REQUIRENAME');
++}
++
++sub get_provides {
++ my ($self) = @_;
++
++ return $self-&gt;_get_dependencies('PROVIDENAME');
++}
++
++sub get_obsoletes {
++ my ($self) = @_;
++
++ return $self-&gt;_get_dependencies('OBSOLETENAME');
++}
++
++sub get_conflicts {
++ my ($self) = @_;
++
++ return $self-&gt;_get_dependencies('CONFLICTNAME');
++}
++
++sub get_files {
++ my ($self) = @_;
++
++ my $files = $self-&gt;{_header}-&gt;files();
++ my @fileslist;
++ if ($files) {
++ $files-&gt;init();
++ while ($files-&gt;next() &gt;= 0) {
++ my $smode = $files-&gt;mode();
++ my $umode = 0;
++ foreach (0..15) { # converting unsigned to signed int :\
++ $umode |= $smode &amp; (1 &lt;&lt; $_);
++ }
++ push(@fileslist, [ $files-&gt;filename(), $umode, $files-&gt;md5() || '' ]);
++ }
++ }
++ @fileslist
++}
++
++sub get_gpg_key {
++ my ($self) = @_;
++
++ my $signature = $self-&gt;{_header}-&gt;queryformat('%{SIGGPG:pgpsig}');
++
++ return if $signature eq '(not a blob)';
++
++ my $key_id = (split(/\s+/, $signature))[-1];
++
++ return substr($key_id, 8);
++}
++
++sub get_information {
++ my ($self) = @_;
++
++ return $self-&gt;{_header}-&gt;queryformat(&lt;&lt;EOF);
++Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|
++Version : %-27{VERSION} Vendor: %{VENDOR}
++Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}
++Install Date: %|INSTALLTIME?{%-27{INSTALLTIME:date}}:{(not installed) }| Build Host: %{BUILDHOST}
++Group : %-27{GROUP} Source RPM: %{SOURCERPM}
++Size : %-27{SIZE}%|LICENSE?{ License: %{LICENSE}}|
++Signature : %|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|
++%|PACKAGER?{Packager : %{PACKAGER}\n}|%|URL?{URL : %{URL}\n}|Summary : %{SUMMARY}
++Description :\n%{DESCRIPTION}
++EOF
++}
++
++sub get_changes {
++ my ($self) = @_;
++
++ my @names = $self-&gt;{_header}-&gt;tag('changelogname');
++ my @time = $self-&gt;{_header}-&gt;tag('changelogtime');
++ my @text = $self-&gt;{_header}-&gt;tag('changelogtext');
++
++ my @changes;
++ foreach my $i (0 .. $#names) {
++ $changes[$i] = [
++ $names[$i],
++ $time[$i],
++ $text[$i],
++ ];
++ }
++
++ return @changes;
++}
++
++sub get_last_change {
++ my ($self) = @_;
++
++ return [
++ ($self-&gt;{_header}-&gt;tag('changelogname'))[0],
++ ($self-&gt;{_header}-&gt;tag('changelogtime'))[0],
++ ($self-&gt;{_header}-&gt;tag('changelogtext'))[0],
++ ];
++}
++
++sub as_string {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;fullname();
++}
++
++sub as_formated_string {
++ my ($self, $format) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;queryformat($format);
++}
++
++sub _to_number {
++ return refaddr($_[0]);
++}
++
++sub compare {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;compare($package-&gt;{_header}) || 0;
++}
++
++sub satisfy_range {
++ my ($self, $range) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;check_range_compatibility($self-&gt;get_revision(), $range);
++}
++
++sub sign {
++ my ($self, $name, $path, $passphrase) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # check if parent directory is writable
++ my $parent = (File::Spec-&gt;splitpath($self-&gt;{_file}))[1];
++ croak &quot;Unsignable package, parent directory is read-only&quot;
++ unless -w $parent;
++
++ my $sign = RPM4::Sign-&gt;new(
++ name =&gt; $name,
++ path =&gt; $path,
++ );
++ $sign-&gt;{passphrase} = $passphrase;
++
++ $sign-&gt;rpmssign($self-&gt;{_file})
++}
++
++sub extract {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ system(&quot;rpm2cpio $self-&gt;{_file} | cpio -id &gt;/dev/null 2&gt;&amp;1&quot;);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Package/Test.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Package/Test.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Package/Test.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,151 @@
++# $Id: /local/youri/soft/core/trunk/lib/Youri/Package/URPM.pm 2133 2006-09-20T21:40:20.575763Z guillaume $
++package Youri::Package::Test;
++
++=head1 NAME
++
++Youri::Package::Test - Fake test package
++
++=head1 DESCRIPTION
++
++This is just a fake package object, intended for testing purposes.
++
++=cut
++
++use strict;
++use warnings;
++use Carp;
++use base 'Youri::Package::RPM';
++use overload
++ '&quot;&quot;' =&gt; 'as_string',
++ '0+' =&gt; '_to_number',
++ fallback =&gt; 1;
++
++our $AUTOLOAD;
++
++my @tags = qw/
++ name
++ version
++ release
++ filename
++ arch
++ url
++ summary
++ description
++ packager
++ buildtime
++ sourcerpm
++/;
++
++my %tags = map { $_ =&gt; 1 } @tags;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Package::Test object.
++
++Specific parameters:
++
++=over
++
++=item tag $tag
++
++Use given value for given tag
++
++=back
++
++=cut
++
++sub _init {
++ my ($self, %options) = @_;
++
++ $self-&gt;{&quot;_$_&quot;} = $options{$_} foreach keys %options;
++}
++
++sub get_revision {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_epoch} ?
++ &quot;$self-&gt;{_epoch}:$self-&gt;{_version}-$self-&gt;{_release}&quot; :
++ &quot;$self-&gt;{_version}-$self-&gt;{_release}&quot;;
++}
++
++sub get_tag {
++ my ($self, $tag) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ croak &quot;invalid tag $tag&quot; unless $tags{$tag};
++ return $self-&gt;{'_' . $tag};
++}
++
++sub is_source {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_arch} eq 'src';
++}
++
++sub is_binary {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_arch} ne 'src';
++}
++
++sub get_type {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_arch} eq 'src' ?
++ &quot;source&quot; :
++ &quot;binary&quot;;
++}
++
++sub get_canonical_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ if ($self-&gt;{_arch} eq 'src') {
++ return $self-&gt;{_name};
++ } else {
++ if ($self-&gt;{_sourcerpm}) {
++ $self-&gt;{_sourcerpm} =~ /^(\S+)-[^-]+-[^-]+\.src\.rpm$/;
++ return $1;
++ } else {
++ return undef;
++ }
++ }
++}
++
++sub as_string {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_name} ? $self-&gt;{_name} : '' .
++ '-' .
++ $self-&gt;{_version} ? $self-&gt;{_version} : '' .
++ '-' .
++ $self-&gt;{_release} ? $self-&gt;{_release} : '';
++}
++
++sub _to_number {
++ return refaddr($_[0]);
++}
++
++sub AUTOLOAD {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my $method = $AUTOLOAD;
++ $method =~ s/.*:://;
++ return if $method eq 'DESTROY';
++ croak &quot;invalid method&quot; unless $method =~ /^get_(\w+)$/;
++
++ my $tag = $1;
++ croak &quot;invalid tag $tag&quot; unless $tags{$tag};
++ return $self-&gt;{'_' . $tag};
++}
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Package/URPM.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Package/URPM.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Package/URPM.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,399 @@
++# $Id: URPM.pm 266577 2010-03-02 14:51:24Z bogdano $
++package Youri::Package::URPM;
++
++=head1 NAME
++
++Youri::Package::URPM - URPM-based rpm package implementation
++
++=head1 DESCRIPTION
++
++This is an URPM-based L&lt;Youri::Package&gt; implementation for rpm.
++
++It is merely a wrapper over URPM::Package class, with a more structured
++interface.
++
++=cut
++
++use strict;
++use warnings;
++use Carp;
++use URPM;
++use File::Spec;
++use Expect;
++use Scalar::Util qw/refaddr/;
++use base 'Youri::Package::RPM';
++use overload
++ '&quot;&quot;' =&gt; 'as_string',
++ '0+' =&gt; '_to_number',
++ fallback =&gt; 1;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Package::URPM object.
++
++Specific parameters:
++
++=over
++
++=item file $file
++
++Path of file to use for creating this package.
++
++=item header $header
++
++L&lt;URPM::Package&gt; object to use for creating this package.
++
++=back
++
++=cut
++
++sub _init {
++ my ($self, %options) = @_;
++
++ my $header;
++ HEADER: {
++ if (exists $options{header}) {
++ croak &quot;undefined header&quot;
++ unless $options{header};
++ croak &quot;invalid header&quot;
++ unless $options{header}-&gt;isa('URPM::Package');
++ $header = $options{header};
++ last HEADER;
++ }
++
++ if (exists $options{file}) {
++ croak &quot;undefined file&quot;
++ unless $options{file};
++ croak &quot;non-existing file $options{file}&quot;
++ unless -f $options{file};
++ croak &quot;non-readable file $options{file}&quot;
++ unless -r $options{file};
++ my $urpm = URPM-&gt;new();
++ $urpm-&gt;parse_rpm($options{file}, keep_all_tags =&gt; 1);
++ $header = $urpm-&gt;{depslist}-&gt;[0];
++ croak &quot;non-rpm file $options{file}&quot; unless $header;
++ last HEADER;
++ }
++
++ croak &quot;no way to extract header from arguments&quot;;
++ }
++
++ $self-&gt;{_header} = $header;
++ $self-&gt;{_file} = File::Spec-&gt;rel2abs($options{file});
++}
++
++sub compare_versions {
++ my ($class, $version1, $version2) = @_;
++
++ return URPM::rpmvercmp($version1, $version2);
++}
++
++sub check_ranges_compatibility {
++ my ($class, $range1, $range2) = @_;
++
++ return URPM::ranges_overlap($range1, $range2);
++}
++
++sub get_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;name();
++}
++
++sub get_version {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;version();
++}
++
++sub get_release {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;release();
++}
++
++sub get_revision {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;queryformat('%|EPOCH?{%{EPOCH}:}:{}|%{VERSION}-%{RELEASE}');
++}
++
++sub get_file_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_file} || die &quot;_file is not defined in header-only objects!\n&quot;;
++}
++
++sub get_arch {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;arch();
++}
++
++sub get_url {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;url();
++}
++
++sub get_summary {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;summary();
++}
++
++sub get_description {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;description();
++}
++
++sub get_packager {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;packager();
++}
++
++sub is_source {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;arch() eq 'src';
++}
++
++sub is_binary {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;arch() ne 'src';
++}
++
++sub get_type {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_header}-&gt;arch() eq 'src' ?
++ &quot;source&quot; :
++ &quot;binary&quot;;
++}
++
++sub get_age {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;buildtime();
++}
++
++sub get_source_package {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;sourcerpm();
++}
++
++sub get_canonical_name {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ if ($self-&gt;{_header}-&gt;arch() eq 'src') {
++ return $self-&gt;{_header}-&gt;name();
++ } else {
++ $self-&gt;{_header}-&gt;sourcerpm() =~ /^(\S+)-[^-]+-[^-]+\.src\.rpm$/;
++ return $1;
++ }
++}
++
++sub get_tag {
++ my ($self, $tag) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ croak &quot;invalid tag $tag&quot; unless $self-&gt;{_header}-&gt;can($tag);
++ return $self-&gt;{_header}-&gt;$tag();
++}
++
++sub get_requires {
++ my ($self) = @_;
++
++ return map {
++ $_ =~ /^([^[]+)(?:\[\*\])?(?:\[(.+)\])?$/;
++ [ $1, $2 ]
++ } $self-&gt;{_header}-&gt;requires();
++}
++
++sub get_provides {
++ my ($self) = @_;
++
++ return map {
++ $_ =~ /^([^[]+)(?:\[(.+)\])?$/;
++ [ $1, $2 &amp;&amp; $2 ne '*' ? $2 : undef ]
++ } $self-&gt;{_header}-&gt;provides();
++}
++
++sub get_obsoletes {
++ my ($self) = @_;
++
++ return map {
++ $_ =~ /^([^[]+)(?:\[(.+)\])?$/;
++ [ $1, $2 &amp;&amp; $2 ne '*' ? $2 : undef ]
++ } $self-&gt;{_header}-&gt;obsoletes();
++}
++
++sub get_conflicts {
++ my ($self) = @_;
++
++ return $self-&gt;{_header}-&gt;conflicts();
++}
++
++sub get_files {
++ my ($self) = @_;
++
++ my @modes = $self-&gt;{_header}-&gt;files_mode();
++ my @md5sums = $self-&gt;{_header}-&gt;files_md5sum();
++
++ return map {
++ [ $_, shift @modes, shift @md5sums ]
++ } $self-&gt;{_header}-&gt;files();
++}
++
++sub get_gpg_key {
++ my ($self) = @_;
++
++ my $signature = $self-&gt;{_header}-&gt;queryformat('%{SIGGPG:pgpsig}');
++
++ return if $signature eq '(not a blob)';
++
++ my $key_id = (split(/\s+/, $signature))[-1];
++
++ return substr($key_id, 8);
++}
++
++sub get_information {
++ my ($self) = @_;
++
++ return $self-&gt;{_header}-&gt;queryformat(&lt;&lt;EOF);
++Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|
++Version : %-27{VERSION} Vendor: %{VENDOR}
++Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}
++Install Date: %|INSTALLTIME?{%-27{INSTALLTIME:date}}:{(not installed) }| Build Host: %{BUILDHOST}
++Group : %-27{GROUP} Source RPM: %{SOURCERPM}
++Size : %-27{SIZE}%|LICENSE?{ License: %{LICENSE}}|
++Signature : %|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|
++%|PACKAGER?{Packager : %{PACKAGER}\n}|%|URL?{URL : %{URL}\n}|Summary : %{SUMMARY}
++Description :\n%{DESCRIPTION}
++EOF
++}
++
++sub get_changes {
++ my ($self) = @_;
++
++ my @names = $self-&gt;{_header}-&gt;changelog_name();
++ my @time = $self-&gt;{_header}-&gt;changelog_time();
++ my @text = $self-&gt;{_header}-&gt;changelog_text();
++
++ my @changes;
++ foreach my $i (0 .. $#names) {
++ $changes[$i] = [
++ $names[$i],
++ $time[$i],
++ $text[$i],
++ ];
++ }
++
++ return @changes;
++}
++
++sub get_last_change {
++ my ($self) = @_;
++
++ return [
++ ($self-&gt;{_header}-&gt;changelog_name())[0],
++ ($self-&gt;{_header}-&gt;changelog_time())[0],
++ ($self-&gt;{_header}-&gt;changelog_text())[0],
++ ];
++}
++
++sub as_string {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;fullname();
++}
++
++sub as_formated_string {
++ my ($self, $format) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;queryformat($format);
++}
++
++sub _to_number {
++ return refaddr($_[0]);
++}
++
++sub compare {
++ my ($self, $package) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_header}-&gt;compare_pkg($package-&gt;{_header});
++}
++
++sub satisfy_range {
++ my ($self, $range) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;check_ranges_compatibility(&quot;== &quot; . $self-&gt;get_revision(), $range);
++}
++
++sub sign {
++ my ($self, $name, $path, $passphrase, $target) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ # check if parent directory is writable
++ my $parent = (File::Spec-&gt;splitpath($self-&gt;{_file}))[1];
++ croak &quot;Unsignable package, parent directory is read-only&quot;
++ unless -w $parent;
++
++ # FIXME Will have to change that
++ # we sign with cooker key even fro 2007.0 because this is for testing section
++ return !system(&quot;sudo -H /root/bin/resign_cooker $self-&gt;{_file}&quot;);
++
++ my $command =
++ 'LC_ALL=C rpm --resign ' . $self-&gt;{_file} .
++ ' --define &quot;_gpg_name ' . $name . '&quot;' .
++ ' --define &quot;_gpg_path ' . $path . '&quot;';
++ my $expect = Expect-&gt;spawn($command) or die &quot;Couldn't spawn command $command: $!\n&quot;;
++ $expect-&gt;log_stdout(0);
++ $expect-&gt;expect(20, -re =&gt; 'Enter pass phrase:');
++ $expect-&gt;send(&quot;$passphrase\n&quot;);
++
++ $expect-&gt;soft_close();
++}
++
++sub extract {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ system(&quot;rpm2cpio $self-&gt;{_file} | cpio -id &gt;/dev/null 2&gt;&amp;1&quot;);
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Package.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Package.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Package.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,336 @@
++# $Id: Package.pm 223952 2007-06-23 13:54:13Z pixel $
++package Youri::Package;
++
++=head1 NAME
++
++Youri::Package - Abstract package class
++
++=head1 DESCRIPTION
++
++This abstract class defines Youri::Package interface.
++
++=cut
++
++use Carp;
++use strict;
++use warnings;
++
++use constant DEPENDENCY_NAME =&gt; 0;
++use constant DEPENDENCY_RANGE =&gt; 1;
++
++use constant FILE_NAME =&gt; 0;
++use constant FILE_MODE =&gt; 1;
++use constant FILE_MD5SUM =&gt; 2;
++
++use constant CHANGE_AUTHOR =&gt; 0;
++use constant CHANGE_TIME =&gt; 1;
++use constant CHANGE_TEXT =&gt; 2;
++
++=head1 CLASS METHODS
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Package object.
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ @_
++ );
++
++ my $self = bless {
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head2 get_pattern($name, $version, $release, $arch)
++
++Returns a pattern matching a file for a package, using available informations.
++
++=head2 compare_revisions($revision1, $revision2)
++
++Compares two revision tokens, and returns a numeric value:
++
++=over
++
++=item positive if first revision is higher
++
++=item null if both revisions are equal
++
++=item negative if first revision is lower
++
++=back
++
++=head2 check_ranges_compatibility($range1, $range2)
++
++Returns a true value if given revision ranges are compatible.
++
++=head1 INSTANCE METHODS
++
++=head2 as_file()
++
++Returns the file corresponding to this package.
++
++=head2 as_string()
++
++Returns a string representation of this package.
++
++=head2 as_formated_string(I&lt;format&gt;)
++
++Returns a string representation of this package, formated according to
++I&lt;format&gt;. Format is a string, where each %{foo} token will get replaced by
++equivalent tag value.
++
++=head2 get_name()
++
++Returns the name of this package.
++
++=head2 get_version()
++
++Returns the version of this package.
++
++=head2 get_release()
++
++Returns the release of this package.
++
++=head2 get_revision()
++
++Returns the revision of this package.
++
++=head2 get_arch()
++
++Returns the architecture of this package.
++
++=head2 get_file_name()
++
++Returns the file name of this package (name-version-release.arch.extension).
++
++=head2 is_source()
++
++Returns true if this package is a source package.
++
++=head2 is_binary()
++
++Returns true if this package is a binary package.
++
++=head2 is_debug()
++
++Returns true if this package is a debug package.
++
++=head2 get_type()
++
++Returns the type (binary/source) of this package.
++
++=head2 get_age()
++
++Returns the age of this package
++
++=head2 get_url()
++
++Returns the URL of this package
++
++=head2 get_summary()
++
++Returns the summary of this package
++
++=head2 get_description()
++
++Returns the description of this package
++
++=head2 get_packager()
++
++Returns the packager of this package.
++
++=head2 get_source_package()
++
++Returns the name of the source package of this package.
++
++=head2 get_tag($tag)
++
++Returns the value of tag $tag of this package.
++
++=head2 get_canonical_name()
++
++Returns the canonical name of this package, shared by its multiple components,
++usually the one from the source package.
++
++=head2 get_requires()
++
++Returns the list of dependencies required by this package, each dependency
++being represented as an array reference, with the following informations:
++
++=over
++
++=item B&lt;name&gt;
++
++Name of the dependency (index DEPENDENCY_NAME)
++
++=item B&lt;range&gt;
++
++Range of the dependency (index DEPENDENCY_RANGE)
++
++=back
++
++For more conveniency, fields index are available as constant in this package.
++
++=head2 get_provides()
++
++Returns the list of dependencies provided by this package, each dependency
++being represented as an array reference, using the same structure as previous method.
++
++=head2 get_obsoletes()
++
++Returns the list of other packages obsoleted by this one, each one
++being represented as an array reference, using the same structure as previous method.
++
++=head2 get_conflicts()
++
++Returns the list of other packages conflicting with this one.
++
++=head2 get_files()
++
++Returns the list of files contained in this package, each file being
++represented as an array reference, with the following informations:
++
++=over
++
++=item B&lt;name&gt;
++
++Name of the file (index FILE_NAME).
++
++=item B&lt;mode&gt;
++
++Mode of the file (index FILE_MODE).
++
++=item B&lt;md5sum&gt;
++
++Md5sum of the file (index FILE_MD5SUM).
++
++=back
++
++For more conveniency, fields index are available as constant in this package.
++
++=head2 get_gpg_key()
++
++Returns the gpg key id of package signature.
++
++=head2 get_information()
++
++Returns formated informations about the package.
++
++=head2 get_changes()
++
++Returns the list of changes for this package, each change being
++represented as an array reference, with the following informations:
++
++=over
++
++=item B&lt;author&gt;
++
++Author of the change (index CHANGE_AUTHOR).
++
++=item B&lt;time&gt;
++
++Time of the change (index CHANGE_TIME).
++
++=item B&lt;text&gt;
++
++Raw textual description of the change (index CHANGE_TEXT).
++
++=back
++
++For more conveniency, fields index are available as constant in this package.
++
++=head2 get_last_change()
++
++Returns the last change for this package, as as structure described before.
++
++=head2 compare($package)
++
++Compares ordering with other package, according to their corresponding revision
++tokens, and returns a numeric value:
++
++=over
++
++=item positive if this package is newer
++
++=item null if both have same revision
++
++=item negative if this package is older
++
++=back
++
++=head2 satisfy_range($range)
++
++Returns a true value if this package revision satisfies given revision range.
++
++=head2 sign($name, $path, $passphrase)
++
++Signs the package with given name, keyring path and passphrase.
++
++=head2 extract()
++
++Extract package content in local directory.
++
++=head1 SUBCLASSING
++
++All instances methods have to be implemented.
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++sub get_file {
++ my ($self) = @_;
++ carp &quot;Deprecated method, use as_file now&quot;;
++
++ return $self-&gt;as_file();
++}
++
++sub get_full_name {
++ my ($self) = @_;
++ carp &quot;Deprecated method, use as_string now&quot;;
++
++ return $self-&gt;as_string();
++}
++
++sub compare_versions {
++ my ($self, $version1, $version2) = @_;
++ carp &quot;Deprecated method, use compare_revisions now&quot;;
++
++ return $self-&gt;compare_revisions($version1, $version2);
++}
++
++sub compare_ranges {
++ my ($self, $range1, $range2) = @_;
++ carp &quot;Deprecated method, use are_range_compatible now&quot;;
++
++ return $self-&gt;check_ranges_compatibility($range1, $range2);
++}
++
++sub get_revision_name {
++ my ($self) = @_;
++ carp &quot;Deprecated method, use as_formated_string('%name-%version-%release') now&quot;;
++
++ return $self-&gt;as_formated_string('%{name}-%{version}-%{release}');
++}
++
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,546 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
++package Youri::Repository::Mandriva_upload;
++
++=head1 NAME
++
++Youri::Repository::PLF - PLF repository implementation
++
++=head1 DESCRIPTION
++
++This module implements PLF repository.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Memoize;
++use File::Find 'find';
++use base qw/Youri::Repository/;
++use MDV::Distribconf::Build;
++use SVN::Client;
++
++use constant {
++ PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
++ PACKAGE_CHARSET =&gt; 'utf8'
++};
++
++memoize('_get_media_config');
++
++my %translate_arch = (
++ i386 =&gt; 'i586',
++ sparc64 =&gt; 'sparcv9',
++);
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ noarch =&gt; 'i586', # noarch packages policy
++ src =&gt; 'i586',
++ install_root =&gt; '',
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ queue =&gt; '',
++ rejected =&gt; '',
++ @_
++ );
++ foreach my $var ('upload_state') {
++ $self-&gt;{&quot;_$var&quot;} = [];
++ foreach my $value (split ' ', $options{$var}) {
++ push @{$self-&gt;{&quot;_$var&quot;}}, $value
++ }
++ }
++ print &quot;Initializing repository\n&quot;;
++ foreach my $v ('rejected', 'svn', 'queue', 'noarch', 'install_root', 'upload_root', 'verbose') {
++ $self-&gt;{&quot;_$v&quot;} = $options{$v}
++ }
++ foreach my $target (@{$options{targets}}) {
++ $self-&gt;{$target} = [];
++ print &quot;Adding $target ($options{$target}{arch})\n&quot; if $self-&gt;{_verbose};
++ foreach my $value (split ' ', $options{$target}{arch}) {
++ push @{$self-&gt;{_arch}{$target}}, $value;
++ push @{$self-&gt;{_extra_arches}}, $value
++ }
++ }
++ $self
++}
++
++sub get_group_id {
++ my ($user) = @_;
++ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
++ $year+=1900;
++ $mon++;
++ my $hostname = `hostname`;
++ my ($host) = $hostname =~ /([^.]*)/;
++ sprintf &quot;$year%02d%02d%02d%02d%02d.$user.$host.${$}_&quot;, $mon, $mday, $hour, $min, $sec;
++}
++
++sub get_target_arch {
++ my ($self, $target) = $_;
++ return $self-&gt;{_arch}{$target}
++}
++
++sub set_arch_changed {
++ my ($self, $target, $arch) = @_;
++ if ($arch eq 'noarch') {
++ $self-&gt;{_arch_changed}{$_} = 1 foreach @{$self-&gt;{_arch}{$target}}
++ } elsif ($arch eq 'src') {
++ $self-&gt;{_arch_changed} = $self-&gt;{_src}
++ } else {
++ $self-&gt;{_arch_changed}{$arch} = 1
++ }
++}
++
++sub get_arch_changed {
++ my ($self, $target) = @_;
++ return [ keys %{$self-&gt;{_arch_changed}} ]
++}
++
++sub set_install_dir_changed {
++ my ($self, $install_dir) = @_;
++ $self-&gt;{_install_dir_changed}{$install_dir} = 1;
++}
++
++sub get_install_dir_changed {
++ my ($self) = @_;
++ return [ keys %{$self-&gt;{_install_dir_changed}} ];
++}
++
++sub _get_media_config {
++ my ($self, $target) = @_;
++ my %media;
++ my $real_target = $target;
++ $real_target =~ s/_force//;
++ foreach my $arch (@{$self-&gt;{_arch}{$target}}) {
++ my $root = &quot;$self-&gt;{_install_root}/$real_target/$arch&quot;;
++ my $distrib = MDV::Distribconf::Build-&gt;new($root);
++ print &quot;Getting media config from $root\n&quot; if $self-&gt;{_verbose};
++ $self-&gt;{distrib}{$arch} = $distrib;
++ $distrib-&gt;loadtree or die &quot;$root does not seem to be a distribution tree\n&quot;;
++ $distrib-&gt;parse_mediacfg;
++ foreach my $media ($distrib-&gt;listmedia) {
++ my $rpms = $distrib-&gt;getvalue($media, 'rpms');
++ my $debug_for = $distrib-&gt;getvalue($media, 'debug_for');
++ my $srpms = $distrib-&gt;getvalue($media, 'srpms');
++ my $path = $distrib-&gt;getfullpath($media, 'path');
++ if (!$rpms) {
++ if (-d $path) {
++ print &quot;MEDIA defining $media in $path\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ $media{$arch}{$media} = $path
++ } else {
++ print &quot;ERROR $path does not exist for media $media on $arch\n&quot;
++ }
++ } else {
++ my ($media) = split ' ', $rpms;
++ if (-d $path) {
++ print &quot;MEDIA defining SOURCE media for $media in $path\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ $media{src}{$media} = $path
++ } else {
++ print &quot;ERROR $path does not exist for source media $media on $arch\n&quot;
++ }
++ }
++ }
++ }
++ \%media
++}
++
++sub get_package_class {
++ return PACKAGE_CLASS;
++}
++
++sub get_package_charset {
++ return PACKAGE_CHARSET;
++}
++
++sub get_upload_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $arch = $package-&gt;get_arch();
++ return
++ $self-&gt;{_upload_root} .
++ &quot;/$self-&gt;{_queue}/$target/&quot; .
++ _get_section($self, $package, $target, $user_context, $app_context) .
++ '/' .
++ ($user_context-&gt;{prefix} ? '' : get_group_id($user_context-&gt;{user}))
++}
++
++sub get_install_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ return $self-&gt;_get_path($package, $target, $user_context, $app_context);
++}
++
++
++sub get_distribution_paths {
++ my ($self, $package, $target) = @_;
++
++ return $self-&gt;_get_distribution_paths($package, $target);
++}
++
++sub get_archive_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ return $self-&gt;_get_path($package, $target, $user_context, $app_context);
++}
++
++sub get_reject_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ return $self-&gt;{_rejected};
++}
++
++
++sub _get_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++ my $arch = $app_context-&gt;{arch} || $package-&gt;get_arch();
++ $arch = $translate_arch{$arch} || $arch;
++ if ($arch eq 'noarch') {
++ $arch = $self-&gt;{_noarch}
++ } elsif ($arch eq 'src') {
++ return &quot;$target/SRPMS/$section&quot;
++ }
++ &quot;$target/$arch/media/$section&quot;
++}
++
++sub _get_distribution_paths {
++ my ($self, $package, $target) = @_;
++
++ my $arch = $package-&gt;get_arch();
++ $arch = $translate_arch{$arch} || $arch;
++ if ($arch eq 'noarch') {
++ map { &quot;$target/$_&quot; } $self-&gt;get_extra_arches;
++ } elsif ($arch eq 'src') {
++ die &quot;no way to get distribution path using a $arch package&quot;;
++ } else {
++ &quot;$target/$arch&quot;;
++ }
++}
++
++sub get_arch {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ my $arch = $package-&gt;get_arch();
++ $arch = $translate_arch{$arch} || $arch;
++ if ($arch eq 'noarch') {
++ $arch = $self-&gt;{_noarch}
++ }
++ $arch
++}
++
++sub get_version_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++
++ return &quot;$self-&gt;{_module}/$section&quot;;
++}
++
++=head2 get_replaced_packages($package, $target, $user_context, $app_context)
++
++Overrides parent method to add libified packages.
++
++=cut
++
++sub get_replaced_packages {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @replaced_packages =
++ $self-&gt;SUPER::get_replaced_packages($package, $target, $user_context, $app_context);
++
++ # mandriva lib policy:
++ # library package names change with revision, making mandatory to
++ # duplicate older revisions search with a custom pattern
++ my $name = $package-&gt;get_name();
++ if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
++ push(@replaced_packages,
++ grep { $package-&gt;compare($_) &gt; 0 }
++ map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $user_context, $app_context),
++ PACKAGE_CLASS-&gt;get_pattern(
++ $1 . '[\d_\.]+' . $2, # custom name pattern
++ undef,
++ undef,
++ $package-&gt;get_arch()
++ ),
++ )
++ );
++ }
++
++ # kernel packages have the version in the name
++ # binary dkms built for old kernels have to be removed too
++ if ($name =~ /^kernel-([^\d]*-)?([\d.]*)-(.*)$/) { # &quot;desktop&quot;, &quot;2.6.28&quot;, &quot;2mnb&quot;
++ push(@replaced_packages,
++ map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $user_context, $app_context),
++ PACKAGE_CLASS-&gt;get_pattern(
++ '(kernel-' . $1 . '\d.*|.*-kernel-[\d.]*-' . $1 . '\d.*)',
++ undef,
++ undef,
++ $package-&gt;get_arch()
++ ),
++ )
++ );
++ }
++
++ return @replaced_packages;
++
++}
++
++sub _get_main_section {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++ my ($main_section) = $section =~ m,^([^/]+),;
++ $main_section
++}
++
++sub _get_section {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $name = $package-&gt;get_name();
++ my $cname = $package-&gt;get_canonical_name();
++ my $version = $package-&gt;get_version();
++ my $release = $package-&gt;get_release();
++ my $section = $user_context-&gt;{section};
++ my $media = $self-&gt;_get_media_config($target);
++ my $arch = $package-&gt;get_arch();
++ my $file = $package-&gt;as_file();
++ $file =~ s,/+,/,g; # unneeded?
++ # FIXME: use $self-&gt;get_arch()
++ $arch = $self-&gt;{_noarch} if $arch eq 'noarch';
++ $arch = $translate_arch{$arch} || $arch;
++
++ if (!$section) {
++ $section = $self-&gt;{packages}{$file}{section};
++ print &quot;Section undefined, repository says it is '$section' for '$file'\n&quot; if $self-&gt;{_verbose};
++ }
++ if ($section &amp;&amp; $section !~ /debug_/ &amp;&amp; $package-&gt;is_debug()) {
++ $section = &quot;debug_$section&quot;
++ }
++
++ # if have section already, check if it exists, and may return immediately
++ if ($section) {
++ print &quot;Using requested section $section\n&quot;;
++ if ($media-&gt;{$arch}{$section}) {
++ return $section
++ } else {
++ die &quot;FATAL youri: unknown section $section for target $target for arch $arch\n&quot;
++ }
++ }
++ # else, try to find section automatically
++
++ # pattern for search of src package with specific version-release,
++ # should be searched first, because we prefer to find the precise
++ # section a package is already in
++ my $specific_source_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $cname,
++ $version,
++ $release,
++ 'src'
++ );
++
++ my $source_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $cname,
++ undef,
++ undef,
++ 'src'
++ );
++
++ # if a media has no source media configured, or if it is a debug
++ # package, we search in binary media
++
++ # pattern for search when a binary media has no src media configured
++ my $specific_binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $name,
++ $version,
++ $release,
++ $arch
++ );
++
++ # last resort pattern: previous existing binary packages
++ my $binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $name,
++ undef,
++ undef,
++ $arch
++ );
++
++ # first try to find section for the specific version, as it is possibly already there;
++ # this is the case for when called in Youri::Submit::Action::Archive, to find the
++ # section the package got installed
++ print &quot;Looking for package $name with version $version-$release\n&quot;;
++ foreach my $m (keys %{$media-&gt;{$arch}}) {
++ print &quot; .. section '$m' path '&quot;.$media-&gt;{$arch}{$m}.&quot;'\n&quot; if $self-&gt;{_verbose};
++ # - prefer source for non-debug packages, use binary if there is no source media configured
++ # - debug packages must be searched in binary medias, due to their
++ # src section != binary section; NOTE: should/need we search in
++ # src medias and add the 'debug_' prefix?
++ if (!$package-&gt;is_debug() &amp;&amp; $media-&gt;{src}{$m}) {
++ next unless $self-&gt;get_files('', $media-&gt;{src}{$m}, $specific_source_pattern);
++ } else {
++ next unless $self-&gt;get_files('', $media-&gt;{$arch}{$m}, $specific_binary_pattern);
++ }
++ $section = $m;
++ last;
++ }
++
++ # if still not found, try finding any version of the package in a
++ # /release subsection (safe default: /release is default for cooker,
++ # should be locked for released distros, and we don't risk wrongly
++ # choosing /backports, /testing, or /updates);
++ # this is the case for when called at submit, to find the section where
++ # the package already resides
++ if (!$section) {
++ # debug packages should be found by previous specific version search
++ # NOTE: as above, should/need we search here and add the 'debug_' prefix?
++ # ... probably... as at least mdv-youri-submit-force will process debug packages
++ if ($package-&gt;is_debug() &amp;&amp; $self-&gt;{_verbose}) {
++ print &quot;Warning: debug package $name with version $version-$release not found.\n&quot;;
++ }
++
++ print &quot;Warning: Looking for any section with a package $name of any version\n&quot;;
++ foreach my $m (keys %{$media-&gt;{$arch}}) {
++ print &quot; .. section '$m' path '&quot;.$media-&gt;{$arch}{$m}.&quot;'\n&quot; if $self-&gt;{_verbose};
++ # NOTE: !$package-&gt;is_debug() test is here to prevent when above FATAL error is removed
++ next if $m !~ /release/ || ($m =~ /debug/ &amp;&amp; !$package-&gt;is_debug());
++ # - prefer source
++ if ($media-&gt;{src}{$m}) {
++ next unless $self-&gt;get_files('', $media-&gt;{src}{$m}, $source_pattern);
++ } else {
++ next unless $self-&gt;get_files('', $media-&gt;{$arch}{$m}, $binary_pattern);
++ }
++ $section = $m;
++ last;
++ }
++ }
++
++ # FIXME: doing this here is wrong; this way the caller can never know if
++ # a section was actually found or not; should return undef and let the
++ # caller set a default (Note: IIRC PLF|Zarb has this right, see there) -spuk
++ print STDERR &quot;Warning: Can't guess destination: section missing, defaulting to contrib/release\n&quot; unless $section;
++ $section ||= 'contrib/release';
++
++ # next time we don't need to search everything again
++ $self-&gt;{packages}{$file}{section} = $section;
++
++ print &quot;Section is '$section'.\n&quot;;
++
++ return $section;
++}
++
++sub get_upload_newer_revisions {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $arch = $package-&gt;get_arch();
++ my $name = $package-&gt;get_full_name;
++ $name =~ s/^\@\d+://;
++ my $pattern = $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(), undef, undef, $arch);
++ my $media = $self-&gt;_get_media_config($target);
++ my @packages;
++ foreach my $state (@{$self-&gt;{_upload_state}}) {
++ foreach my $m (keys %{$media-&gt;{$arch}}) {
++ my $path = &quot;$self-&gt;{_upload_root}/$state/$target/$m&quot;;
++ print &quot;Looking for package $package revisions for $target in $path (pattern $pattern)\n&quot; if $self-&gt;{_verbose};
++ find(
++ sub {
++ s/\d{14}\.[^.]*\.[^.]*\.\d+_//;
++ s/^\@\d+://;
++ return if ! /^$pattern/;
++ return if /\.info$/;
++ print &quot;Find $_\n&quot;;
++ push @packages, $File::Find::name if $package-&gt;check_ranges_compatibility(&quot;== $name&quot;, &quot;&lt; $_&quot;)
++ }, $path);
++ }
++ }
++ return
++ @packages;
++}
++
++sub package_in_svn {
++ my ($self, $srpm_name) = @_;
++ my $ctx = new SVN::Client(
++ auth =&gt; [SVN::Client::get_simple_provider(),
++ SVN::Client::get_simple_prompt_provider(\&amp;simple_prompt,2),
++ SVN::Client::get_username_provider()]
++ );
++
++ my $svn_entry = $ctx-&gt;ls(&quot;$self-&gt;{_svn}/$srpm_name&quot;, 'HEAD', 0);
++ if ($svn_entry) {
++ print &quot;Package $srpm_name is in the SVN\n&quot;;
++ return 1
++ }
++}
++
++sub get_svn_url {
++ my ($self) = @_;
++ $self-&gt;{_svn}
++}
++
++sub get_revisions {
++ my ($self, $package, $target, $user_context, $app_context, $filter) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package revisions for $target\n&quot; if $self-&gt;{_verbose} &gt; 0;
++
++ my $arch = $app_context-&gt;{arch} || $user_context-&gt;{arch} || $package-&gt;get_arch();
++ my $media_arch = $arch eq 'noarch' ? $self-&gt;{_noarch} : $arch;
++ my $path = $arch eq 'src' ? &quot;$target/SRPMS/&quot; : &quot;$target/$media_arch/media&quot;;
++ my $media = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++ my $name = $package-&gt;get_name();
++ my @packages = map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$path/$media&quot;,
++ $self-&gt;get_package_class()-&gt;get_pattern(
++ $name,
++ undef,
++ undef,
++ $package-&gt;get_arch(),
++ )
++ );
++
++ @packages = grep { $filter-&gt;($_) } @packages if $filter;
++
++ return
++ sort { $b-&gt;compare($a) } # sort by revision order
++ @packages;
++}
++
++sub reject {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++
++}
++
++sub get_archive_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_archive_root}
++}
++
++
++# 20060801 warly
++#
++# Upload steps
++# SRPMS are uploaded in /home/mandrake/uploads/todo/$target/$media/group_id
++#
++#
++#
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,274 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
++package Youri::Repository::Mandriva_upload_pre;
++
++=head1 NAME
++
++Youri::Repository::PLF - PLF repository implementation
++
++=head1 DESCRIPTION
++
++This module implements PLF repository.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Memoize;
++use File::Find 'find';
++use base qw/Youri::Repository/;
++use SVN::Client;
++use constant {
++ PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
++ PACKAGE_CHARSET =&gt; 'utf8'
++};
++
++memoize('_get_section');
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ module =&gt; 'SPECS', # CVS module
++ noarch =&gt; 'i586', # noarch packages policy
++ svn =&gt; '',
++ upload_root =&gt; '',
++ @_
++ );
++
++ $self-&gt;{_module} = $options{module};
++ $self-&gt;{_noarch} = $options{noarch};
++ $self-&gt;{_svn} = $options{svn};
++ $self-&gt;{_upload_root} = $options{upload_root};
++
++ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
++ $year+=1900;
++ my $hostname = `hostname`;
++ my ($host) = $hostname =~ /([^.]*)/;
++ $self-&gt;{group_dir} = sprintf &quot;$ENV{SUDO_USER}.$host.$$.$year%02d%02d%02d%02d%02d&quot;, $mon, $mday, $hour, $min, $sec;
++}
++
++sub get_package_class {
++ return PACKAGE_CLASS;
++}
++
++sub package_in_svn {
++ my ($self, $srpm_name) = @_;
++ my $ctx = new SVN::Client(
++ auth =&gt; [SVN::Client::get_simple_provider(),
++ SVN::Client::get_simple_prompt_provider(\&amp;simple_prompt,2),
++ SVN::Client::get_username_provider()]
++ );
++
++ my $svn_entry = $ctx-&gt;ls(&quot;$self-&gt;{_svn}/&quot;, 'HEAD', 0);
++ foreach (keys %{$svn_entry}) {
++ if ($srpm_name eq $_) {
++ print &quot;Package $_ is in the SVN\n&quot;;
++ return 1
++ }
++ }
++}
++
++sub get_svn_url {
++ my ($self) = @_;
++ $self-&gt;{_svn}
++}
++
++sub get_revisions {
++ my ($self, $package, $target, $define, $filter) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package revisions for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ my $arch = $define-&gt;{arch} || $package-&gt;get_arch;
++ if ($arch eq 'src') {
++ $arch = 'SRPMS'
++ } else {
++ $arch .= '/media'
++ }
++ my @packages;
++ foreach my $dir ('main', 'contrib') {
++ print &quot;Looking into $self-&gt;{_install_root}/$target/$arch/$dir/release\n&quot;;
++ push @packages,
++ map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$target/$arch/$dir/release&quot; ,
++ $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(),undef, undef, $arch)
++ );
++ }
++
++ @packages = grep { $filter-&gt;($_) } @packages if $filter;
++
++ return
++ sort { $b-&gt;compare($a) } # sort by revision order
++ @packages;
++}
++
++sub get_package_charset {
++ return PACKAGE_CHARSET;
++}
++
++sub get_upload_dir {
++ my ($self, $package, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $arch = $package-&gt;get_arch();
++ my $section = $self-&gt;_get_section($package, $target, $define);
++ my $media_path = $section eq 'main' ? $target : $target =~ /^cooker/ ? &quot;contrib&quot; : &quot;$target/contrib&quot;;
++ my $arch_path = $arch eq 'src' ? 'SRPMS' : 'RPMS';
++ my $force = $target =~ /_force/ ? 'force' : '';
++ $self-&gt;{_upload_root} . &quot;/$media_path/$force/$arch_path/&quot;
++}
++
++sub get_arch {
++ my ($self, $package, $target, $define) = @_;
++ my $arch = $package-&gt;get_arch();
++ if ($arch eq 'noarch') {
++ $arch = $self-&gt;{_noarch}
++ }
++ $arch
++}
++
++sub get_install_path {
++ my ($self, $package, $target, $define) = @_;
++
++ return $self-&gt;_get_path($package, $target, $define);
++}
++
++sub get_archive_path {
++ my ($self, $package, $target, $define) = @_;
++
++ return $self-&gt;_get_path($package, $target, $define);
++}
++
++sub _get_path {
++ my ($self, $package, $target, $define) = @_;
++
++ my $arch = $package-&gt;get_arch;
++ if ($arch eq 'src') {
++ $arch = 'SRPMS'
++ } else {
++ $arch .= '/media'
++ }
++ my $section = $self-&gt;_get_section($package, $target, $define);
++
++ return &quot;$target/$arch/$section/release/&quot;;
++}
++
++
++sub get_version_path {
++ my ($self, $package, $target, $define) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $define);
++
++ return &quot;$self-&gt;{_module}/$section/release/&quot;;
++}
++
++=head2 get_replaced_packages($package, $target, $define)
++
++Overrides parent method to add libified packages.
++
++=cut
++
++sub get_replaced_packages {
++ my ($self, $package, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @replaced_packages =
++ $self-&gt;SUPER::get_replaced_packages($package, $target, $define);
++
++ # mandriva lib policy:
++ # library package names change with revision, making mandatory to
++ # duplicate older revisions search with a custom pattern
++ my $name = $package-&gt;get_name();
++ if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
++ push(@replaced_packages,
++ grep { $package-&gt;compare($_) &gt; 0 }
++ map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $define),
++ PACKAGE_CLASS-&gt;get_pattern(
++ $1 . '[\d_\.]+' . $2, # custom name pattern
++ undef,
++ undef,
++ $package-&gt;get_arch()
++ ),
++ )
++ );
++ }
++
++ return @replaced_packages;
++
++}
++
++sub _get_section {
++ my ($self, $package, $target, $define) = @_;
++
++ my $section;
++
++ # try to find section automatically
++ my $arch = $package-&gt;get_arch();
++ $arch = $self-&gt;{_noarch} if $arch eq 'noarch';
++
++ my $source_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $package-&gt;get_canonical_name(),
++ undef,
++ undef,
++ 'src'
++ );
++
++ my $binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $package-&gt;get_name(),
++ undef,
++ undef,
++ $arch
++ );
++
++ # for each potential section, try to match
++ # a suitable source patten in source directory
++ # a suitable binary patten in binary directory
++ foreach my $dir (qw/main contrib/) {
++ next unless
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$target/SRPMS/$dir/release&quot;,
++ $source_pattern
++ ) || $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$target/$arch/media/$dir/release&quot;,
++ $binary_pattern
++ );
++ print &quot;Section is $dir\n&quot;;
++ $section = $dir;
++ last;
++ }
++
++ # use defined section if not found
++ $section = $define-&gt;{section} unless $section;
++
++ $section || 'contrib'
++}
++
++sub get_upload_newer_revisions {
++ my ($self, $package, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $arch = $package-&gt;get_arch();
++ my $pattern = $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(), undef, undef, $arch);
++ print &quot;Looking for package $package revisions for $target in $self-&gt;{_upload_root} (pattern $pattern)\n&quot;;
++ my @packages;
++ foreach my $dir ('cooker', 'contrib') {
++ find(sub { return if ! /^$pattern/; print &quot;Find $_\n&quot;; push @packages, $File::Find::name if $package-&gt;compare($self-&gt;get_package_class()-&gt;new(file =&gt; $File::Find::name)) &lt;= 0 }, &quot;$self-&gt;{_upload_root}/$dir&quot;);
++ }
++ return
++ @packages;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Repository/PLF.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/PLF.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/PLF.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,196 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
++package Youri::Repository::PLF;
++
++=head1 NAME
++
++Youri::Repository::PLF - PLF repository implementation
++
++=head1 DESCRIPTION
++
++This module implements PLF repository.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Memoize;
++use base qw/Youri::Repository/;
++use constant {
++ PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
++ PACKAGE_CHARSET =&gt; 'utf8'
++};
++
++memoize('_get_section');
++
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ module =&gt; 'SPECS', # CVS module
++ noarch =&gt; 'noarch', # noarch packages policy
++ @_
++ );
++
++ $self-&gt;{_module} = $options{module};
++ $self-&gt;{_noarch} = $options{noarch};
++}
++
++sub get_package_class {
++ return PACKAGE_CLASS;
++}
++
++sub get_package_charset {
++ return PACKAGE_CHARSET;
++}
++
++sub get_install_path {
++ my ($self, $package, $target, $define) = @_;
++
++ return $self-&gt;_get_path($package, $target, $define);
++}
++
++sub get_archive_path {
++ my ($self, $package, $target, $define) = @_;
++
++ return $self-&gt;_get_path($package, $target, $define);
++}
++
++sub _get_path {
++ my ($self, $package, $target, $define) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $define);
++
++ my $subpath = $self-&gt;_get_subpath($package, $target);
++
++ return &quot;$section/$subpath&quot;;
++}
++
++
++sub get_version_path {
++ my ($self, $package, $target, $define) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $define);
++
++ return &quot;$self-&gt;{_module}/$section&quot;;
++}
++
++=head2 get_replaced_packages($package, $target, $define)
++
++Overrides parent method to add libified packages.
++
++=cut
++
++sub get_replaced_packages {
++ my ($self, $package, $target, $define) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @replaced_packages =
++ $self-&gt;SUPER::get_replaced_packages($package, $target, $define);
++
++ # mandriva lib policy:
++ # library package names change with revision, making mandatory to
++ # duplicate older revisions search with a custom pattern
++ my $name = $package-&gt;get_name();
++ if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
++ push(@replaced_packages,
++ grep { $package-&gt;compare($_) &gt; 0 }
++ map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $define),
++ PACKAGE_CLASS-&gt;get_pattern(
++ $1 . '[\d_\.]+' . $2, # custom name pattern
++ undef,
++ undef,
++ $package-&gt;get_arch()
++ ),
++ )
++ );
++ }
++
++ return @replaced_packages;
++
++}
++
++sub _get_section {
++ my ($self, $package, $target, $define) = @_;
++
++ my $section;
++
++ # try to find section automatically
++ my $arch = $package-&gt;get_arch();
++
++ my $source_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $package-&gt;get_canonical_name(),
++ undef,
++ undef,
++ 'src'
++ );
++
++ my $binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $package-&gt;get_name(),
++ undef,
++ undef,
++ $arch
++ );
++
++ my $source_subpath = $self-&gt;_get_subpath($package, $target, 'src');
++ my $binary_subpath = $self-&gt;_get_subpath($package, $target, $arch);
++
++ # for each potential section, try to match
++ # a suitable source patten in source directory
++ # a suitable binary patten in binary directory
++ foreach my $dir (qw/free non-free/) {
++ next unless
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$dir/$source_subpath&quot;,
++ $source_pattern
++ ) || $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$dir/$binary_subpath&quot;,
++ $binary_pattern
++ );
++ $section = $dir;
++ last;
++ }
++
++ # use defined section if not found
++ $section = $define-&gt;{section} unless $section;
++
++ die &quot;Can't guess destination: section missing&quot; unless $section;
++
++ return $section;
++}
++
++sub _get_subpath {
++ my ($self, $package, $target, $arch) = @_;
++
++ my $subpath;
++
++ # use package arch if not specified
++ $arch = $package-&gt;get_arch() unless $arch;
++
++ if ($arch eq 'src') {
++ $subpath = 'src';
++ } else {
++ if ($arch eq 'noarch') {
++ $subpath = &quot;$target/$self-&gt;{_noarch}&quot;;
++ } else {
++ $subpath = &quot;$target/$arch&quot;;
++ }
++ }
++
++ return $subpath;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Repository.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,492 @@
++# $Id: Base.pm 631 2006-01-26 22:22:23Z guillomovitch $
++package Youri::Repository;
++
++=head1 NAME
++
++Youri::Repository - Abstract repository
++
++=head1 DESCRIPTION
++
++This abstract class defines Youri::Repository interface.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use File::Basename;
++use Youri::Package;
++
++=head1 CLASS METHODS
++
++
++=head2 new(%args)
++
++Creates and returns a new Youri::Repository object.
++
++No generic parameters (subclasses may define additional ones).
++
++Warning: do not call directly, call subclass constructor instead.
++
++=cut
++
++sub new {
++ my $class = shift;
++ croak &quot;Abstract class&quot; if $class eq __PACKAGE__;
++
++ my %options = (
++ install_root =&gt; '', # path to top-level directory
++ archive_root =&gt; '', # path to top-level directory
++ version_root =&gt; '', # path to top-level directory
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ @_
++ );
++
++
++ croak &quot;no install root&quot; unless $options{install_root};
++ croak &quot;invalid install root&quot; unless -d $options{install_root};
++
++ my $self = bless {
++ _install_root =&gt; $options{install_root},
++ _archive_root =&gt; $options{archive_root},
++ _version_root =&gt; $options{version_root},
++ _test =&gt; $options{test},
++ _verbose =&gt; $options{verbose},
++ }, $class;
++
++ $self-&gt;_init(%options);
++
++ return $self;
++}
++
++sub _init {
++ # do nothing
++}
++
++=head1 INSTANCE METHODS
++
++=head2 get_package_class()
++
++Return package class for this repository.
++
++=cut
++
++sub get_package_class {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ return $self-&gt;{_package_class};
++}
++
++=head2 get_package_charset()
++
++Return package charset for this repository.
++
++=cut
++
++sub get_package_charset {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ return $self-&gt;{_package_charset};
++}
++
++=head2 get_extra_arches()
++
++Return the list of additional archictectures to handle when dealing with noarch
++packages.
++
++=cut
++
++sub get_extra_arches {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ return @{$self-&gt;{_extra_arches}};
++}
++
++
++=head2 get_older_revisions($package, $target, $user_context, $app_context)
++
++Get all older revisions from a package found in its installation directory, as a
++list of L&lt;Youri::Package&gt; objects.
++
++=cut
++
++sub get_older_revisions {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package older revisions for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ return $self-&gt;get_revisions(
++ $package,
++ $target,
++ $user_context,
++ $app_context,
++ sub { return $package-&gt;compare($_[0]) &gt; 0 }
++ );
++}
++
++=head2 get_last_older_revision($package, $target, $user_context, $app_context)
++
++Get last older revision from a package found in its installation directory, as a
++single L&lt;Youri::Package&gt; object.
++
++=cut
++
++sub get_last_older_revision {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package last older revision for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ return (
++ $self-&gt;get_older_revisions(
++ $package,
++ $target,
++ $user_context,
++ $app_context
++ )
++ )[0];
++}
++
++=head2 get_newer_revisions($package, $target, $user_context, $app_context)
++
++Get all newer revisions from a package found in its installation directory, as
++a list of L&lt;Youri::Package&gt; objects.
++
++=cut
++
++sub get_newer_revisions {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package newer revisions for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ return $self-&gt;get_revisions(
++ $package,
++ $target,
++ $user_context,
++ $app_context,
++ sub { return $_[0]-&gt;compare($package) &gt; 0 }
++ );
++}
++
++
++=head2 get_revisions($package, $target, $user_context, $app_context, $filter)
++
++Get all revisions from a package found in its installation directory, using an
++optional filter, as a list of L&lt;Youri::Package&gt; objects.
++
++=cut
++
++sub get_revisions {
++ my ($self, $package, $target, $user_context, $app_context, $filter) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package revisions for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ my @packages =
++ map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path(
++ $package,
++ $target,
++ $user_context,
++ $app_context
++ ),
++ $self-&gt;get_package_class()-&gt;get_pattern(
++ $package-&gt;get_name(),
++ undef,
++ undef,
++ $package-&gt;get_arch(),
++ )
++ );
++ @packages = grep { $filter-&gt;($_) } @packages if $filter;
++
++ return
++ sort { $b-&gt;compare($a) } # sort by revision order
++ @packages;
++}
++
++=head2 get_obsoleted_packages($package, $target, $user_context, $app_context)
++
++Get all packages obsoleted by given one, as a list of L&lt;Youri::Package&gt;
++objects.
++
++=cut
++
++sub get_obsoleted_packages {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for packages obsoleted by $package for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ my @packages;
++ foreach my $obsolete ($package-&gt;get_obsoletes()) {
++ my $pattern = $self-&gt;get_package_class()-&gt;get_pattern($obsolete-&gt;[Youri::Package::DEPENDENCY_NAME]);
++ my $range = $obsolete-&gt;[Youri::Package::DEPENDENCY_RANGE];
++ push(@packages,
++ grep { $range ? $_-&gt;satisfy_range($range) : 1 }
++ map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path(
++ $package, $target,
++ $user_context,
++ $app_context
++ ),
++ $pattern
++ )
++ );
++ }
++
++ return @packages;
++}
++
++=head2 get_replaced_packages($package, $target, $user_context, $app_context)
++
++Get all packages replaced by given one, as a list of L&lt;Youri::Package&gt;
++objects.
++
++=cut
++
++sub get_replaced_packages {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for packages replaced by $package for $target\n&quot;
++ if $self-&gt;{_verbose} &gt; 0;
++
++ my @list;
++
++ # collect all older revisions
++ push(@list, $self-&gt;get_older_revisions(
++ $package,
++ $target,
++ $user_context,
++ $app_context
++ ));
++
++ # noarch packages are potentially linked from other directories
++ if ($package-&gt;get_arch() eq 'noarch') {
++ foreach my $arch ($self-&gt;get_extra_arches()) {
++ push(@list, $self-&gt;get_older_revisions(
++ $package,
++ $target,
++ $user_context,
++ { arch =&gt; $arch }
++ ));
++ }
++ }
++
++ # collect all obsoleted packages
++ push(@list, $self-&gt;get_obsoleted_packages(
++ $package,
++ $target,
++ $user_context,
++ $app_context
++ ));
++
++ return @list;
++}
++
++=head2 get_files($path, $pattern)
++
++Get all files found in a directory, using an optional filtering pattern
++(applied to the whole file name), as a list of files.
++
++=cut
++
++sub get_files {
++ my ($self, $root, $path, $pattern) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ # debugging for bug 34999
++ print &quot;Looking for files matching $pattern in $root/$path\n&quot;;
++# if $self-&gt;{_verbose} &gt; 1;
++
++ my $grep = &quot;&quot;;
++ $grep = &quot;-regextype posix-egrep -regex '.*\/$pattern'&quot; if ($pattern);
++ # XXX: run find in a directory the user is guaranteed to have read
++ # permissions! find simply exits with error if the user doesn't have
++ # read permission on the *current* dir; as this code is run thru many
++ # sudo invocations, sometimes the user calling it has $HOME chmoded to
++ # 0700, making find fail when run as mandrake
++ # debugging for bug 34999
++ print &quot;.. running command: find -L $root/$path $grep -type f\n&quot;;
++ my @files = map { chop; $_; } `cd &amp;&amp; find -L $root/$path $grep -type f`;
++ die &quot;FATAL: get_files(): find failed!&quot; if ($?);
++
++ return @files;
++}
++
++=head2 get_install_root()
++
++Returns installation root
++
++=cut
++
++sub get_install_root {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_install_root};
++}
++
++
++=head2 get_distribution_roots()
++
++Returns distribution roots (ie install_root + target + arch)
++(it returns a list in case of noarch)
++
++=cut
++
++sub get_distribution_roots {
++ my ($self, $package, $target) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ map {
++ $self-&gt;_get_dir($self-&gt;{_install_root}, $_);
++ } $self-&gt;get_distribution_paths($package, $target);
++}
++
++=head2 get_install_dir($package, $target, $user_context, $app_context)
++
++Returns install destination directory for given L&lt;Youri::Package&gt; object
++and given target.
++
++=cut
++
++sub get_install_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;_get_dir(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $user_context, $app_context)
++ );
++}
++
++=head2 get_archive_root()
++
++Returns archiving root
++
++=cut
++
++sub get_archive_root {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_archive_root};
++}
++
++=head2 get_archive_dir($package, $target, $user_context, $app_context)
++
++Returns archiving destination directory for given L&lt;Youri::Package&gt; object
++and given target.
++
++=cut
++
++sub get_archive_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;_get_dir(
++ $self-&gt;{_archive_root},
++ $self-&gt;get_archive_path($package, $target, $user_context, $app_context)
++ );
++}
++
++
++=head2 get_version_root()
++
++Returns versionning root
++
++=cut
++
++sub get_version_root {
++ my ($self) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;{_version_root};
++}
++
++=head2 get_version_dir($package, $target, $user_context, $app_context)
++
++Returns versioning destination directory for given L&lt;Youri::Package&gt;
++object and given target.
++
++=cut
++
++sub get_version_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return $self-&gt;_get_dir(
++ $self-&gt;{_version_root},
++ $self-&gt;get_version_path($package, $target, $user_context, $app_context)
++ );
++}
++
++sub _get_dir {
++ my ($self, $root, $path) = @_;
++
++ return substr($path, 0, 1) eq '/' ?
++ $path :
++ $root . '/' . $path;
++}
++
++=head2 get_install_file($package, $target, $user_context, $app_context)
++
++Returns install destination file for given L&lt;Youri::Package&gt; object and
++given target.
++
++=cut
++
++sub get_install_file {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;get_install_dir($package, $target, $user_context, $app_context) .
++ '/' .
++ $package-&gt;get_file_name();
++}
++
++=head2 get_install_path($package, $target, $user_context, $app_context)
++
++Returns installation destination path (relative to repository root) for given
++L&lt;Youri::Package&gt; object and given target.
++
++=head2 get_archive_path($package, $target, $user_context, $app_context)
++
++Returns archiving destination path (relative to repository root) for given
++L&lt;Youri::Package&gt; object and given target.
++
++=head2 get_version_path($package, $target, $user_context, $app_context)
++
++Returns versioning destination path (relative to repository root) for given
++L&lt;Youri::Package&gt; object and given target.
++
++=head1 SUBCLASSING
++
++The following methods have to be implemented:
++
++=over
++
++=item get_install_path
++
++=item get_archive_path
++
++=item get_version_path
++
++=back
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/lib/Youri/Utils.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Utils.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Utils.pm 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,98 @@
++# $Id: Utils.pm 1713 2006-10-16 16:39:53Z warly $
++package Youri::Utils;
++
++=head1 NAME
++
++Youri::Utils - Youri shared functions
++
++=head1 DESCRIPTION
++
++This module implement some helper functions for all youri applications.
++
++=cut
++
++use base qw(Exporter);
++use Carp;
++use strict;
++use warnings;
++
++our @EXPORT = qw(
++ create_instance
++ load_class
++ add2hash
++ add2hash_
++);
++
++=head2 create_instance($class, $config, $options)
++
++Create an instance from a plugin implementing given interface, using given
++configuration and local options.
++Returns a plugin instance, or undef if something went wrong.
++
++=cut
++
++sub create_instance {
++ my ($interface, $config, $options) = @_;
++
++ croak 'No interface given' unless $interface;
++ croak 'No config given' unless $config;
++
++ my $class = $config-&gt;{class};
++ if (!$class) {
++ carp &quot;No class given, can't load plugin&quot;;
++ return;
++ }
++
++ # ensure loaded
++ load_class($class);
++
++ # check interface
++ if (!$class-&gt;isa($interface)) {
++ carp &quot;$class is not a $interface&quot;;
++ return;
++ }
++
++ # instantiate
++ no strict 'refs';
++
++ return $class-&gt;new(
++ $config-&gt;{options} ? %{$config-&gt;{options}} : (),
++ $options ? %{$options} : (),
++ );
++}
++
++sub load_class {
++ my ($class) = @_;
++
++ $class .= '.pm';
++ $class =~ s/::/\//g;
++ require $class;
++}
++
++# structure helpers
++
++sub add2hash {
++ my ($a, $b) = @_;
++ while (my ($k, $v) = each %{$b || {}}) {
++ $a-&gt;{$k} ||= $v;
++ }
++ return $a;
++}
++
++sub add2hash_ {
++ my ($a, $b) = @_;
++ while (my ($k, $v) = each %{$b || {}}) {
++ exists $a-&gt;{$k} or $a-&gt;{$k} = $v;
++ }
++ return $a;
++}
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Added: build_system/mdv-youri-core/trunk/t/00distribution.t
+===================================================================
+--- build_system/mdv-youri-core/trunk/t/00distribution.t (rev 0)
++++ build_system/mdv-youri-core/trunk/t/00distribution.t 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,15 @@
++#!/usr/bin/perl
++# $Id: 00distribution.t 1179 2006-08-05 08:30:57Z warly $
++
++use Test::More;
++
++BEGIN {
++ eval {
++ require Test::Distribution;
++ };
++ if($@) {
++ plan skip_all =&gt; 'Test::Distribution not installed';
++ } else {
++ import Test::Distribution only =&gt; [ qw/use pod description/ ];
++ }
++}
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/00distribution.t
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-core/trunk/t/cowsay-3.03-11mdv2007.0.noarch.rpm
+===================================================================
+(Binary files differ)
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/cowsay-3.03-11mdv2007.0.noarch.rpm
+___________________________________________________________________
+Added: svn:mime-type
+ + application/octet-stream
+
+Added: build_system/mdv-youri-core/trunk/t/gpghome/pubring.gpg
+===================================================================
+(Binary files differ)
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/gpghome/pubring.gpg
+___________________________________________________________________
+Added: svn:mime-type
+ + application/octet-stream
+
+Added: build_system/mdv-youri-core/trunk/t/gpghome/secring.gpg
+===================================================================
+(Binary files differ)
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/gpghome/secring.gpg
+___________________________________________________________________
+Added: svn:mime-type
+ + application/octet-stream
+
+Added: build_system/mdv-youri-core/trunk/t/gpghome/trustdb.gpg
+===================================================================
+(Binary files differ)
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/gpghome/trustdb.gpg
+___________________________________________________________________
+Added: svn:mime-type
+ + application/octet-stream
+
+Added: build_system/mdv-youri-core/trunk/t/package.t
+===================================================================
+--- build_system/mdv-youri-core/trunk/t/package.t (rev 0)
++++ build_system/mdv-youri-core/trunk/t/package.t 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,482 @@
++#!/usr/bin/perl
++# $Id: /local/youri/soft/trunk/t/version.t 2257 2006-07-05T09:22:47.088572Z guillaume $
++
++use Test::More;
++use Test::Exception;
++use Youri::Utils;
++use File::Temp qw/tempdir/;
++use File::Basename;
++use strict;
++
++my @classes = qw/
++ Youri::Package::URPM
++ Youri::Package::RPM4
++/;
++my $dir = dirname($0);
++my $rpm = 'cowsay-3.03-11mdv2007.0.noarch.rpm';
++my $fake_rpm = 'foobar.rpm';
++plan(tests =&gt; 37 * scalar @classes);
++
++foreach my $class (@classes) {
++ load_class($class);
++
++ my $temp_dir = tempdir(CLEANUP =&gt; 1);
++ my $file = &quot;$dir/$rpm&quot;;
++ my $fake_file = &quot;$temp_dir/$fake_rpm&quot;;
++
++ # instanciation errors
++ dies_ok { $class-&gt;new(file =&gt; undef) } 'undefined file';
++ dies_ok { $class-&gt;new(file =&gt; $fake_file) } 'non-existant file';
++ system('touch', $fake_file);
++ chmod 0000, $fake_file;
++ dies_ok { $class-&gt;new(file =&gt; $fake_file) } 'non-readable file';
++ chmod 0644, $fake_file;
++ dies_ok { $class-&gt;new(file =&gt; $fake_file) } 'non-rpm file';
++
++ my $package = $class-&gt;new(file =&gt; $file);
++ isa_ok($package, $class);
++
++ # tag value access
++ is($package-&gt;get_name(), 'cowsay', 'get name directly');
++ is($package-&gt;get_tag('name'), 'cowsay', 'get name indirectly');
++ is($package-&gt;get_version(), '3.03', 'get version directly');
++ is($package-&gt;get_tag('version'), '3.03', 'get version indirectly');
++ is($package-&gt;get_release(), '11mdv2007.0', 'get release directly');
++ is($package-&gt;get_tag('release'), '11mdv2007.0', 'get release indirectly');
++ is($package-&gt;get_arch(), 'noarch', 'get arch directly');
++ is($package-&gt;get_tag('arch'), 'noarch', 'get arch indirectly');
++ is($package-&gt;get_summary(), 'Configurable talking cow', 'get summary directly');
++ is($package-&gt;get_tag('summary'), 'Configurable talking cow', 'get summary indirectly');
++ is($package-&gt;get_url(), '<A HREF="http://www.nog.net/~tony/warez/cowsay.shtml">http://www.nog.net/~tony/warez/cowsay.shtml</A>', 'get url directly');
++ is($package-&gt;get_tag('url'), '<A HREF="http://www.nog.net/~tony/warez/cowsay.shtml">http://www.nog.net/~tony/warez/cowsay.shtml</A>', 'get url indirectly');
++ is($package-&gt;get_packager(), 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandriva.org</A>&gt;', 'get packager directly');
++ is($package-&gt;get_tag('packager'), 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandriva.org</A>&gt;', 'get packager indirectly');
++ is($package-&gt;get_file_name(), 'cowsay-3.03-11mdv2007.0.noarch.rpm', 'file name');
++ is($package-&gt;get_revision(), '3.03-11mdv2007.0', 'revision');
++
++ # name formating
++ is($package-&gt;as_formated_string('%{name}-%{version}-%{release}'), 'cowsay-3.03-11mdv2007.0', 'formated string name');
++ is($package-&gt;as_string(), 'cowsay-3.03-11mdv2007.0.noarch', 'default string');
++ is($package, 'cowsay-3.03-11mdv2007.0.noarch', 'stringification');
++
++ # type
++ ok(!$package-&gt;is_source(), 'not a source package');
++ ok($package-&gt;is_binary(), 'a binary package');
++ is($package-&gt;get_type(), 'binary', 'a binary package');
++
++ # gpg key
++ is($package-&gt;get_gpg_key(), '26752624', 'get gpg key');
++
++ # dependencies
++ is_deeply(
++ [ $package-&gt;get_requires() ],
++ [
++ [ 'perl-base', undef ],
++ [ 'perl(Cwd)', undef ],
++ [ 'perl(File::Basename)', undef ],
++ [ 'perl(Getopt::Std)', undef ],
++ [ 'perl(Text::Tabs)', undef ],
++ [ 'perl(Text::Wrap)', undef ]
++ ],
++ 'requires'
++ );
++ is_deeply(
++ [ $package-&gt;get_provides() ],
++ [
++ [ 'cowsay', '== 3.03-11mdv2007.0']
++ ],
++ 'provides'
++ );
++ is_deeply(
++ [ $package-&gt;get_obsoletes() ],
++ [ ],
++ 'obsoletes'
++ );
++ is_deeply(
++ [ $package-&gt;get_conflicts() ],
++ [ ],
++ 'conflicts'
++ );
++
++ # files
++ is_deeply(
++ [ $package-&gt;get_files() ],
++ [
++ [
++ '/etc/bash_completion.d/cowsay',
++ 33188,
++ '6048be1dd827011c15cab0c3db1f438d'
++ ],
++ [
++ '/usr/bin/cowsay',
++ 33261,
++ 'b405026c6040eeb4781ca5c523129fe4'
++ ],
++ [
++ '/usr/bin/cowthink',
++ 41471,
++ ''
++ ],
++ [
++ '/usr/share/cows',
++ 16877,
++ ''
++ ],
++ [
++ '/usr/share/cows/beavis.zen.cow',
++ 33188,
++ '582b2ddb72122d3aa078730abd0456b3'
++ ],
++ [
++ '/usr/share/cows/bong.cow',
++ 33188,
++ '045f9bf39c027dded9a7145f619bac02'
++ ],
++ [
++ '/usr/share/cows/bud-frogs.cow',
++ 33188,
++ '5c61632eb06305d613061882e1955cd2'
++ ],
++ [
++ '/usr/share/cows/bunny.cow',
++ 33188,
++ '05eb914d3b96aea903542cb29f5c42c7'
++ ],
++ [
++ '/usr/share/cows/cheese.cow',
++ 33188,
++ 'f3618110a22d8e9ecde888c1f5e38b61'
++ ],
++ [
++ '/usr/share/cows/cower.cow',
++ 33188,
++ 'd73ea60eec692555a34a9f3eec981578'
++ ],
++ [
++ '/usr/share/cows/daemon.cow',
++ 33188,
++ 'a7dd7588ee0386a0f29e88e4881885ee'
++ ],
++ [
++ '/usr/share/cows/default.cow',
++ 33188,
++ 'f1206515a0f27e9d5cf09c188e46bc82'
++ ],
++ [
++ '/usr/share/cows/dragon-and-cow.cow',
++ 33188,
++ '0ca99b8edd1a9d14fd231a88d9746b39'
++ ],
++ [
++ '/usr/share/cows/dragon.cow',
++ 33188,
++ '448f736bf56dccafa2635e71e7485345'
++ ],
++ [
++ '/usr/share/cows/duck.cow',
++ 33188,
++ 'd8ffcd64667d2e3697a3e8b65e8bea9d'
++ ],
++ [
++ '/usr/share/cows/elephant-in-snake.cow',
++ 33188,
++ 'c5a9f406277e0e8a674bd3ffb503738f'
++ ],
++ [
++ '/usr/share/cows/elephant.cow',
++ 33188,
++ 'e355c72e893787376c047805d4a1fe9d'
++ ],
++ [
++ '/usr/share/cows/eyes.cow',
++ 33188,
++ 'b2eb5b612fae17877895aa6edafa0a5f'
++ ],
++ [
++ '/usr/share/cows/flaming-sheep.cow',
++ 33188,
++ '3213cfa04a069f42d71115ca623a2f95'
++ ],
++ [
++ '/usr/share/cows/ghostbusters.cow',
++ 33188,
++ 'df294e6278bcb275aecb0fbd6b2546ba'
++ ],
++ [
++ '/usr/share/cows/girafe.cow',
++ 33188,
++ '6d2e142313109b6a5a0a45dba0f11351'
++ ],
++ [
++ '/usr/share/cows/head-in.cow',
++ 33188,
++ '365287a5d1f34a53f8716285e79c28df'
++ ],
++ [
++ '/usr/share/cows/hellokitty.cow',
++ 33188,
++ 'e0bbea69c4cbcfb3d799740ccc8a0b0e'
++ ],
++ [
++ '/usr/share/cows/kenny.cow',
++ 33188,
++ '16ce8c334a7547197ac4c9e8a1d6ae90'
++ ],
++ [
++ '/usr/share/cows/kiss.cow',
++ 33188,
++ '2a7bdd4a20741b7769af463bf09e64e8'
++ ],
++ [
++ '/usr/share/cows/kitty.cow',
++ 33188,
++ '76d65a3ebfbacb16a654c1aa1af6ed27'
++ ],
++ [
++ '/usr/share/cows/koala.cow',
++ 33188,
++ 'cc524706707f32253dd06fc548334f11'
++ ],
++ [
++ '/usr/share/cows/kosh.cow',
++ 33188,
++ 'e4e28e0f472bd524fd1b44c67ae357c2'
++ ],
++ [
++ '/usr/share/cows/luke-koala.cow',
++ 33188,
++ '63bbc35da73cd22b8cf25f86dcf9f870'
++ ],
++ [
++ '/usr/share/cows/mech-and-cow',
++ 33188,
++ '12c0320b33704d8564dd97278d056204'
++ ],
++ [
++ '/usr/share/cows/meow.cow',
++ 33188,
++ 'a6092008647ed37cfe1663d10e388cbb'
++ ],
++ [
++ '/usr/share/cows/milk.cow',
++ 33188,
++ 'd26ac36e13e77dabb408e104fc8e0167'
++ ],
++ [
++ '/usr/share/cows/moofasa.cow',
++ 33188,
++ '5fcdd4a9f3bf521c337af0a066b14512'
++ ],
++ [
++ '/usr/share/cows/moose.cow',
++ 33188,
++ 'dcfa09df7d2b9afa112dab374bf06e99'
++ ],
++ [
++ '/usr/share/cows/mutilated.cow',
++ 33188,
++ '24cdaef0a29fb44dc673abf19a8ba631'
++ ],
++ [
++ '/usr/share/cows/phaco.cow',
++ 33188,
++ 'f277c1bf92ce2a3f6058955ba93758aa'
++ ],
++ [
++ '/usr/share/cows/pumpkin.cow',
++ 33188,
++ 'c661ea78714c1ce31559f77d73694473'
++ ],
++ [
++ '/usr/share/cows/ren.cow',
++ 33188,
++ '3d7941d454779e000adc1c91e5f0b20b'
++ ],
++ [
++ '/usr/share/cows/satanic.cow',
++ 33188,
++ 'a69ca42a31486757ddcb322a1e68f886'
++ ],
++ [
++ '/usr/share/cows/shark.cow',
++ 33188,
++ 'd8950ec63abb00bbd9d96ec63637c1ac'
++ ],
++ [
++ '/usr/share/cows/sheep.cow',
++ 33188,
++ '543b75f295cbd51326f5a40f111469f1'
++ ],
++ [
++ '/usr/share/cows/skeleton.cow',
++ 33188,
++ '64f6ec1a0c170508e72269d533492e57'
++ ],
++ [
++ '/usr/share/cows/small.cow',
++ 33188,
++ '50cb1c55628c439fc81f96db9d855252'
++ ],
++ [
++ '/usr/share/cows/sodomized.cow',
++ 33188,
++ 'b4888afcca51629cc3138b283608b837'
++ ],
++ [
++ '/usr/share/cows/stegosaurus.cow',
++ 33188,
++ 'fb0e45d101a3ecba9cf6e112facbbc7e'
++ ],
++ [
++ '/usr/share/cows/stimpy.cow',
++ 33188,
++ '9b4ec6e0750ba0eeaaa432d8d3413559'
++ ],
++ [
++ '/usr/share/cows/supermilker.cow',
++ 33188,
++ '316573fb585e4a6b375373c85be025b1'
++ ],
++ [
++ '/usr/share/cows/surgery.cow',
++ 33188,
++ '7f25005083c1fde19d4e548c005ef000'
++ ],
++ [
++ '/usr/share/cows/telebears.cow',
++ 33188,
++ '15f00abb070d9018ce6ef3441e936ef4'
++ ],
++ [
++ '/usr/share/cows/three-eyes.cow',
++ 33188,
++ 'c85faef9496f4a5b111bd92bfd7e7528'
++ ],
++ [
++ '/usr/share/cows/turkey.cow',
++ 33188,
++ '484b5bc69c09d420d7fd5586d8570f04'
++ ],
++ [
++ '/usr/share/cows/turtle.cow',
++ 33188,
++ '87eed5a00e88860b78dbec04efcdede3'
++ ],
++ [
++ '/usr/share/cows/tux.cow',
++ 33188,
++ 'dc1db4eac66c99179ef6adb15dd75bda'
++ ],
++ [
++ '/usr/share/cows/udder.cow',
++ 33188,
++ 'd97f78887c3b218a54876edc51f2963b'
++ ],
++ [
++ '/usr/share/cows/vader-koala.cow',
++ 33188,
++ '7b5dd51278f0fa217a70a9b499f97a07'
++ ],
++ [
++ '/usr/share/cows/vader.cow',
++ 33188,
++ '97b4ef9fc4c26082f253e9f0f35c4590'
++ ],
++ [
++ '/usr/share/cows/www.cow',
++ 33188,
++ 'ef4c0bc8330f329666e1705f97f283cc'
++ ],
++ [
++ '/usr/share/doc/cowsay-3.03',
++ 16877,
++ ''
++ ],
++ [
++ '/usr/share/doc/cowsay-3.03/INSTALL',
++ 33188,
++ '3333fd2865107626d5dffc0dbfb7e244'
++ ],
++ [
++ '/usr/share/doc/cowsay-3.03/LICENSE',
++ 33188,
++ 'f879dda90a5a9928253a63ecd76406e6'
++ ],
++ [
++ '/usr/share/doc/cowsay-3.03/README',
++ 33188,
++ 'a5c1c61e4920c278a735cdaaca62453e'
++ ],
++ [
++ '/usr/share/man/man1/cowsay.1.bz2',
++ 33188,
++ '01fdd49d0b477f20099aae384fe8c1b2'
++ ],
++ [
++ '/usr/share/man/man1/cowthink.1.bz2',
++ 41471,
++ ''
++ ]
++ ],
++ 'files'
++ );
++
++ # changelog
++ is_deeply(
++ [ $package-&gt;get_changes() ],
++ [
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandriva.org</A>&gt; 3.03-11mdv2007.0',
++ 1149847200,
++ '- %mkrel' . &quot;\n&quot; .
++ '- rpmbuildupdate aware',
++ ],
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandriva.org</A>&gt; 3.03-10mdk ',
++ 1117879200,
++ '- fix man page (fix #16291)',
++ ],
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandrake.org</A>&gt; 3.03-9mdk ',
++ 1090058400,
++ '- hurry businesman compliant (aka two new wonderful cows)',
++ ],
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandrake.org</A>&gt; 3.03-8mdk ',
++ 1089540000,
++ '- apologies to the girafes (with one only f)',
++ ],
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandrake.org</A>&gt; 3.03-7mdk ',
++ 1086429600,
++ '- #mandrakefr compliant (aka four new additional cows)',
++ ],
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at linux-mandrake.com</A>&gt; 3.03-6mdk',
++ 1061460000,
++ '- save.the.world patch',
++ ]
++ ],
++ 'changelog'
++ );
++ is_deeply(
++ $package-&gt;get_last_change(),
++ [
++ 'Guillaume Rousse &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">guillomovitch at mandriva.org</A>&gt; 3.03-11mdv2007.0',
++ 1149847200,
++ '- %mkrel' . &quot;\n&quot; .
++ '- rpmbuildupdate aware',
++ ],
++ 'last change'
++ );
++ is($package-&gt;compare($package), 0, 'compare');
++
++ # signature test
++ system('cp', $file, $temp_dir);
++ $package = $class-&gt;new(file =&gt; &quot;$temp_dir/$rpm&quot;);
++
++ $package-&gt;sign('Youri', 't/gpghome', 'Youri rulez');
++
++ $package = $class-&gt;new(file =&gt; &quot;$temp_dir/$rpm&quot;);
++ is($package-&gt;get_gpg_key(), '2333e817', 'get gpg key');
++}
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/package.t
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: build_system/mdv-youri-core/trunk/t/version.t
+===================================================================
+--- build_system/mdv-youri-core/trunk/t/version.t (rev 0)
++++ build_system/mdv-youri-core/trunk/t/version.t 2011-01-05 13:23:45 UTC (rev 210)
+@@ -0,0 +1,71 @@
++#!/usr/bin/perl
++# $Id: version.t 1179 2006-08-05 08:30:57Z warly $
++
++use Test::More;
++use Youri::Check::Input::Updates;
++use strict;
++
++my @differents = (
++ [ '3.0.0', '1.0.0' ],
++ [ '3.0.0', '1.99.9' ],
++ [ '3.0.1', '3.0' ],
++ [ '3.0pl1', '3.0' ],
++ [ '3.0', '3.0beta1' ],
++ [ '3.0', '3.0beta' ],
++ [ '3.0', '3.0alpha1' ],
++ [ '3.0', '3.0alpha' ],
++ [ '3.0', '3.0pre1' ],
++ [ '3.0', '3.0pre' ],
++ [ '3.0pre', '3.0beta' ],
++ [ '3.0beta', '3.0alpha' ],
++ [ '1.0.0-p1', '1.0.0RC1' ],
++ [ '0.9.7f', '0.9.7e' ],
++ [ '10', '9' ],
++);
++
++my @equals = (
++ [ '1.0.0', '1.0.0' ],
++ [ '0.9Beta1', '0.9beta1' ],
++ [ '0.9beta1', '0.9 beta 1' ],
++ [ '0.3-alpha', '0.3_alpha' ],
++ [ '0.02', '.02' ],
++ [ '2.0.11', '15aug2000' ],
++ [ '2.0.11', '20060401' ],
++ [ '20', '20060401' ],
++);
++
++plan tests =&gt; 2 * @differents + 2 * @equals;
++
++foreach my $different (@differents) {
++ ok(
++ Youri::Check::Input::Updates::is_newer(
++ $different-&gt;[0],
++ $different-&gt;[1]
++ ),
++ &quot;$different-&gt;[0] is newer as $different-&gt;[1]&quot;
++ );
++ ok(
++ !Youri::Check::Input::Updates::is_newer(
++ $different-&gt;[1],
++ $different-&gt;[0]
++ ),
++ &quot;$different-&gt;[1] is older as $different-&gt;[0]&quot;
++ );
++}
++
++foreach my $equal (@equals) {
++ ok(
++ !Youri::Check::Input::Updates::is_newer(
++ $equal-&gt;[0],
++ $equal-&gt;[1]
++ ),
++ &quot;$equal-&gt;[0] is equal as $equal-&gt;[1]&quot;
++ );
++ ok(
++ !Youri::Check::Input::Updates::is_newer(
++ $equal-&gt;[1],
++ $equal-&gt;[0]
++ ),
++ &quot;$equal-&gt;[1] is equal as $equal-&gt;[0]&quot;
++ );
++}
+
+
+Property changes on: build_system/mdv-youri-core/trunk/t/version.t
+___________________________________________________________________
+Added: svn:executable
+ + *
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/797a51f6/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001512.html">[Mageia-sysadm] [209] add mandriva version of youri-submit, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/submit/trunk at revision 271600
+</A></li>
+ <LI>Next message: <A HREF="001514.html">[Mageia-sysadm] [654] Add ssh key for pterjan.
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1513">[ date ]</a>
+ <a href="thread.html#1513">[ thread ]</a>
+ <a href="subject.html#1513">[ subject ]</a>
+ <a href="author.html#1513">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001514.html b/zarb-ml/mageia-sysadm/2011-January/001514.html
new file mode 100644
index 000000000..c11819f45
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001514.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [654] Add ssh key for pterjan.
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B654%5D%20Add%20ssh%20key%20for%20pterjan.&In-Reply-To=%3C20110105134116.4F49741942%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001513.html">
+ <LINK REL="Next" HREF="001515.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [654] Add ssh key for pterjan.</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B654%5D%20Add%20ssh%20key%20for%20pterjan.&In-Reply-To=%3C20110105134116.4F49741942%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [654] Add ssh key for pterjan.">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 14:41:16 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001513.html">[Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600
+</A></li>
+ <LI>Next message: <A HREF="001515.html">[Mageia-sysadm] [211] - merge trunk at 210
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1514">[ date ]</a>
+ <a href="thread.html#1514">[ thread ]</a>
+ <a href="subject.html#1514">[ subject ]</a>
+ <a href="author.html#1514">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 654
+Author: boklm
+Date: 2011-01-05 14:41:16 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+Add ssh key for pterjan.
+He will be helping in the setup of the buildsystem (youri, iurt, ...)
+
+Modified Paths:
+--------------
+ puppet/manifests/common.pp
+
+Modified: puppet/manifests/common.pp
+===================================================================
+--- puppet/manifests/common.pp 2011-01-05 00:59:39 UTC (rev 653)
++++ puppet/manifests/common.pp 2011-01-05 13:41:16 UTC (rev 654)
+@@ -73,6 +73,12 @@
+ key =&gt; &quot;AAAAB3NzaC1kc3MAAACBAMFaCUsen6ZYH8hsjGK0tlaguduw4YT2KD3TaDEK24ltKzvQ+NDiPRms1zPhTpRL0p0U5QVdIMxm/asAtuiMLMxdmU+Crry6s110mKKY2930ZEk6N4YJ4DbqSiYe2JBmpJVIEJ6Betgn7yZRR2mRM7j134PddAl8BGG+RUvzib7JAAAAFQDzu/G2R+6oe3vjIbbFpOTyR3PAbwAAAIEAmqXAGybY9CVgGChSztPEdvaZ1xOVGJtmxmlWvitWGpu8m5JBf57VhzdpT4Fsf4fiVZ7NWiwPm1DzqNX7xCH7IPLPK0jQSd937xG9Un584CguNB76aEQXv0Yl5VjOrC3DggIEfZ1KLV7GcpOukw0RerxKz99rYAThp6+qzBIrv38AAACBAKhXi7uNlajescWFjiCZ3fpnxdyGAgtKzvlz60mGKwwNyaQCVmPSmYeBI2tg1qk+0I5K6LZUxWkdhuE1UfvAbIrEdwyD8p53dPg1J9DpdQ1KqApeKqLxO02KJtfomuy3cRQXmdfOTovYN7zAu1NCp51uUNTzhIpDHx0MZ6bsWSFv&quot;,
+ user =&gt; &quot;root&quot;
+ }
++
++ ssh_authorized_key { &quot;ssh key pterjan&quot;:
++ type =&gt; &quot;ssh-rsa&quot;,
++ key =&gt; &quot;AAAAB3NzaC1yc2EAAAABIwAAAQEAspyZMl5zAkk5SL45zFvtJF7UhXTRb0bEaZ3nuCC1Ql5wM3GWuftqd5zLH88dCu7ZO/BVh213LZTq/UHb6lI7kWalygk53qtdEx2cywjWFOW23Rg6xybatCEZ2/ZrpGZoBGnu63otAp4h2Nnj/VkOio3pGwD8vavmZ4xPrcECPAwtMPJsYf44Ptu2JdXizi4iY8I0/HKitQ113I4NbDcAiMKbTXSbOfqC+ldcgW3+9xShx/kuMFTKeJOy4LI4GR6gykzkV6+vfnalp24x/SIEjuohBarCRQKo4megHqZOzdMYAHqq0QuNubXURNb0Mvz1sE7Y8AFIxwSfXdQGi5hcQQ==&quot;,
++ user =&gt; &quot;root&quot;
++ }
+ }
+
+ class urpmi_update {
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/07855687/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001513.html">[Mageia-sysadm] [210] add mandriva version of youri-core, downloaded from http://svn. mandriva.com/svn/soft/build_system/youri/core/trunk/ at revision 271600
+</A></li>
+ <LI>Next message: <A HREF="001515.html">[Mageia-sysadm] [211] - merge trunk at 210
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1514">[ date ]</a>
+ <a href="thread.html#1514">[ thread ]</a>
+ <a href="subject.html#1514">[ subject ]</a>
+ <a href="author.html#1514">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001515.html b/zarb-ml/mageia-sysadm/2011-January/001515.html
new file mode 100644
index 000000000..76b2d401d
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001515.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [211] - merge trunk at 210
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B211%5D%20-%20merge%20trunk%40210&In-Reply-To=%3C20110105150920.CA3E441951%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001514.html">
+ <LINK REL="Next" HREF="001651.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [211] - merge trunk at 210</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B211%5D%20-%20merge%20trunk%40210&In-Reply-To=%3C20110105150920.CA3E441951%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [211] - merge trunk at 210">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 16:09:20 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001514.html">[Mageia-sysadm] [654] Add ssh key for pterjan.
+</A></li>
+ <LI>Next message: <A HREF="001651.html">[Mageia-sysadm] [212] - merge trunk ( for good this time )
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1515">[ date ]</a>
+ <a href="thread.html#1515">[ thread ]</a>
+ <a href="subject.html#1515">[ subject ]</a>
+ <a href="author.html#1515">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 211
+Author: misc
+Date: 2011-01-05 16:09:20 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- merge <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">trunk at 210</A>
+
+Property Changed:
+----------------
+ identity/CatDap/branches/live/
+
+
+Property changes on: identity/CatDap/branches/live
+___________________________________________________________________
+Modified: svn:mergeinfo
+ - /identity/CatDap/trunk:64,66-68
+ + /identity/CatDap/trunk:64,66-68,210
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/b4bcb9b0/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001514.html">[Mageia-sysadm] [654] Add ssh key for pterjan.
+</A></li>
+ <LI>Next message: <A HREF="001651.html">[Mageia-sysadm] [212] - merge trunk ( for good this time )
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1515">[ date ]</a>
+ <a href="thread.html#1515">[ thread ]</a>
+ <a href="subject.html#1515">[ subject ]</a>
+ <a href="author.html#1515">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001516.html b/zarb-ml/mageia-sysadm/2011-January/001516.html
new file mode 100644
index 000000000..50dbd40ad
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001516.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] maint db, rails and hosting
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20maint%20db%2C%20rails%20and%20hosting&In-Reply-To=%3CAANLkTimjy9W%3DaCjOe2TBKVOta_x_PbrJFB-QevQaSoXy%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001651.html">
+ <LINK REL="Next" HREF="001518.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] maint db, rails and hosting</H1>
+ <B>Romain d'Alverny</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20maint%20db%2C%20rails%20and%20hosting&In-Reply-To=%3CAANLkTimjy9W%3DaCjOe2TBKVOta_x_PbrJFB-QevQaSoXy%40mail.gmail.com%3E"
+ TITLE="[Mageia-sysadm] maint db, rails and hosting">rdalverny at gmail.com
+ </A><BR>
+ <I>Wed Jan 5 17:38:24 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001651.html">[Mageia-sysadm] [212] - merge trunk ( for good this time )
+</A></li>
+ <LI>Next message: <A HREF="001518.html">[Mageia-sysadm] maint db, rails and hosting
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1516">[ date ]</a>
+ <a href="thread.html#1516">[ thread ]</a>
+ <a href="subject.html#1516">[ subject ]</a>
+ <a href="author.html#1516">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi there,
+
+After we noticed that the existing maintainer-db app had no license,
+we ought to reimplement it, fast.
+
+I asked about this on the webteam list with some requirements and
+kosmas kindly took the hold for this, proposing to implement it with
+Rails [1]. As I stated in the original call (and later confirmed [2])
+Rails was a possibility (as well as Django), forgot to mention
+Symphony (was pointed out later); goal was to: stay open to new
+contributions and try, if it came, with some technology that is easy
+enough to host and still a bit new in this community.
+
+As misc noticed me, yes, I didn't ask sysadm first about this (hosting
+st else than PHP/Perl stuff); I have to admit that I expected the
+point to be raised on the webteam ml at the time (the whole
+conversation started in a meeting point pre-summary and took over 6
+days before I said go).
+
+So, yes, that means we would be to host a Rails app; it's not for the
+sake of trying any type of buzz'd-about technology out there, it could
+have been Django as well or Symphony. I didn't suggest erlang,
+node.js, go or tcl frameworks. :-p
+
+As a sidenote, kosmas set his own repository over gitorious.org but
+has been notified that the master branch should move to mageia.org
+infra at least when stable and in anyway, as soon as a repository is
+set up for it. Same for issues (as soon as Bugzilla is up,
+bugs/requests will move there, if there were any already before).
+
+So, this mail was about clarifying the point; I'll try better next
+time. As for hosting the thing, I asked kosmas about the requirements;
+given the app needs, it will be a basic Rails/MySQL setup I guess, but
+better wait for his take and his help.
+
+What's your take on this?
+ - hosting Rails apps; how/where to host them (remember we have Gandi vhosts);
+ - how we can deal with open contributions, specifying base
+requirements for the tools we expect to receive (being square, but
+flexible enough to accept more contributions); and what these
+requirements would be;
+ - how it's acceptable that people use infrastructure outside of
+mageia.org to bootstrap their contributions (like, still pointing that
+a master branch should be reasonably migrated to mageia.org infra, or
+other guideline);
+ - how we can better advertise our infrastructure and services (how
+they work, how they can be used) *wink* and the sysadm team needs
+(more contributions/contributors)
+
+Cheers,
+
+--
+Romain
+
+[1] <A HREF="https://mageia.org/pipermail/mageia-webteam/2010-December/000064.html">https://mageia.org/pipermail/mageia-webteam/2010-December/000064.html</A>
+[2] <A HREF="https://mageia.org/pipermail/mageia-webteam/2010-December/000070.html">https://mageia.org/pipermail/mageia-webteam/2010-December/000070.html</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001651.html">[Mageia-sysadm] [212] - merge trunk ( for good this time )
+</A></li>
+ <LI>Next message: <A HREF="001518.html">[Mageia-sysadm] maint db, rails and hosting
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1516">[ date ]</a>
+ <a href="thread.html#1516">[ thread ]</a>
+ <a href="subject.html#1516">[ subject ]</a>
+ <a href="author.html#1516">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001517.html b/zarb-ml/mageia-sysadm/2011-January/001517.html
new file mode 100644
index 000000000..1933371c2
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001517.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [LONG] new server to name and password handling
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C1294247062.29097.5.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001504.html">
+ <LINK REL="Next" HREF="001580.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [LONG] new server to name and password handling</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C1294247062.29097.5.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [LONG] new server to name and password handling">misc at zarb.org
+ </A><BR>
+ <I>Wed Jan 5 18:04:21 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001504.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001580.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1517">[ date ]</a>
+ <a href="thread.html#1517">[ thread ]</a>
+ <a href="subject.html#1517">[ subject ]</a>
+ <a href="author.html#1517">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le mardi 04 janvier 2011 &#224; 17:31 +0100, Rapha&#235;l Gertz a &#233;crit :
+&gt;<i> Le mardi 04 janvier 2011 16:45:53, Luca Berra a &#233;crit :
+</I>&gt;<i> &gt; On Mon, Jan 03, 2011 at 02:00:40AM +0100, Michael Scherer wrote:
+</I>&gt;<i> &gt; &gt;Online.net, thanks to Raphael Gertz efforts. The specs ( in french, I
+</I>&gt;<i> &gt; &gt;can translate if Babelfish is not enough ) are here :
+</I>&gt;<i> &gt; &gt;<A HREF="http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml">http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml</A>
+</I>&gt;<i> Server will be upgraded tonight (powered off few minutes) with 16GB ram + idrac
+</I>&gt;<i> entreprise card. (it was planed to be done around 22-23h pm today)
+</I>
+Thanks.
+
+So the idrac card also requires a password :)
+
+&gt;<i> The processor support hw virtualisation if you want with 8 physical core.
+</I>
+Yup, but at this stage, we do not requires any server, but that could
+indeed help.
+
+&gt;<i> &gt; &gt;Why raid 0 ( or 1+0 ) ? The server main use will be iso creation ( for
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; the dell R210 in the specs only has space for two SATA drives (uning the
+</I>&gt;<i> &gt; integrated Perc Raid Controller)
+</I>&gt;<i> &gt; so it will probably be configurd as a HW mirror, and that's it.
+</I>&gt;<i>
+</I>&gt;<i> It is configured ad RAID1 by default, you see only one big hard disk.
+</I>
+of 2 To ?
+
+
+&gt;<i> You have 2 way to achive what you want :
+</I>&gt;<i> - setup with web access a mdv2010.1 without lvm on the hw card
+</I>&gt;<i> - re-setup completely the raid from bios, then install with a live-cd through
+</I>&gt;<i> network using the kvm+virtual media. (you need to do a dummy install first +
+</I>&gt;<i> wait tomorow for that)
+</I>
+Well, setting what we want is less a issue that knowing what we want
+first..
+
+If we can have raid 0+1 on hardware, that would be the best I guess.
+
+
+&gt;<i> &gt; So we need to :
+</I>&gt;<i> &gt; - define the list of login/password/url to store there. On top of my
+</I>&gt;<i> &gt; head, I would say :
+</I>&gt;<i> &gt; - web interface for online.net ( anne and I )
+</I>&gt;<i> &gt; - impi interface password ( not set yet )
+</I>&gt;<i> Ipmi isn't accessible publicly (reboot feature and virtual kvm is avaible in
+</I>&gt;<i> online web interface).
+</I>
+Oki, so one less to manage, but still the other to do :)
+
+&gt;<i> &gt; - bios password, if any, ( I think we didn't set them )
+</I>&gt;<i> Plz don't set bios password.
+</I>
+I am speaking of the server at LO datacenter
+
+&gt;<i> &gt; - dns domain at gandi.net, ( romain should have it )
+</I>&gt;<i> If you transfer it on online account i can flag the domain(s) as gift (plz just
+</I>&gt;<i> wait wednesday for the xfer).
+</I>
+How would that solve the issue of keeping the password ?
+( I see this could save us 12 euros per year, but that's enough to pay
+us 1/3 beer per sysadm in Paris, that's not much )
+
+--
+Michael Scherer
+
+</PRE>
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001504.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001580.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1517">[ date ]</a>
+ <a href="thread.html#1517">[ thread ]</a>
+ <a href="subject.html#1517">[ subject ]</a>
+ <a href="author.html#1517">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001518.html b/zarb-ml/mageia-sysadm/2011-January/001518.html
new file mode 100644
index 000000000..71cfed645
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001518.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] maint db, rails and hosting
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20maint%20db%2C%20rails%20and%20hosting&In-Reply-To=%3C1294249631.29097.40.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001516.html">
+ <LINK REL="Next" HREF="001519.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] maint db, rails and hosting</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20maint%20db%2C%20rails%20and%20hosting&In-Reply-To=%3C1294249631.29097.40.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] maint db, rails and hosting">misc at zarb.org
+ </A><BR>
+ <I>Wed Jan 5 18:47:11 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001516.html">[Mageia-sysadm] maint db, rails and hosting
+</A></li>
+ <LI>Next message: <A HREF="001519.html">[Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1518">[ date ]</a>
+ <a href="thread.html#1518">[ thread ]</a>
+ <a href="subject.html#1518">[ subject ]</a>
+ <a href="author.html#1518">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le mercredi 05 janvier 2011 &#224; 17:38 +0100, Romain d'Alverny a &#233;crit :
+&gt;<i> Hi there,
+</I>
+&gt;<i> What's your take on this?
+</I>&gt;<i> - hosting Rails apps; how/where to host them (remember we have Gandi vhosts);
+</I>
+if rails support fastcgi, we can host it on alamut. But the obvious
+problem is that we have perl ( catdap, mga mirror, bugzilla ) and ruby
+and python.
+
+And please, try to use postgresql rather than mysql. We do have a
+postgresql expert on board ( Olivier ) and postgresql is much more
+integrated with puppet at the moment.
+
+And for rails application, people have asked to consider redmine
+( stormi, xrogaan on irc ), gitorious ( several people ) and teambox
+( well, you, and shikamaru is packaging it ). So rails is likely to hard
+to avoid.
+
+&gt;<i> - how we can deal with open contributions, specifying base
+</I>&gt;<i> requirements for the tools we expect to receive (being square, but
+</I>&gt;<i> flexible enough to accept more contributions); and what these
+</I>&gt;<i> requirements would be;
+</I>
+IMHO, you should stick to a minimal number of frameworks. Easier to say
+that to do.
+
+Having several framework lead to several template engines, thus making
+web team life more complex ( ie django + tt + ruby one + php ) by
+requiring duplication of templates code everywhere, even if this issues
+can be minimized by using css and so on.
+
+It lead to people who will debug to learn all languages ( I can code in
+everything proposed, but not everybody can ), causing problem. After
+spending the nigh profiling catdap.
+
+More ever, taking framework without ensuring the team have the needed
+competence is a risk. So a minimal number of people should know before
+deploying a technology.
+
+So a list requirement of frameworks would be :
+- work with postgresql ( everything work with mysql, but we went on
+postgresql when possible :
+<A HREF="https://www.mageia.org/pipermail/mageia-sysadm/2010-October/000099.html">https://www.mageia.org/pipermail/mageia-sysadm/2010-October/000099.html</A> )
+
+- work with a template engine that is supported. TT is required for
+sympa &amp;&amp; bugzilla &amp;&amp; catalyst application, django for transifex. So
+having something similar in syntax would likely help ( but I guess the
+closest we can have is django template rather than TT ).
+
+- see how it can be handled translation wise. I know that people
+prefer .po in general, and that's supported by tx and most tools. So
+avoid custom format if possible.
+
+- obviously must have a proper stable branch/security policy , etc, same
+old criteria already laid out.
+
+
+&gt;<i> - how it's acceptable that people use infrastructure outside of
+</I>&gt;<i> mageia.org to bootstrap their contributions (like, still pointing that
+</I>&gt;<i> a master branch should be reasonably migrated to mageia.org infra, or
+</I>&gt;<i> other guideline);
+</I>
+It is acceptable, this is just slightly disheartening after working days
+and night to setup something and see that people do not even ask.
+
+But I think something outside should not be seen as official, as we
+would otherwise face governance issues ( with practical impact ), and
+that we should give incentive to people to use our infrastructure.
+One of the goal is also to avoid the mess of having several user
+databases, as it was identified as a problem in the past.
+
+Problem that could occurs are &quot;the member of the team who manage the
+project is hit by a bus and no one can request the main password&quot;, or
+&quot;someone decide to fork and close the project&quot; ( ask to fusion inventory
+people how they forked the launchpad project ).
+
+Or the various issue of &quot;provider change his mind and decide to make
+free user pay&quot; ( like bitbucket when acquired by atlassian ).
+
+
+
+&gt;<i> - how we can better advertise our infrastructure and services (how
+</I>&gt;<i> they work, how they can be used) *wink* and the sysadm team needs
+</I>&gt;<i> (more contributions/contributors)
+</I>
+A more complete wiki page should be a start. I suck at graphical design,
+and more on a wiki <A HREF="http://mageia.org/wiki/doku.php?id=sysadmin">http://mageia.org/wiki/doku.php?id=sysadmin</A> ( i defy
+people to find the link to svn without reading everything )
+
+Setting up a websvn ( that I planned to do in my spare time ) would give
+us more visibility too.
+
+Having a clear TODO list would help.
+
+I guess forcing sysadmin team to do reports, or blog about what was done
+could help. Writing better instruction than the one I wrote too ( I also
+do suck at documentation ).
+
+Removing useless mail on the ml would help to reduce signal/noise ratio.
+( that should be easy once I finish sympa and catdap ).
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001516.html">[Mageia-sysadm] maint db, rails and hosting
+</A></li>
+ <LI>Next message: <A HREF="001519.html">[Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1518">[ date ]</a>
+ <a href="thread.html#1518">[ thread ]</a>
+ <a href="subject.html#1518">[ subject ]</a>
+ <a href="author.html#1518">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001519.html b/zarb-ml/mageia-sysadm/2011-January/001519.html
new file mode 100644
index 000000000..db3ea9ff0
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001519.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B655%5D%20-%20deploy%20trunk%20as%20a%20test%20instance%2C%0A%09as%20asked%20several%20time%20on%20irc&In-Reply-To=%3C20110105181251.1490B4196F%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001518.html">
+ <LINK REL="Next" HREF="001520.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B655%5D%20-%20deploy%20trunk%20as%20a%20test%20instance%2C%0A%09as%20asked%20several%20time%20on%20irc&In-Reply-To=%3C20110105181251.1490B4196F%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 19:12:51 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001518.html">[Mageia-sysadm] maint db, rails and hosting
+</A></li>
+ <LI>Next message: <A HREF="001520.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1519">[ date ]</a>
+ <a href="thread.html#1519">[ thread ]</a>
+ <a href="subject.html#1519">[ subject ]</a>
+ <a href="author.html#1519">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 655
+Author: misc
+Date: 2011-01-05 19:12:50 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- deploy trunk as a test instance, as asked several time on irc
+
+Modified Paths:
+--------------
+ puppet/modules/catdap/manifests/init.pp
+
+Modified: puppet/modules/catdap/manifests/init.pp
+===================================================================
+--- puppet/modules/catdap/manifests/init.pp 2011-01-05 13:41:16 UTC (rev 654)
++++ puppet/modules/catdap/manifests/init.pp 2011-01-05 18:12:50 UTC (rev 655)
+@@ -1,7 +1,6 @@
+ class catdap {
+
+- $catdap_location = &quot;/var/www/identity&quot;
+- $catdap_vhost = &quot;identity.$domain&quot;
++ $upstream_svn = &quot;<A HREF="svn://svn.mageia.org/svn/soft/identity/CatDap/">svn://svn.mageia.org/svn/soft/identity/CatDap/</A>&quot;
+
+ # TODO switch to a proper rpm packaging
+ $rpm_requirement = ['perl-Catalyst-Runtime',&quot;perl-FCGI&quot;, 'perl-Catalyst-Plugin-Authorization-Roles',
+@@ -17,27 +16,41 @@
+ ensure =&gt; installed
+ }
+
+- subversion::snapshot { $catdap_location:
+- source =&gt; &quot;<A HREF="svn://svn.mageia.org/svn/soft/identity/CatDap/branches/live">svn://svn.mageia.org/svn/soft/identity/CatDap/branches/live</A>&quot;
+- }
+-
+ $ldap_password = extlookup('catdap_ldap','x')
+
+- file { &quot;$catdap_location/catdap_local.yml&quot;:
+- ensure =&gt; present,
+- owner =&gt; root,
+- group =&gt; apache,
+- mode =&gt; 640,
+- content =&gt; template(&quot;catdap/catdap_local.yml&quot;),
+- require =&gt; Subversion::Snapshot[$catdap_location]
++
++
++ define catdap_snapshot($location, $svn_location) {
++ file { &quot;$location/catdap_local.yml&quot;:
++ ensure =&gt; present,
++ owner =&gt; root,
++ group =&gt; apache,
++ mode =&gt; 640,
++ content =&gt; template(&quot;catdap/catdap_local.yml&quot;),
++ require =&gt; Subversion::Snapshot[$location],
++ }
++
++ subversion::snapshot { $location:
++ source =&gt; $svn_location
++ }
++
++ apache::vhost_catalyst_app { $name:
++ script =&gt; &quot;$location/script/catdap_fastcgi.pl&quot;,
++ location =&gt; $location,
++ use_ssl =&gt; true,
++ }
++
++ apache::vhost_redirect_ssl { $name: }
+ }
+
+- apache::vhost_catalyst_app { $catdap_vhost:
+- script =&gt; &quot;$catdap_location/script/catdap_fastcgi.pl&quot;,
+- location =&gt; $catdap_location,
+- use_ssl =&gt; true,
++ catdap_snapshot { &quot;identity.$domain&quot;:
++ location =&gt; &quot;/var/www/identity&quot;,
++ svn_location =&gt; &quot;$upstream_svn/branches/live&quot;
+ }
+
+- apache::vhost_redirect_ssl { $catdap_vhost: }
++ catdap_snapshot { &quot;identity-trunk.$domain&quot;:
++ location =&gt; &quot;/var/www/identity-trunk&quot;,
++ svn_location =&gt; &quot;$upstream_svn/trunk&quot;
++ }
+
+ }
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/6f9d880c/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001518.html">[Mageia-sysadm] maint db, rails and hosting
+</A></li>
+ <LI>Next message: <A HREF="001520.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1519">[ date ]</a>
+ <a href="thread.html#1519">[ thread ]</a>
+ <a href="subject.html#1519">[ subject ]</a>
+ <a href="author.html#1519">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001520.html b/zarb-ml/mageia-sysadm/2011-January/001520.html
new file mode 100644
index 000000000..6b3c08798
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001520.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for jonund.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20jonund.mageia.org&In-Reply-To=%3C20110105185056.68A5641978%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001519.html">
+ <LINK REL="Next" HREF="001521.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for jonund.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20jonund.mageia.org&In-Reply-To=%3C20110105185056.68A5641978%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for jonund.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Wed Jan 5 19:50:56 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001519.html">[Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc
+</A></li>
+ <LI>Next message: <A HREF="001521.html">[Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1520">[ date ]</a>
+ <a href="thread.html#1520">[ thread ]</a>
+ <a href="subject.html#1520">[ subject ]</a>
+ <a href="author.html#1520">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Wed Jan 05 19:50:56 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Wed Jan 05 19:50:56 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001519.html">[Mageia-sysadm] [655] - deploy trunk as a test instance, as asked several time on irc
+</A></li>
+ <LI>Next message: <A HREF="001521.html">[Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1520">[ date ]</a>
+ <a href="thread.html#1520">[ thread ]</a>
+ <a href="subject.html#1520">[ subject ]</a>
+ <a href="author.html#1520">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001521.html b/zarb-ml/mageia-sysadm/2011-January/001521.html
new file mode 100644
index 000000000..d9011841e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001521.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B656%5D%20-%20add%20a%20module%20to%20handle%20various%20websites%2C%0A%09mainly%20for%20storing&In-Reply-To=%3C20110105190950.DD3A341979%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001520.html">
+ <LINK REL="Next" HREF="001522.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B656%5D%20-%20add%20a%20module%20to%20handle%20various%20websites%2C%0A%09mainly%20for%20storing&In-Reply-To=%3C20110105190950.DD3A341979%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:09:50 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001520.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001522.html">[Mageia-sysadm] [657] - update dns to give the new address for donation
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1521">[ date ]</a>
+ <a href="thread.html#1521">[ thread ]</a>
+ <a href="subject.html#1521">[ subject ]</a>
+ <a href="author.html#1521">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 656
+Author: misc
+Date: 2011-01-05 20:09:50 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- add a module to handle various websites, mainly for storing
+them.
+- add the redirection of donate, asked by rda on sysadm ml
+
+Added Paths:
+-----------
+ puppet/modules/websites/
+ puppet/modules/websites/manifests/
+ puppet/modules/websites/manifests/init.pp
+ puppet/modules/websites/templates/
+ puppet/modules/websites/templates/vhost_donate.conf
+
+Added: puppet/modules/websites/manifests/init.pp
+===================================================================
+--- puppet/modules/websites/manifests/init.pp (rev 0)
++++ puppet/modules/websites/manifests/init.pp 2011-01-05 19:09:50 UTC (rev 656)
+@@ -0,0 +1,8 @@
++class websites {
++ # should expire on June 2011
++ class donate {
++ apache::vhost_other_app { &quot;donate.$domain&quot;:
++ vhost_file =&gt; &quot;websites/vhost_donate.conf&quot;,
++ }
++ }
++}
+
+Added: puppet/modules/websites/templates/vhost_donate.conf
+===================================================================
+--- puppet/modules/websites/templates/vhost_donate.conf (rev 0)
++++ puppet/modules/websites/templates/vhost_donate.conf 2011-01-05 19:09:50 UTC (rev 656)
+@@ -0,0 +1,14 @@
++&lt;VirtualHost *:80&gt;
++ ServerName donate.&lt;%= domain %&gt;
++
++ RewriteEngine on
++ RewriteRule ^/(.*)$ <A HREF="http://www.&lt;%=">http://www.&lt;%=</A> domain %&gt;/$1/donate/ [R=permanent,L]
++ #DocumentRoot /dev/null
++ CustomLog /var/log/httpd/donate_log combined
++ ErrorLog /var/log/httpd/error_donate_log
++
++ &lt;Location /&gt;
++ Allow from all
++ &lt;/Location&gt;
++
++&lt;/VirtualHost&gt;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/80473389/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001520.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001522.html">[Mageia-sysadm] [657] - update dns to give the new address for donation
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1521">[ date ]</a>
+ <a href="thread.html#1521">[ thread ]</a>
+ <a href="subject.html#1521">[ subject ]</a>
+ <a href="author.html#1521">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001522.html b/zarb-ml/mageia-sysadm/2011-January/001522.html
new file mode 100644
index 000000000..07b7cf594
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001522.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [657] - update dns to give the new address for donation
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B657%5D%20-%20update%20dns%20to%20give%20the%20new%20address%20for%0A%09donation&In-Reply-To=%3C20110105190952.BE79F41979%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001521.html">
+ <LINK REL="Next" HREF="001523.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [657] - update dns to give the new address for donation</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B657%5D%20-%20update%20dns%20to%20give%20the%20new%20address%20for%0A%09donation&In-Reply-To=%3C20110105190952.BE79F41979%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [657] - update dns to give the new address for donation">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:09:52 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001521.html">[Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing
+</A></li>
+ <LI>Next message: <A HREF="001523.html">[Mageia-sysadm] [658] - also add identity trunk, while I am on it
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1522">[ date ]</a>
+ <a href="thread.html#1522">[ thread ]</a>
+ <a href="subject.html#1522">[ subject ]</a>
+ <a href="author.html#1522">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 657
+Author: misc
+Date: 2011-01-05 20:09:52 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- update dns to give the new address for donation
+
+Modified Paths:
+--------------
+ puppet/modules/bind/templates/zones/mageia.org.zone
+
+Modified: puppet/modules/bind/templates/zones/mageia.org.zone
+===================================================================
+--- puppet/modules/bind/templates/zones/mageia.org.zone 2011-01-05 19:09:50 UTC (rev 656)
++++ puppet/modules/bind/templates/zones/mageia.org.zone 2011-01-05 19:09:52 UTC (rev 657)
+@@ -3,7 +3,7 @@
+ ; $Id$
+ $TTL 3D
+ @ IN SOA ns0.mageia.org. root.mageia.org. (
+- 2010121501 ; Serial
++ 2010121502 ; Serial
+ 21600 ; Refresh
+ 3600 ; Retry
+ 2419200 ; Expire
+@@ -68,8 +68,8 @@
+ svn IN CNAME valstar
+ meetbot IN CNAME krampouezh
+
+-donate IN CNAME www-aufml
+-donation IN CNAME www-aufml
++donate IN CNAME alamut
++donation IN CNAME alamut
+
+ puppetmaster IN CNAME valstar
+ pkgsubmit IN CNAME valstar
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/a25cf069/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001521.html">[Mageia-sysadm] [656] - add a module to handle various websites, mainly for storing
+</A></li>
+ <LI>Next message: <A HREF="001523.html">[Mageia-sysadm] [658] - also add identity trunk, while I am on it
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1522">[ date ]</a>
+ <a href="thread.html#1522">[ thread ]</a>
+ <a href="subject.html#1522">[ subject ]</a>
+ <a href="author.html#1522">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001523.html b/zarb-ml/mageia-sysadm/2011-January/001523.html
new file mode 100644
index 000000000..251899ed3
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001523.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [658] - also add identity trunk, while I am on it
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B658%5D%20-%20also%20add%20identity%20trunk%2C%20while%20I%20am%20on%20it&In-Reply-To=%3C20110105190953.E84DC41979%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001522.html">
+ <LINK REL="Next" HREF="001525.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [658] - also add identity trunk, while I am on it</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B658%5D%20-%20also%20add%20identity%20trunk%2C%20while%20I%20am%20on%20it&In-Reply-To=%3C20110105190953.E84DC41979%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [658] - also add identity trunk, while I am on it">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:09:53 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001522.html">[Mageia-sysadm] [657] - update dns to give the new address for donation
+</A></li>
+ <LI>Next message: <A HREF="001525.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1523">[ date ]</a>
+ <a href="thread.html#1523">[ thread ]</a>
+ <a href="subject.html#1523">[ subject ]</a>
+ <a href="author.html#1523">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 658
+Author: misc
+Date: 2011-01-05 20:09:53 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- also add identity trunk, while I am on it
+
+Modified Paths:
+--------------
+ puppet/modules/bind/templates/zones/mageia.org.zone
+
+Modified: puppet/modules/bind/templates/zones/mageia.org.zone
+===================================================================
+--- puppet/modules/bind/templates/zones/mageia.org.zone 2011-01-05 19:09:52 UTC (rev 657)
++++ puppet/modules/bind/templates/zones/mageia.org.zone 2011-01-05 19:09:53 UTC (rev 658)
+@@ -77,6 +77,7 @@
+ ldap IN CNAME valstar
+
+ identity IN CNAME alamut
++identity-trunk IN CNAME alamut
+ mirrors IN CNAME alamut
+ epoll IN CNAME alamut
+ pgsql IN CNAME alamut
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/157b5a6b/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001522.html">[Mageia-sysadm] [657] - update dns to give the new address for donation
+</A></li>
+ <LI>Next message: <A HREF="001525.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1523">[ date ]</a>
+ <a href="thread.html#1523">[ thread ]</a>
+ <a href="subject.html#1523">[ subject ]</a>
+ <a href="author.html#1523">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001524.html b/zarb-ml/mageia-sysadm/2011-January/001524.html
new file mode 100644
index 000000000..fa13f2afd
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001524.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] DNS update and redirection
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3C1294254653.29097.44.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001476.html">
+ <LINK REL="Next" HREF="001477.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] DNS update and redirection</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20DNS%20update%20and%20redirection&In-Reply-To=%3C1294254653.29097.44.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] DNS update and redirection">misc at zarb.org
+ </A><BR>
+ <I>Wed Jan 5 20:10:52 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001476.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001477.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1524">[ date ]</a>
+ <a href="thread.html#1524">[ thread ]</a>
+ <a href="subject.html#1524">[ subject ]</a>
+ <a href="author.html#1524">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le lundi 03 janvier 2011 &#224; 22:24 +0100, Romain d'Alverny a &#233;crit :
+&gt;<i> On Mon, Jan 3, 2011 at 22:21, Michael Scherer &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">misc at zarb.org</A>&gt; wrote:
+</I>&gt;<i> &gt; Le lundi 03 janvier 2011 &#224; 21:28 +0100, Romain d'Alverny a &#233;crit :
+</I>&gt;<i> &gt;&gt; RewriteRule ^/(.*)/$ <A HREF="http://www.mageia.org/$1/donate/">http://www.mageia.org/$1/donate/</A> [R,L]
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; I would add R=permanent, to ease the work of search engine ( even if I
+</I>&gt;<i> &gt; have no slight idea if this would really help them, but I assume that
+</I>&gt;<i> &gt; following http norm is the best we can do ).
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; Shouldn't we also set some logs to see if we have traffic on this
+</I>&gt;<i> &gt; vhost ?
+</I>&gt;<i>
+</I>&gt;<i> Yes, that would allow to know right away if/when we need to just cut this off.
+</I>&gt;<i>
+</I>&gt;<i> &gt;&gt; What do you think? Can we do that?
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; Well, we can, I guess we can host it on alamut.
+</I>&gt;<i>
+</I>&gt;<i> Great! Thanks.
+</I>
+Should be ok as soon as puppet apply configuration.
+
+The log are in apache format, in /var/log/httpd/donate*_log.
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001476.html">[Mageia-sysadm] DNS update and redirection
+</A></li>
+ <LI>Next message: <A HREF="001477.html">[Mageia-sysadm] Puppet Report for champagne.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1524">[ date ]</a>
+ <a href="thread.html#1524">[ thread ]</a>
+ <a href="subject.html#1524">[ subject ]</a>
+ <a href="author.html#1524">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001525.html b/zarb-ml/mageia-sysadm/2011-January/001525.html
new file mode 100644
index 000000000..212ae0be6
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001525.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for jonund.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20jonund.mageia.org&In-Reply-To=%3C20110105192100.314F14197D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001523.html">
+ <LINK REL="Next" HREF="001526.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for jonund.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20jonund.mageia.org&In-Reply-To=%3C20110105192100.314F14197D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for jonund.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:21:00 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001523.html">[Mageia-sysadm] [658] - also add identity trunk, while I am on it
+</A></li>
+ <LI>Next message: <A HREF="001526.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1525">[ date ]</a>
+ <a href="thread.html#1525">[ thread ]</a>
+ <a href="subject.html#1525">[ subject ]</a>
+ <a href="author.html#1525">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Wed Jan 05 20:21:00 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Wed Jan 05 20:21:00 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001523.html">[Mageia-sysadm] [658] - also add identity trunk, while I am on it
+</A></li>
+ <LI>Next message: <A HREF="001526.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1525">[ date ]</a>
+ <a href="thread.html#1525">[ thread ]</a>
+ <a href="subject.html#1525">[ subject ]</a>
+ <a href="author.html#1525">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001526.html b/zarb-ml/mageia-sysadm/2011-January/001526.html
new file mode 100644
index 000000000..af85df78e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001526.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for alamut.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20alamut.mageia.org&In-Reply-To=%3C20110105192237.0EBD94197E%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001525.html">
+ <LINK REL="Next" HREF="001527.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for alamut.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20alamut.mageia.org&In-Reply-To=%3C20110105192237.0EBD94197E%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for alamut.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:22:36 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001525.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001527.html">[Mageia-sysadm] Puppet Report for krampouezh.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1526">[ date ]</a>
+ <a href="thread.html#1526">[ thread ]</a>
+ <a href="subject.html#1526">[ subject ]</a>
+ <a href="author.html#1526">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Wed Jan 05 20:22:23 +0100 2011 /Stage[main]/Bind::Bind_base/Service[named] (err): Failed to call refresh: Could not start Service[named]: Execution of '/sbin/service named start' returned 1: at /etc/puppet/modules/bind/manifests/init.pp:11
+</PRE>
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001525.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001527.html">[Mageia-sysadm] Puppet Report for krampouezh.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1526">[ date ]</a>
+ <a href="thread.html#1526">[ thread ]</a>
+ <a href="subject.html#1526">[ subject ]</a>
+ <a href="author.html#1526">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001527.html b/zarb-ml/mageia-sysadm/2011-January/001527.html
new file mode 100644
index 000000000..abf193eb6
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001527.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for krampouezh.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20krampouezh.mageia.org&In-Reply-To=%3C20110105192411.E7BB44197F%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001526.html">
+ <LINK REL="Next" HREF="001528.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for krampouezh.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20krampouezh.mageia.org&In-Reply-To=%3C20110105192411.E7BB44197F%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for krampouezh.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:24:11 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001526.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001528.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1527">[ date ]</a>
+ <a href="thread.html#1527">[ thread ]</a>
+ <a href="subject.html#1527">[ subject ]</a>
+ <a href="author.html#1527">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Wed Jan 05 20:24:11 +0100 2011 /Stage[main]/Bind::Bind_base/Service[named] (err): Failed to call refresh: Could not start Service[named]: Execution of '/sbin/service named start' returned 1: at /etc/puppet/modules/bind/manifests/init.pp:11
+</PRE>
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001526.html">[Mageia-sysadm] Puppet Report for alamut.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001528.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1527">[ date ]</a>
+ <a href="thread.html#1527">[ thread ]</a>
+ <a href="subject.html#1527">[ subject ]</a>
+ <a href="author.html#1527">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001528.html b/zarb-ml/mageia-sysadm/2011-January/001528.html
new file mode 100644
index 000000000..ce30e0be6
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001528.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [659] add missing rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B659%5D%20add%20missing%20rpm&In-Reply-To=%3C20110105194018.76FEB4197F%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001527.html">
+ <LINK REL="Next" HREF="001531.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [659] add missing rpm</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B659%5D%20add%20missing%20rpm&In-Reply-To=%3C20110105194018.76FEB4197F%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [659] add missing rpm">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:40:18 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001527.html">[Mageia-sysadm] Puppet Report for krampouezh.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001531.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1528">[ date ]</a>
+ <a href="thread.html#1528">[ thread ]</a>
+ <a href="subject.html#1528">[ subject ]</a>
+ <a href="author.html#1528">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 659
+Author: misc
+Date: 2011-01-05 20:40:18 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+add missing rpm
+
+Modified Paths:
+--------------
+ puppet/modules/catdap/manifests/init.pp
+
+Modified: puppet/modules/catdap/manifests/init.pp
+===================================================================
+--- puppet/modules/catdap/manifests/init.pp 2011-01-05 19:09:53 UTC (rev 658)
++++ puppet/modules/catdap/manifests/init.pp 2011-01-05 19:40:18 UTC (rev 659)
+@@ -9,7 +9,7 @@
+ &quot;perl-Catalyst-P-S-State-Cookie&quot;, &quot;perl-Catalyst-P-S-Store-File&quot;, &quot;perl-Catalyst-View-Email&quot;,
+ &quot;perl-Catalyst-View-TT&quot;, &quot;perl-Config-General&quot;, &quot;perl-Crypt-CBC&quot;, &quot;perl-Data-UUID&quot;,
+ &quot;perl-Email-Valid&quot;, &quot;perl-Moose&quot;, &quot;perl-namespace-autoclean&quot;, &quot;perl-Test-Simple&quot;,
+-&quot;perl-Crypt-Blowfish&quot;, &quot;perl-Email-Date-Format&quot;, &quot;perl-YAML-LibYAML&quot;,
++&quot;perl-Crypt-Blowfish&quot;, &quot;perl-Email-Date-Format&quot;, &quot;perl-YAML-LibYAML&quot;,&quot;perl-Catalyst-Plugin-Unicode-Encoding&quot;,
+ ]
+
+ package { $rpm_requirement:
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/c743e0e4/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001527.html">[Mageia-sysadm] Puppet Report for krampouezh.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001531.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1528">[ date ]</a>
+ <a href="thread.html#1528">[ thread ]</a>
+ <a href="subject.html#1528">[ subject ]</a>
+ <a href="author.html#1528">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001529.html b/zarb-ml/mageia-sysadm/2011-January/001529.html
new file mode 100644
index 000000000..102988132
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001529.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Puppet Report for jonund.mageia.org
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20jonund.mageia.org&In-Reply-To=%3C20110105195102.7CFB241983%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001531.html">
+ <LINK REL="Next" HREF="001530.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Puppet Report for jonund.mageia.org</H1>
+ <B>report at valstar.mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Puppet%20Report%20for%20jonund.mageia.org&In-Reply-To=%3C20110105195102.7CFB241983%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Puppet Report for jonund.mageia.org">report at valstar.mageia.org
+ </A><BR>
+ <I>Wed Jan 5 20:51:02 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001531.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI>Next message: <A HREF="001530.html">[Mageia-sysadm] [213] - revert commit 196.
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1529">[ date ]</a>
+ <a href="thread.html#1529">[ thread ]</a>
+ <a href="subject.html#1529">[ subject ]</a>
+ <a href="author.html#1529">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Wed Jan 05 20:51:02 +0100 2011 Puppet (err): Could not retrieve catalog from remote server: end of file reached
+Wed Jan 05 20:51:02 +0100 2011 Puppet (err): Could not retrieve catalog; skipping run
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001531.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI>Next message: <A HREF="001530.html">[Mageia-sysadm] [213] - revert commit 196.
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1529">[ date ]</a>
+ <a href="thread.html#1529">[ thread ]</a>
+ <a href="subject.html#1529">[ subject ]</a>
+ <a href="author.html#1529">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001530.html b/zarb-ml/mageia-sysadm/2011-January/001530.html
new file mode 100644
index 000000000..e142e002b
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001530.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [213] - revert commit 196.
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B213%5D%20-%20revert%20commit%20196.&In-Reply-To=%3C20110105201305.5A81D41984%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001529.html">
+ <LINK REL="Next" HREF="001532.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [213] - revert commit 196.</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B213%5D%20-%20revert%20commit%20196.&In-Reply-To=%3C20110105201305.5A81D41984%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [213] - revert commit 196.">root at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 21:13:05 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001529.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001532.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1530">[ date ]</a>
+ <a href="thread.html#1530">[ thread ]</a>
+ <a href="subject.html#1530">[ subject ]</a>
+ <a href="author.html#1530">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 213
+Author: misc
+Date: 2011-01-05 21:13:05 +0100 (Wed, 05 Jan 2011)
+Log Message:
+-----------
+- revert commit 196. The button is near the form because it is related to the
+form, while the link are not. ( ie, we use spatial proximity as a affordance )
+
+Modified Paths:
+--------------
+ identity/CatDap/trunk/root/index.tt
+
+Modified: identity/CatDap/trunk/root/index.tt
+===================================================================
+--- identity/CatDap/trunk/root/index.tt 2011-01-05 15:32:57 UTC (rev 212)
++++ identity/CatDap/trunk/root/index.tt 2011-01-05 20:13:05 UTC (rev 213)
+@@ -10,13 +10,13 @@
+ &lt;label for=&quot;password_&quot;&gt;[% l('Password : ') %]&lt;/label&gt;
+ &lt;input id=&quot;password_&quot; type=&quot;password&quot; name=&quot;password&quot; /&gt;
+ &lt;br /&gt;
++ &lt;button type=&quot;submit&quot; value=&quot;[% l('Login') %]&quot; &gt;[% l('Login') %]&lt;/button&gt;
+ &lt;/div&gt;
+ &lt;div id=&quot;login_form_line&quot;&gt;
+ &lt;span&gt;&lt;a href=&quot;/register&quot;&gt;[% l('Register') %]&lt;/a&gt; |
+ @todo [% l('Forgotten password?') %]
+ &lt;!--&lt;a href=&quot;/forgot_password&quot;&gt;[% l('Forgotten password?') %]&lt;/a&gt; --&gt;
+ &lt;/span&gt;
+- &lt;button type=&quot;submit&quot; value=&quot;[% l('Login') %]&quot; &gt;[% l('Login') %]&lt;/button&gt;
+ &lt;/div&gt;
+ &lt;/form&gt;
+ &lt;/div&gt;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110105/2168be7c/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001529.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI>Next message: <A HREF="001532.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1530">[ date ]</a>
+ <a href="thread.html#1530">[ thread ]</a>
+ <a href="subject.html#1530">[ subject ]</a>
+ <a href="author.html#1530">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001531.html b/zarb-ml/mageia-sysadm/2011-January/001531.html
new file mode 100644
index 000000000..04feab2e5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001531.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [659] add missing rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B659%5D%20add%20missing%20rpm&In-Reply-To=%3C1294258606.29097.45.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001528.html">
+ <LINK REL="Next" HREF="001529.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [659] add missing rpm</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B659%5D%20add%20missing%20rpm&In-Reply-To=%3C1294258606.29097.45.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [659] add missing rpm">misc at zarb.org
+ </A><BR>
+ <I>Wed Jan 5 21:16:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001528.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI>Next message: <A HREF="001529.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1531">[ date ]</a>
+ <a href="thread.html#1531">[ thread ]</a>
+ <a href="subject.html#1531">[ subject ]</a>
+ <a href="author.html#1531">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le mercredi 05 janvier 2011 &#224; 20:40 +0100, <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">root at mageia.org</A> a &#233;crit :
+&gt;<i> Revision: 659
+</I>&gt;<i> Author: misc
+</I>&gt;<i> Date: 2011-01-05 20:40:18 +0100 (Wed, 05 Jan 2011)
+</I>&gt;<i> Log Message:
+</I>&gt;<i> -----------
+</I>&gt;<i> add missing rpm
+</I>
+I manually backported it from cooker, I guess it should be added to the
+repository that boklm created.
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001528.html">[Mageia-sysadm] [659] add missing rpm
+</A></li>
+ <LI>Next message: <A HREF="001529.html">[Mageia-sysadm] Puppet Report for jonund.mageia.org
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1531">[ date ]</a>
+ <a href="thread.html#1531">[ thread ]</a>
+ <a href="subject.html#1531">[ subject ]</a>
+ <a href="author.html#1531">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001532.html b/zarb-ml/mageia-sysadm/2011-January/001532.html
new file mode 100644
index 000000000..b8e91e334
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001532.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] ml migration
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20ml%20migration&In-Reply-To=%3C1294258900.29097.50.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001530.html">
+ <LINK REL="Next" HREF="001538.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] ml migration</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20ml%20migration&In-Reply-To=%3C1294258900.29097.50.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] ml migration">misc at zarb.org
+ </A><BR>
+ <I>Wed Jan 5 21:21:40 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001530.html">[Mageia-sysadm] [213] - revert commit 196.
+</A></li>
+ <LI>Next message: <A HREF="001538.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1532">[ date ]</a>
+ <a href="thread.html#1532">[ thread ]</a>
+ <a href="subject.html#1532">[ subject ]</a>
+ <a href="author.html#1532">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi,
+
+since new version of catdap was almost deployed ( I just need to find
+why the branch live ( <A HREF="http://identity.mageia.org/">http://identity.mageia.org/</A> ) do not look like the
+trunk ( <A HREF="http://identity-trunk.mageia.org/">http://identity-trunk.mageia.org/</A> ), despites them being
+merged ), I think we can start pushing mailing lists.
+
+SO I plan, before doing this for i18n, do a first run for us.
+
+As people complained there is too much noise here, I propose the
+following :
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sysadm-commits at ml.mageia.org</A>, for svn commit for adm repository
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sysadm-reports at ml.mageia.org</A>, for puppet reports
+
+Any other idea ? ( I guess we could add cronjob output somewhere, if we
+need, and nagios/hobbit/whatever too )
+
+If no one oppose, the change will be effective before the end of the
+week.
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001530.html">[Mageia-sysadm] [213] - revert commit 196.
+</A></li>
+ <LI>Next message: <A HREF="001538.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1532">[ date ]</a>
+ <a href="thread.html#1532">[ thread ]</a>
+ <a href="subject.html#1532">[ subject ]</a>
+ <a href="author.html#1532">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001533.html b/zarb-ml/mageia-sysadm/2011-January/001533.html
new file mode 100644
index 000000000..0e822e1e1
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001533.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105221837.1A29A4199A%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="002391.html">
+ <LINK REL="Next" HREF="001534.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105221837.1A29A4199A%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 23:18:37 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="002391.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI>Next message: <A HREF="001534.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1533">[ date ]</a>
+ <a href="thread.html#1533">[ thread ]</a>
+ <a href="subject.html#1533">[ subject ]</a>
+ <a href="author.html#1533">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105204027.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105204027.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105204027.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105204027.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105204027.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105204027.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="002391.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI>Next message: <A HREF="001534.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1533">[ date ]</a>
+ <a href="thread.html#1533">[ thread ]</a>
+ <a href="subject.html#1533">[ subject ]</a>
+ <a href="author.html#1533">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001534.html b/zarb-ml/mageia-sysadm/2011-January/001534.html
new file mode 100644
index 000000000..c469a690b
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001534.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105221837.6BF0D4199A%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001533.html">
+ <LINK REL="Next" HREF="001535.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105221837.6BF0D4199A%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 23:18:37 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001533.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001535.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1534">[ date ]</a>
+ <a href="thread.html#1534">[ thread ]</a>
+ <a href="subject.html#1534">[ subject ]</a>
+ <a href="author.html#1534">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105204027.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105204027.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105204027.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105204027.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105204028.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105204028.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105204028.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105204028.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105204027.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105204027.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105204028.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105204028.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001533.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001535.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1534">[ date ]</a>
+ <a href="thread.html#1534">[ thread ]</a>
+ <a href="subject.html#1534">[ subject ]</a>
+ <a href="author.html#1534">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001535.html b/zarb-ml/mageia-sysadm/2011-January/001535.html
new file mode 100644
index 000000000..614a47302
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001535.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105224428.1BC5E4199E%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001534.html">
+ <LINK REL="Next" HREF="001536.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105224428.1BC5E4199E%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 23:44:28 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001534.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001536.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1535">[ date ]</a>
+ <a href="thread.html#1535">[ thread ]</a>
+ <a href="subject.html#1535">[ subject ]</a>
+ <a href="author.html#1535">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105223833.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105223833.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105223833.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105223833.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105223833.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105223833.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001534.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001536.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1535">[ date ]</a>
+ <a href="thread.html#1535">[ thread ]</a>
+ <a href="subject.html#1535">[ subject ]</a>
+ <a href="author.html#1535">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001536.html b/zarb-ml/mageia-sysadm/2011-January/001536.html
new file mode 100644
index 000000000..52c9fef06
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001536.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105224428.7F16E4199E%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001535.html">
+ <LINK REL="Next" HREF="001537.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110105224428.7F16E4199E%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 23:44:28 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001535.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001537.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1536">[ date ]</a>
+ <a href="thread.html#1536">[ thread ]</a>
+ <a href="subject.html#1536">[ subject ]</a>
+ <a href="author.html#1536">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105223833.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105223833.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105223834.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105223834.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105223834.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110105223834.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105223833.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105223833.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105223834.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110105223834.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105223833.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110105202724.pterjan.valstar.21150/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110105223833.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001535.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001537.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1536">[ date ]</a>
+ <a href="thread.html#1536">[ thread ]</a>
+ <a href="subject.html#1536">[ subject ]</a>
+ <a href="author.html#1536">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001537.html b/zarb-ml/mageia-sysadm/2011-January/001537.html
new file mode 100644
index 000000000..b7be3ae40
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001537.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110105225333.04C00419A1%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001536.html">
+ <LINK REL="Next" HREF="001539.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm</H1>
+ <B>Emi the upload bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110105225333.04C00419A1%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Wed Jan 5 23:53:32 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001536.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001539.html">[Mageia-sysadm] Catdap trunk instance, and update
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1537">[ date ]</a>
+ <a href="thread.html#1537">[ thread ]</a>
+ <a href="subject.html#1537">[ subject ]</a>
+ <a href="author.html#1537">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>The upload of the following packages failed:
+- @156:repsys-1.9.2-1mdv2010.1.src.rpm
+
+Upload log available in <A HREF="http://pkgsubmit.mageia.org/uploads/rejected//cauldron/main/release/20110105225212.pterjan.valstar.6049.youri">http://pkgsubmit.mageia.org/uploads/rejected//cauldron/main/release/20110105225212.pterjan.valstar.6049.youri</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001536.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001539.html">[Mageia-sysadm] Catdap trunk instance, and update
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1537">[ date ]</a>
+ <a href="thread.html#1537">[ thread ]</a>
+ <a href="subject.html#1537">[ subject ]</a>
+ <a href="author.html#1537">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001538.html b/zarb-ml/mageia-sysadm/2011-January/001538.html
new file mode 100644
index 000000000..b4b9e4aec
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001538.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] ml migration
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20ml%20migration&In-Reply-To=%3C20110105225725.GI21938%40mars-attacks.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001532.html">
+ <LINK REL="Next" HREF="001548.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] ml migration</H1>
+ <B>nicolas vigier</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20ml%20migration&In-Reply-To=%3C20110105225725.GI21938%40mars-attacks.org%3E"
+ TITLE="[Mageia-sysadm] ml migration">boklm at mars-attacks.org
+ </A><BR>
+ <I>Wed Jan 5 23:57:26 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001532.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI>Next message: <A HREF="001548.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1538">[ date ]</a>
+ <a href="thread.html#1538">[ thread ]</a>
+ <a href="subject.html#1538">[ subject ]</a>
+ <a href="author.html#1538">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>On Wed, 05 Jan 2011, Michael Scherer wrote:
+
+&gt;<i> Hi,
+</I>&gt;<i>
+</I>&gt;<i> since new version of catdap was almost deployed ( I just need to find
+</I>&gt;<i> why the branch live ( <A HREF="http://identity.mageia.org/">http://identity.mageia.org/</A> ) do not look like the
+</I>&gt;<i> trunk ( <A HREF="http://identity-trunk.mageia.org/">http://identity-trunk.mageia.org/</A> ), despites them being
+</I>&gt;<i> merged ), I think we can start pushing mailing lists.
+</I>&gt;<i>
+</I>&gt;<i> SO I plan, before doing this for i18n, do a first run for us.
+</I>&gt;<i>
+</I>&gt;<i> As people complained there is too much noise here, I propose the
+</I>&gt;<i> following :
+</I>&gt;<i> <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sysadm-commits at ml.mageia.org</A>, for svn commit for adm repository
+</I>&gt;<i> <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sysadm-reports at ml.mageia.org</A>, for puppet reports
+</I>
+That's a good idea. And an other one for discussions (to replace this
+one) ?
+
+&gt;<i>
+</I>&gt;<i> Any other idea ? ( I guess we could add cronjob output somewhere, if we
+</I>&gt;<i> need, and nagios/hobbit/whatever too )
+</I>
+cronjob and monitoring would go to sysadm-reports too ?
+
+</PRE>
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001532.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI>Next message: <A HREF="001548.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1538">[ date ]</a>
+ <a href="thread.html#1538">[ thread ]</a>
+ <a href="subject.html#1538">[ subject ]</a>
+ <a href="author.html#1538">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001539.html b/zarb-ml/mageia-sysadm/2011-January/001539.html
new file mode 100644
index 000000000..1f5a282d4
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001539.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Catdap trunk instance, and update
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Catdap%20trunk%20instance%2C%20and%20update&In-Reply-To=%3C1294268872.29097.64.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001537.html">
+ <LINK REL="Next" HREF="001540.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Catdap trunk instance, and update</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Catdap%20trunk%20instance%2C%20and%20update&In-Reply-To=%3C1294268872.29097.64.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] Catdap trunk instance, and update">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 00:07:51 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001537.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001540.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1539">[ date ]</a>
+ <a href="thread.html#1539">[ thread ]</a>
+ <a href="subject.html#1539">[ subject ]</a>
+ <a href="author.html#1539">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi,
+some people asked us^W to have a trunk installation of catdap, and so
+here it is :
+<A HREF="https://identity-trunk.mageia.org/">https://identity-trunk.mageia.org/</A>
+
+Updated every 15 minutes, from trunk.
+
+yes, it look nicer than <A HREF="https://identity.mageia.org/">https://identity.mageia.org/</A> . I suspect the
+merge didn't went as well as I thought.
+
+I plan to announce it to the unsuspecting world once trunk is fully
+merged in branch/live and then ask people to register to it for sympa
+ml, and tx, and so on, unless someone give a raeson to not do it.
+
+There is several forms to enhance ( so far, i only work on login and
+register one, and I would get ride of captcha on the register one if
+possible ), I followed mainly this guide to refresh my memory
+<A HREF="http://www.lukew.com/resources/articles/WebForms_LukeW.pdf">http://www.lukew.com/resources/articles/WebForms_LukeW.pdf</A> , but not
+everything is done.
+
+For example, the register page could be more usable if the title was not
+so huge ( IMHO ) ( and getting ride of the captcha would also help, it
+depend on what we want to prevent, a simple mathematical question would
+be better ).
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001537.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001540.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1539">[ date ]</a>
+ <a href="thread.html#1539">[ thread ]</a>
+ <a href="subject.html#1539">[ subject ]</a>
+ <a href="author.html#1539">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001540.html b/zarb-ml/mageia-sysadm/2011-January/001540.html
new file mode 100644
index 000000000..6fcc76a13
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001540.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110105231624.DF20C419A4%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001539.html">
+ <LINK REL="Next" HREF="001541.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm</H1>
+ <B>Emi the upload bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110105231624.DF20C419A4%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:16:24 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001539.html">[Mageia-sysadm] Catdap trunk instance, and update
+</A></li>
+ <LI>Next message: <A HREF="001541.html">[Mageia-sysadm] [660] - add another missing rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1540">[ date ]</a>
+ <a href="thread.html#1540">[ thread ]</a>
+ <a href="subject.html#1540">[ subject ]</a>
+ <a href="author.html#1540">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>The upload of the following packages failed:
+- @156:repsys-1.9.2-1mdv2010.1.src.rpm
+
+Upload log available in <A HREF="http://pkgsubmit.mageia.org/uploads/rejected//cauldron/main/release/20110105231312.pterjan.valstar.8237.youri">http://pkgsubmit.mageia.org/uploads/rejected//cauldron/main/release/20110105231312.pterjan.valstar.8237.youri</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001539.html">[Mageia-sysadm] Catdap trunk instance, and update
+</A></li>
+ <LI>Next message: <A HREF="001541.html">[Mageia-sysadm] [660] - add another missing rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1540">[ date ]</a>
+ <a href="thread.html#1540">[ thread ]</a>
+ <a href="subject.html#1540">[ subject ]</a>
+ <a href="author.html#1540">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001541.html b/zarb-ml/mageia-sysadm/2011-January/001541.html
new file mode 100644
index 000000000..13b2e2eeb
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001541.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [660] - add another missing rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B660%5D%20-%20add%20another%20missing%20rpm&In-Reply-To=%3C20110105233235.15191419A7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001540.html">
+ <LINK REL="Next" HREF="001542.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [660] - add another missing rpm</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B660%5D%20-%20add%20another%20missing%20rpm&In-Reply-To=%3C20110105233235.15191419A7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [660] - add another missing rpm">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:32:35 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001540.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001542.html">[Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1541">[ date ]</a>
+ <a href="thread.html#1541">[ thread ]</a>
+ <a href="subject.html#1541">[ subject ]</a>
+ <a href="author.html#1541">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 660
+Author: misc
+Date: 2011-01-06 00:32:34 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- add another missing rpm
+
+Modified Paths:
+--------------
+ puppet/modules/catdap/manifests/init.pp
+
+Modified: puppet/modules/catdap/manifests/init.pp
+===================================================================
+--- puppet/modules/catdap/manifests/init.pp 2011-01-05 19:40:18 UTC (rev 659)
++++ puppet/modules/catdap/manifests/init.pp 2011-01-05 23:32:34 UTC (rev 660)
+@@ -9,7 +9,7 @@
+ &quot;perl-Catalyst-P-S-State-Cookie&quot;, &quot;perl-Catalyst-P-S-Store-File&quot;, &quot;perl-Catalyst-View-Email&quot;,
+ &quot;perl-Catalyst-View-TT&quot;, &quot;perl-Config-General&quot;, &quot;perl-Crypt-CBC&quot;, &quot;perl-Data-UUID&quot;,
+ &quot;perl-Email-Valid&quot;, &quot;perl-Moose&quot;, &quot;perl-namespace-autoclean&quot;, &quot;perl-Test-Simple&quot;,
+-&quot;perl-Crypt-Blowfish&quot;, &quot;perl-Email-Date-Format&quot;, &quot;perl-YAML-LibYAML&quot;,&quot;perl-Catalyst-Plugin-Unicode-Encoding&quot;,
++&quot;perl-Crypt-Blowfish&quot;, &quot;perl-Email-Date-Format&quot;, &quot;perl-YAML-LibYAML&quot;,&quot;perl-Catalyst-Plugin-Unicode-Encoding&quot;, &quot;perl-IO-Socket-INET6&quot;,
+ ]
+
+ package { $rpm_requirement:
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/ba9861a3/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001540.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001542.html">[Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1541">[ date ]</a>
+ <a href="thread.html#1541">[ thread ]</a>
+ <a href="subject.html#1541">[ subject ]</a>
+ <a href="author.html#1541">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001542.html b/zarb-ml/mageia-sysadm/2011-January/001542.html
new file mode 100644
index 000000000..d2ae78831
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001542.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B661%5D%20Disable%20svn%20check%20as%20people%20do%20not%20upload%0A%20manually%2C%20and%20reduce%20release%20check%20so%20that%20mga1.0%20is%20valid&In-Reply-To=%3C20110105233321.292A4419A7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001541.html">
+ <LINK REL="Next" HREF="001543.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B661%5D%20Disable%20svn%20check%20as%20people%20do%20not%20upload%0A%20manually%2C%20and%20reduce%20release%20check%20so%20that%20mga1.0%20is%20valid&In-Reply-To=%3C20110105233321.292A4419A7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:33:21 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001541.html">[Mageia-sysadm] [660] - add another missing rpm
+</A></li>
+ <LI>Next message: <A HREF="001543.html">[Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1542">[ date ]</a>
+ <a href="thread.html#1542">[ thread ]</a>
+ <a href="subject.html#1542">[ subject ]</a>
+ <a href="author.html#1542">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 661
+Author: pterjan
+Date: 2011-01-06 00:33:20 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/submit-todo.conf
+
+Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-05 23:32:34 UTC (rev 660)
++++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-05 23:33:20 UTC (rev 661)
+@@ -21,7 +21,7 @@
+ checks:
+ - source
+ - version
+- - svn
++ #- svn
+ - tag
+ - acl
+ - host
+@@ -38,7 +38,7 @@
+ checks:
+ - source
+ - version
+- - svn
++ #- svn
+ - tag
+ - acl
+ - host
+@@ -57,7 +57,7 @@
+ class: Youri::Submit::Check::Tag
+ options:
+ tags:
+- release: '(mnb\d+|mga..\..)$'
++ release: '(mnb|mga)\d+'
+ packager: '&lt;\<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">S+ at mageia</A>\.org&gt;$'
+ distribution: '^Mageia'
+ vendor: '^Mageia.Org$'
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/ea3275d9/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001541.html">[Mageia-sysadm] [660] - add another missing rpm
+</A></li>
+ <LI>Next message: <A HREF="001543.html">[Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1542">[ date ]</a>
+ <a href="thread.html#1542">[ thread ]</a>
+ <a href="subject.html#1542">[ subject ]</a>
+ <a href="author.html#1542">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001543.html b/zarb-ml/mageia-sysadm/2011-January/001543.html
new file mode 100644
index 000000000..7b8dae643
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001543.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B662%5D%20Force%20distribution%20and%20vendor%20at%20repsys%20level%0A%20as%20current%20system%20is%20a%20Mandriva&In-Reply-To=%3C20110105233824.EAC58419A7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001542.html">
+ <LINK REL="Next" HREF="001544.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B662%5D%20Force%20distribution%20and%20vendor%20at%20repsys%20level%0A%20as%20current%20system%20is%20a%20Mandriva&In-Reply-To=%3C20110105233824.EAC58419A7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:38:24 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001542.html">[Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid
+</A></li>
+ <LI>Next message: <A HREF="001544.html">[Mageia-sysadm] [663] - do not hardcode domain for packager regexp
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1543">[ date ]</a>
+ <a href="thread.html#1543">[ thread ]</a>
+ <a href="subject.html#1543">[ subject ]</a>
+ <a href="author.html#1543">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 662
+Author: pterjan
+Date: 2011-01-06 00:38:24 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+Force distribution and vendor at repsys level as current system is a Mandriva
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/repsys.conf
+
+Modified: puppet/modules/buildsystem/templates/repsys.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/repsys.conf 2011-01-05 23:33:20 UTC (rev 661)
++++ puppet/modules/buildsystem/templates/repsys.conf 2011-01-05 23:38:24 UTC (rev 662)
+@@ -46,6 +46,8 @@
+ distsuffix = mga
+ # mkrel definition to be removed when rpm-setup is updated on main build node
+ mkrel(c:) = %{-c: 0.%{-c*}.}%{1}%{?subrel:.%subrel}%{?distsuffix:%distsuffix}%{?!distsuffix:mga}%{?distro_release:%distro_release}
++distribution = Mageia
++vendor = Mageia.Org
+
+ [macros cauldron]
+ distro_release = 1.0
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/c7a7af99/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001542.html">[Mageia-sysadm] [661] Disable svn check as people do not upload manually, and reduce release check so that mga1.0 is valid
+</A></li>
+ <LI>Next message: <A HREF="001544.html">[Mageia-sysadm] [663] - do not hardcode domain for packager regexp
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1543">[ date ]</a>
+ <a href="thread.html#1543">[ thread ]</a>
+ <a href="subject.html#1543">[ subject ]</a>
+ <a href="author.html#1543">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001544.html b/zarb-ml/mageia-sysadm/2011-January/001544.html
new file mode 100644
index 000000000..6d5f20895
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001544.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [663] - do not hardcode domain for packager regexp
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B663%5D%20-%20do%20not%20hardcode%20domain%20for%20packager%20regexp&In-Reply-To=%3C20110105233933.DAF08419A7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001543.html">
+ <LINK REL="Next" HREF="001545.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [663] - do not hardcode domain for packager regexp</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B663%5D%20-%20do%20not%20hardcode%20domain%20for%20packager%20regexp&In-Reply-To=%3C20110105233933.DAF08419A7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [663] - do not hardcode domain for packager regexp">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:39:33 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001543.html">[Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva
+</A></li>
+ <LI>Next message: <A HREF="001545.html">[Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1544">[ date ]</a>
+ <a href="thread.html#1544">[ thread ]</a>
+ <a href="subject.html#1544">[ subject ]</a>
+ <a href="author.html#1544">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 663
+Author: misc
+Date: 2011-01-06 00:39:33 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- do not hardcode domain for packager regexp
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/submit-todo.conf
+
+Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-05 23:38:24 UTC (rev 662)
++++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-05 23:39:33 UTC (rev 663)
+@@ -1,3 +1,7 @@
++&lt;%
++escaped_domain = domain.gsub('.','\.')
++%&gt;
++
+ home: &lt;%= sched_home_dir %&gt;
+
+ # repository declaration
+@@ -58,7 +62,7 @@
+ options:
+ tags:
+ release: '(mnb|mga)\d+'
+- packager: '&lt;\<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">S+ at mageia</A>\.org&gt;$'
++ packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+ distribution: '^Mageia'
+ vendor: '^Mageia.Org$'
+
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/66c90bf1/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001543.html">[Mageia-sysadm] [662] Force distribution and vendor at repsys level as current system is a Mandriva
+</A></li>
+ <LI>Next message: <A HREF="001545.html">[Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1544">[ date ]</a>
+ <a href="thread.html#1544">[ thread ]</a>
+ <a href="subject.html#1544">[ subject ]</a>
+ <a href="author.html#1544">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001545.html b/zarb-ml/mageia-sysadm/2011-January/001545.html
new file mode 100644
index 000000000..9d7d92ae5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001545.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B664%5D%20-%20do%20not%20check%20for%20mnb%20%28%20as%20this%20correspond%0A%09to%20manbo%2C%20and%20so%20do%20not&In-Reply-To=%3C20110105234217.18D1E419A7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001544.html">
+ <LINK REL="Next" HREF="001546.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B664%5D%20-%20do%20not%20check%20for%20mnb%20%28%20as%20this%20correspond%0A%09to%20manbo%2C%20and%20so%20do%20not&In-Reply-To=%3C20110105234217.18D1E419A7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:42:17 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001544.html">[Mageia-sysadm] [663] - do not hardcode domain for packager regexp
+</A></li>
+ <LI>Next message: <A HREF="001546.html">[Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1545">[ date ]</a>
+ <a href="thread.html#1545">[ thread ]</a>
+ <a href="subject.html#1545">[ subject ]</a>
+ <a href="author.html#1545">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 664
+Author: misc
+Date: 2011-01-06 00:42:16 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- do not check for mnb ( as this correspond to manbo, and so do not
+make sense for us )
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/submit-todo.conf
+
+Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-05 23:39:33 UTC (rev 663)
++++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-05 23:42:16 UTC (rev 664)
+@@ -61,7 +61,7 @@
+ class: Youri::Submit::Check::Tag
+ options:
+ tags:
+- release: '(mnb|mga)\d+'
++ release: 'mga\d+'
+ packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+ distribution: '^Mageia'
+ vendor: '^Mageia.Org$'
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/d3b53c59/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001544.html">[Mageia-sysadm] [663] - do not hardcode domain for packager regexp
+</A></li>
+ <LI>Next message: <A HREF="001546.html">[Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1545">[ date ]</a>
+ <a href="thread.html#1545">[ thread ]</a>
+ <a href="subject.html#1545">[ subject ]</a>
+ <a href="author.html#1545">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001546.html b/zarb-ml/mageia-sysadm/2011-January/001546.html
new file mode 100644
index 000000000..c0ca5d002
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001546.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B665%5D%20-%20really%20add%20donate%20redirect%20on%20alamut%2C%0A%20as%20pointed%20by%20boklm%20and%20alien%20on%20irc&In-Reply-To=%3C20110105235122.012EE419AC%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001545.html">
+ <LINK REL="Next" HREF="001547.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B665%5D%20-%20really%20add%20donate%20redirect%20on%20alamut%2C%0A%20as%20pointed%20by%20boklm%20and%20alien%20on%20irc&In-Reply-To=%3C20110105235122.012EE419AC%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:51:21 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001545.html">[Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not
+</A></li>
+ <LI>Next message: <A HREF="001547.html">[Mageia-sysadm] [666] - add missing vhost
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1546">[ date ]</a>
+ <a href="thread.html#1546">[ thread ]</a>
+ <a href="subject.html#1546">[ subject ]</a>
+ <a href="author.html#1546">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 665
+Author: misc
+Date: 2011-01-06 00:51:21 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- really add donate redirect on alamut, as pointed by boklm and alien on irc
+
+Modified Paths:
+--------------
+ puppet/manifests/nodes.pp
+
+Modified: puppet/manifests/nodes.pp
+===================================================================
+--- puppet/manifests/nodes.pp 2011-01-05 23:42:16 UTC (rev 664)
++++ puppet/manifests/nodes.pp 2011-01-05 23:51:21 UTC (rev 665)
+@@ -49,6 +49,7 @@
+ timezone::timezone { &quot;Europe/Paris&quot;: }
+
+ include catdap
++ include websites::donate
+ include mga-mirrors
+ include epoll
+ include transifex
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/3b866a78/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001545.html">[Mageia-sysadm] [664] - do not check for mnb ( as this correspond to manbo, and so do not
+</A></li>
+ <LI>Next message: <A HREF="001547.html">[Mageia-sysadm] [666] - add missing vhost
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1546">[ date ]</a>
+ <a href="thread.html#1546">[ thread ]</a>
+ <a href="subject.html#1546">[ subject ]</a>
+ <a href="author.html#1546">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001547.html b/zarb-ml/mageia-sysadm/2011-January/001547.html
new file mode 100644
index 000000000..c90d81fda
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001547.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [666] - add missing vhost
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B666%5D%20-%20add%20missing%20vhost&In-Reply-To=%3C20110105235539.647EC419B0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001546.html">
+ <LINK REL="Next" HREF="001549.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [666] - add missing vhost</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B666%5D%20-%20add%20missing%20vhost&In-Reply-To=%3C20110105235539.647EC419B0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [666] - add missing vhost">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 00:55:39 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001546.html">[Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc
+</A></li>
+ <LI>Next message: <A HREF="001549.html">[Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1547">[ date ]</a>
+ <a href="thread.html#1547">[ thread ]</a>
+ <a href="subject.html#1547">[ subject ]</a>
+ <a href="author.html#1547">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 666
+Author: misc
+Date: 2011-01-06 00:55:39 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- add missing vhost
+
+Modified Paths:
+--------------
+ puppet/modules/websites/templates/vhost_donate.conf
+
+Modified: puppet/modules/websites/templates/vhost_donate.conf
+===================================================================
+--- puppet/modules/websites/templates/vhost_donate.conf 2011-01-05 23:51:21 UTC (rev 665)
++++ puppet/modules/websites/templates/vhost_donate.conf 2011-01-05 23:55:39 UTC (rev 666)
+@@ -1,5 +1,6 @@
+ &lt;VirtualHost *:80&gt;
+ ServerName donate.&lt;%= domain %&gt;
++ ServerAlias donation.&lt;%= domain %&gt;
+
+ RewriteEngine on
+ RewriteRule ^/(.*)$ <A HREF="http://www.&lt;%=">http://www.&lt;%=</A> domain %&gt;/$1/donate/ [R=permanent,L]
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/402369da/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001546.html">[Mageia-sysadm] [665] - really add donate redirect on alamut, as pointed by boklm and alien on irc
+</A></li>
+ <LI>Next message: <A HREF="001549.html">[Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1547">[ date ]</a>
+ <a href="thread.html#1547">[ thread ]</a>
+ <a href="subject.html#1547">[ subject ]</a>
+ <a href="author.html#1547">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001548.html b/zarb-ml/mageia-sysadm/2011-January/001548.html
new file mode 100644
index 000000000..236e603cd
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001548.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] ml migration
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20ml%20migration&In-Reply-To=%3C1294271889.29097.69.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001538.html">
+ <LINK REL="Next" HREF="002391.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] ml migration</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20ml%20migration&In-Reply-To=%3C1294271889.29097.69.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] ml migration">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 00:58:09 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001538.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI>Next message: <A HREF="002391.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1548">[ date ]</a>
+ <a href="thread.html#1548">[ thread ]</a>
+ <a href="subject.html#1548">[ subject ]</a>
+ <a href="author.html#1548">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le mercredi 05 janvier 2011 &#224; 23:57 +0100, nicolas vigier a &#233;crit :
+&gt;<i> On Wed, 05 Jan 2011, Michael Scherer wrote:
+</I>&gt;<i>
+</I>&gt;<i> &gt; Hi,
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; since new version of catdap was almost deployed ( I just need to find
+</I>&gt;<i> &gt; why the branch live ( <A HREF="http://identity.mageia.org/">http://identity.mageia.org/</A> ) do not look like the
+</I>&gt;<i> &gt; trunk ( <A HREF="http://identity-trunk.mageia.org/">http://identity-trunk.mageia.org/</A> ), despites them being
+</I>&gt;<i> &gt; merged ), I think we can start pushing mailing lists.
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; SO I plan, before doing this for i18n, do a first run for us.
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; As people complained there is too much noise here, I propose the
+</I>&gt;<i> &gt; following :
+</I>&gt;<i> &gt; <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sysadm-commits at ml.mageia.org</A>, for svn commit for adm repository
+</I>&gt;<i> &gt; <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sysadm-reports at ml.mageia.org</A>, for puppet reports
+</I>&gt;<i>
+</I>&gt;<i> That's a good idea. And an other one for discussions (to replace this
+</I>&gt;<i> one) ?
+</I>
+Yeah, but once we migrate the lists ( ie, once we also migrate the
+archives, and the web site ).
+
+&gt;<i> &gt;
+</I>&gt;<i> &gt; Any other idea ? ( I guess we could add cronjob output somewhere, if we
+</I>&gt;<i> &gt; need, and nagios/hobbit/whatever too )
+</I>&gt;<i>
+</I>&gt;<i> cronjob and monitoring would go to sysadm-reports too ?
+</I>
+That's a possibility.
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001538.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI>Next message: <A HREF="002391.html">[Mageia-sysadm] ml migration
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1548">[ date ]</a>
+ <a href="thread.html#1548">[ thread ]</a>
+ <a href="subject.html#1548">[ subject ]</a>
+ <a href="author.html#1548">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001549.html b/zarb-ml/mageia-sysadm/2011-January/001549.html
new file mode 100644
index 000000000..e06725309
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001549.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B667%5D%20add%20special%20case%20to%20redirect%0A%09http%3A//donate.mageia.org/%20to%20en%20version&In-Reply-To=%3C20110106000531.E01B3419B0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001547.html">
+ <LINK REL="Next" HREF="001550.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B667%5D%20add%20special%20case%20to%20redirect%0A%09http%3A//donate.mageia.org/%20to%20en%20version&In-Reply-To=%3C20110106000531.E01B3419B0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 01:05:31 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001547.html">[Mageia-sysadm] [666] - add missing vhost
+</A></li>
+ <LI>Next message: <A HREF="001550.html">[Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1549">[ date ]</a>
+ <a href="thread.html#1549">[ thread ]</a>
+ <a href="subject.html#1549">[ subject ]</a>
+ <a href="author.html#1549">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 667
+Author: boklm
+Date: 2011-01-06 01:05:31 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+add special case to redirect <A HREF="http://donate.mageia.org/">http://donate.mageia.org/</A> to en version
+
+Modified Paths:
+--------------
+ puppet/modules/websites/templates/vhost_donate.conf
+
+Modified: puppet/modules/websites/templates/vhost_donate.conf
+===================================================================
+--- puppet/modules/websites/templates/vhost_donate.conf 2011-01-05 23:55:39 UTC (rev 666)
++++ puppet/modules/websites/templates/vhost_donate.conf 2011-01-06 00:05:31 UTC (rev 667)
+@@ -3,6 +3,7 @@
+ ServerAlias donation.&lt;%= domain %&gt;
+
+ RewriteEngine on
++ RewriteRule ^/?$ <A HREF="http://www.&lt;%=">http://www.&lt;%=</A> domain %&gt;/en/donate/ [R=permanent,L]
+ RewriteRule ^/(.*)$ <A HREF="http://www.&lt;%=">http://www.&lt;%=</A> domain %&gt;/$1/donate/ [R=permanent,L]
+ #DocumentRoot /dev/null
+ CustomLog /var/log/httpd/donate_log combined
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/7c76f417/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001547.html">[Mageia-sysadm] [666] - add missing vhost
+</A></li>
+ <LI>Next message: <A HREF="001550.html">[Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1549">[ date ]</a>
+ <a href="thread.html#1549">[ thread ]</a>
+ <a href="subject.html#1549">[ subject ]</a>
+ <a href="author.html#1549">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001550.html b/zarb-ml/mageia-sysadm/2011-January/001550.html
new file mode 100644
index 000000000..2ae616308
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001550.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B668%5D%20-%20do%20not%20hardcode%20domain%20name%20%28%20as%20this%0A%20complexify%20deploymement%20on%20a%20separate&In-Reply-To=%3C20110106000630.E0872419B1%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001549.html">
+ <LINK REL="Next" HREF="001551.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B668%5D%20-%20do%20not%20hardcode%20domain%20name%20%28%20as%20this%0A%20complexify%20deploymement%20on%20a%20separate&In-Reply-To=%3C20110106000630.E0872419B1%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 01:06:30 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001549.html">[Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version
+</A></li>
+ <LI>Next message: <A HREF="001551.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1550">[ date ]</a>
+ <a href="thread.html#1550">[ thread ]</a>
+ <a href="subject.html#1550">[ subject ]</a>
+ <a href="author.html#1550">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 668
+Author: misc
+Date: 2011-01-06 01:06:30 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- do not hardcode domain name ( as this complexify deploymement on a separate
+test set of server )
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/iurt.cauldron.conf
+ puppet/modules/buildsystem/templates/iurt.mandriva2010.1.conf
+ puppet/modules/buildsystem/templates/upload.conf
+
+Modified: puppet/modules/buildsystem/templates/iurt.cauldron.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/iurt.cauldron.conf 2011-01-06 00:05:31 UTC (rev 667)
++++ puppet/modules/buildsystem/templates/iurt.cauldron.conf 2011-01-06 00:06:30 UTC (rev 668)
+@@ -4,9 +4,9 @@
+ upload =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:~/uploads/',
+ upload_queue =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:~/uploads/queue/',
+ unwanted_packages =&gt; '^monotone-',
+- repository =&gt; '<A HREF="http://repository.mageia.org/distrib/">http://repository.mageia.org/distrib/</A>',
++ repository =&gt; '<A HREF="http://repository.&lt;%=">http://repository.&lt;%=</A> domain %&gt;/distrib/',
+ rsync_to =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:/mnt/BIG/dis/uploads/build/',
+- log_url =&gt; '<A HREF="http://pkgsubmit.mageia.org/queue/build/">http://pkgsubmit.mageia.org/queue/build/</A>',
++ log_url =&gt; '<A HREF="http://pkgsubmit.&lt;%=">http://pkgsubmit.&lt;%=</A> domain %&gt;/queue/build/',
+ admin =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>',
+ packager =&gt; 'Iurt the rebuild bot &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>&gt;',
+ sendmail =&gt; 0,
+
+Modified: puppet/modules/buildsystem/templates/iurt.mandriva2010.1.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/iurt.mandriva2010.1.conf 2011-01-06 00:05:31 UTC (rev 667)
++++ puppet/modules/buildsystem/templates/iurt.mandriva2010.1.conf 2011-01-06 00:06:30 UTC (rev 668)
+@@ -4,9 +4,9 @@
+ upload =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:~/uploads/',
+ upload_queue =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:~/uploads/queue/',
+ unwanted_packages =&gt; '^monotone-',
+- repository =&gt; '<A HREF="http://repository.mageia.org/mandriva/">http://repository.mageia.org/mandriva/</A>',
++ repository =&gt; '<A HREF="http://repository.&lt;%=">http://repository.&lt;%=</A> domain %&gt;/mandriva/',
+ rsync_to =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:/mnt/BIG/dis/uploads/build/',
+- log_url =&gt; '<A HREF="http://pkgsubmit.mageia.org/queue/build/">http://pkgsubmit.mageia.org/queue/build/</A>',
++ log_url =&gt; '<A HREF="http://pkgsubmit.&lt;%=">http://pkgsubmit.&lt;%=</A> domain %&gt;/queue/build/',
+ admin =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>',
+ packager =&gt; 'Iurt the rebuild bot &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>&gt;',
+ sendmail =&gt; 0,
+
+Modified: puppet/modules/buildsystem/templates/upload.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/upload.conf 2011-01-06 00:05:31 UTC (rev 667)
++++ puppet/modules/buildsystem/templates/upload.conf 2011-01-06 00:06:30 UTC (rev 668)
+@@ -11,7 +11,7 @@
+ i586 =&gt; [ qw(ecosse) ],
+ x86_64 =&gt; [ qw(jonund) ],
+ );
+-my $repository = &quot;<A HREF="http://repository.mageia.org/distrib/">http://repository.mageia.org/distrib/</A>&quot;;
++my $repository = &quot;<A HREF="http://repository.&lt;%=">http://repository.&lt;%=</A> domain %&gt;/distrib/&quot;;
+ my $homedir = &quot;/home/iurt&quot;;
+
+ {
+@@ -52,6 +52,6 @@
+ },
+ },
+ admin =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>',
+- http_queue =&gt; '<A HREF="http://pkgsubmit.mageia.org/uploads">http://pkgsubmit.mageia.org/uploads</A>',
++ http_queue =&gt; '<A HREF="http://pkgsubmit.&lt;%=">http://pkgsubmit.&lt;%=</A> domain %&gt;/uploads',
+ upload_user =&gt; 'schedbot',
+ }
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/6c7a8f43/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001549.html">[Mageia-sysadm] [667] add special case to redirect http://donate.mageia.org/ to en version
+</A></li>
+ <LI>Next message: <A HREF="001551.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1550">[ date ]</a>
+ <a href="thread.html#1550">[ thread ]</a>
+ <a href="subject.html#1550">[ subject ]</a>
+ <a href="author.html#1550">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001551.html b/zarb-ml/mageia-sysadm/2011-January/001551.html
new file mode 100644
index 000000000..7423255d9
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001551.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106003020.5F8F9419B6%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001550.html">
+ <LINK REL="Next" HREF="001552.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106003020.5F8F9419B6%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 01:30:20 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001550.html">[Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate
+</A></li>
+ <LI>Next message: <A HREF="001552.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1551">[ date ]</a>
+ <a href="thread.html#1551">[ thread ]</a>
+ <a href="subject.html#1551">[ subject ]</a>
+ <a href="author.html#1551">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106002952.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106002952.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106002952.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106002952.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106002952.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106002952.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001550.html">[Mageia-sysadm] [668] - do not hardcode domain name ( as this complexify deploymement on a separate
+</A></li>
+ <LI>Next message: <A HREF="001552.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1551">[ date ]</a>
+ <a href="thread.html#1551">[ thread ]</a>
+ <a href="subject.html#1551">[ subject ]</a>
+ <a href="author.html#1551">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001552.html b/zarb-ml/mageia-sysadm/2011-January/001552.html
new file mode 100644
index 000000000..8c1a82f5a
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001552.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106003020.BB4CD419B6%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001551.html">
+ <LINK REL="Next" HREF="001553.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106003020.BB4CD419B6%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 01:30:20 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001551.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001553.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1552">[ date ]</a>
+ <a href="thread.html#1552">[ thread ]</a>
+ <a href="subject.html#1552">[ subject ]</a>
+ <a href="author.html#1552">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106002953.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106002953.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106002952.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106002952.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106002952.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106002952.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106002952.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106002952.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106002953.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106002953.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106002953.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/main/release/20110106002919.pterjan.valstar.18440/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106002953.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001551.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001553.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1552">[ date ]</a>
+ <a href="thread.html#1552">[ thread ]</a>
+ <a href="subject.html#1552">[ subject ]</a>
+ <a href="author.html#1552">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001553.html b/zarb-ml/mageia-sysadm/2011-January/001553.html
new file mode 100644
index 000000000..4fa3fd18d
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001553.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110106003108.32E5E419B6%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001552.html">
+ <LINK REL="Next" HREF="001554.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm</H1>
+ <B>Emi the upload bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110106003108.32E5E419B6%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 01:31:08 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001552.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001554.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1553">[ date ]</a>
+ <a href="thread.html#1553">[ thread ]</a>
+ <a href="subject.html#1553">[ subject ]</a>
+ <a href="author.html#1553">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>The upload of the following packages failed:
+- @156:repsys-1.9.2-1mdv2010.1.src.rpm
+
+Upload log available in <A HREF="http://pkgsubmit.mageia.org/uploads/rejected//cauldron/main/release/20110106002943.pterjan.valstar.18747.youri">http://pkgsubmit.mageia.org/uploads/rejected//cauldron/main/release/20110106002943.pterjan.valstar.18747.youri</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001552.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001554.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1553">[ date ]</a>
+ <a href="thread.html#1553">[ thread ]</a>
+ <a href="subject.html#1553">[ subject ]</a>
+ <a href="author.html#1553">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001554.html b/zarb-ml/mageia-sysadm/2011-January/001554.html
new file mode 100644
index 000000000..2ac7bd68e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001554.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B214%5D%20Have%20consistent%20spelling%20for%20vendor%20name%2C%0A%09else%20packages%20get%20rejected&In-Reply-To=%3C20110106004019.5F591419B6%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001553.html">
+ <LINK REL="Next" HREF="001555.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B214%5D%20Have%20consistent%20spelling%20for%20vendor%20name%2C%0A%09else%20packages%20get%20rejected&In-Reply-To=%3C20110106004019.5F591419B6%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 01:40:19 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001553.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001555.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1554">[ date ]</a>
+ <a href="thread.html#1554">[ thread ]</a>
+ <a href="subject.html#1554">[ subject ]</a>
+ <a href="author.html#1554">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 214
+Author: pterjan
+Date: 2011-01-06 01:40:19 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+Have consistent spelling for vendor name, else packages get rejected
+
+Modified Paths:
+--------------
+ build_system/iurt/trunk/iurt2
+
+Modified: build_system/iurt/trunk/iurt2
+===================================================================
+--- build_system/iurt/trunk/iurt2 2011-01-05 20:13:05 UTC (rev 213)
++++ build_system/iurt/trunk/iurt2 2011-01-06 00:40:19 UTC (rev 214)
+@@ -536,7 +536,7 @@
+ },
+ vendor =&gt; {
+ desc =&gt; 'Name of the packages vendor',
+- default =&gt; 'Mageia.org'
++ default =&gt; 'Mageia.Org'
+ },
+ additional_media =&gt; {
+ desc =&gt; 'Additional medias to be used',
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/338b4b97/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001553.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001555.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1554">[ date ]</a>
+ <a href="thread.html#1554">[ thread ]</a>
+ <a href="subject.html#1554">[ subject ]</a>
+ <a href="author.html#1554">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001555.html b/zarb-ml/mageia-sysadm/2011-January/001555.html
new file mode 100644
index 000000000..f2c384669
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001555.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B214%5D%20Have%20consistent%20spelling%20for%20vendor%20name%2C%0A%20else%20packages%20get%20rejected&In-Reply-To=%3C1294274665.11792.1.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001554.html">
+ <LINK REL="Next" HREF="001556.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B214%5D%20Have%20consistent%20spelling%20for%20vendor%20name%2C%0A%20else%20packages%20get%20rejected&In-Reply-To=%3C1294274665.11792.1.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 01:44:25 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001554.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI>Next message: <A HREF="001556.html">[Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1555">[ date ]</a>
+ <a href="thread.html#1555">[ thread ]</a>
+ <a href="subject.html#1555">[ subject ]</a>
+ <a href="author.html#1555">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le jeudi 06 janvier 2011 &#224; 01:40 +0100, <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">root at mageia.org</A> a &#233;crit :
+&gt;<i> Revision: 214
+</I>&gt;<i> Author: pterjan
+</I>&gt;<i> Date: 2011-01-06 01:40:19 +0100 (Thu, 06 Jan 2011)
+</I>&gt;<i> Log Message:
+</I>&gt;<i> -----------
+</I>&gt;<i> Have consistent spelling for vendor name, else packages get rejected
+</I>
+I think it would make sense to have the vendor in only one location, if
+possible.
+
+Could it be auto extracted from rpm-$distro-setup ?
+( or at least, fixed in one place in puppet ? )
+
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001554.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI>Next message: <A HREF="001556.html">[Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1555">[ date ]</a>
+ <a href="thread.html#1555">[ thread ]</a>
+ <a href="subject.html#1555">[ subject ]</a>
+ <a href="author.html#1555">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001556.html b/zarb-ml/mageia-sysadm/2011-January/001556.html
new file mode 100644
index 000000000..861fbbe35
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001556.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B215%5D%20search%20in%20core%2C%20nonfree%2C%0A%09tainted%20instead%20of%20main%2C%20contrib&In-Reply-To=%3C20110106010756.4746E419BB%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001555.html">
+ <LINK REL="Next" HREF="001557.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B215%5D%20search%20in%20core%2C%20nonfree%2C%0A%09tainted%20instead%20of%20main%2C%20contrib&In-Reply-To=%3C20110106010756.4746E419BB%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:07:56 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001555.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI>Next message: <A HREF="001557.html">[Mageia-sysadm] [216] default section is now core
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1556">[ date ]</a>
+ <a href="thread.html#1556">[ thread ]</a>
+ <a href="subject.html#1556">[ subject ]</a>
+ <a href="author.html#1556">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 215
+Author: boklm
+Date: 2011-01-06 02:07:55 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+search in core, nonfree, tainted instead of main, contrib
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+
+Modified: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-06 00:40:19 UTC (rev 214)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-06 01:07:55 UTC (rev 215)
+@@ -25,6 +25,8 @@
+
+ memoize('_get_section');
+
++my @pkgsections = qw/core nonfree tainted/;
++
+ sub _init {
+ my $self = shift;
+ my %options = (
+@@ -86,7 +88,7 @@
+ $arch .= '/media'
+ }
+ my @packages;
+- foreach my $dir ('main', 'contrib') {
++ foreach my $dir (@pkgsections) {
+ print &quot;Looking into $self-&gt;{_install_root}/$target/$arch/$dir/release\n&quot;;
+ push @packages,
+ map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
+@@ -227,7 +229,7 @@
+ # for each potential section, try to match
+ # a suitable source patten in source directory
+ # a suitable binary patten in binary directory
+- foreach my $dir (qw/main contrib/) {
++ foreach my $dir (@pkgsections) {
+ next unless
+ $self-&gt;get_files(
+ $self-&gt;{_install_root},
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/b62e0b5d/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001555.html">[Mageia-sysadm] [214] Have consistent spelling for vendor name, else packages get rejected
+</A></li>
+ <LI>Next message: <A HREF="001557.html">[Mageia-sysadm] [216] default section is now core
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1556">[ date ]</a>
+ <a href="thread.html#1556">[ thread ]</a>
+ <a href="subject.html#1556">[ subject ]</a>
+ <a href="author.html#1556">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001557.html b/zarb-ml/mageia-sysadm/2011-January/001557.html
new file mode 100644
index 000000000..740209a26
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001557.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [216] default section is now core
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B216%5D%20default%20section%20is%20now%20core&In-Reply-To=%3C20110106010818.C9B85419BB%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001556.html">
+ <LINK REL="Next" HREF="001558.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [216] default section is now core</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B216%5D%20default%20section%20is%20now%20core&In-Reply-To=%3C20110106010818.C9B85419BB%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [216] default section is now core">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:08:18 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001556.html">[Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib
+</A></li>
+ <LI>Next message: <A HREF="001558.html">[Mageia-sysadm] [669] - rename base class, more consistent
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1557">[ date ]</a>
+ <a href="thread.html#1557">[ thread ]</a>
+ <a href="subject.html#1557">[ subject ]</a>
+ <a href="author.html#1557">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 216
+Author: boklm
+Date: 2011-01-06 02:08:18 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+default section is now core
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+
+Modified: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-06 01:07:55 UTC (rev 215)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-06 01:08:18 UTC (rev 216)
+@@ -248,7 +248,7 @@
+ # use defined section if not found
+ $section = $define-&gt;{section} unless $section;
+
+- $section || 'contrib'
++ $section || 'core'
+ }
+
+ sub get_upload_newer_revisions {
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/3e9e5496/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001556.html">[Mageia-sysadm] [215] search in core, nonfree, tainted instead of main, contrib
+</A></li>
+ <LI>Next message: <A HREF="001558.html">[Mageia-sysadm] [669] - rename base class, more consistent
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1557">[ date ]</a>
+ <a href="thread.html#1557">[ thread ]</a>
+ <a href="subject.html#1557">[ subject ]</a>
+ <a href="author.html#1557">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001558.html b/zarb-ml/mageia-sysadm/2011-January/001558.html
new file mode 100644
index 000000000..a956bb51c
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001558.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [669] - rename base class, more consistent
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B669%5D%20-%20rename%20base%20class%2C%20more%20consistent&In-Reply-To=%3C20110106013342.21937419C0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001557.html">
+ <LINK REL="Next" HREF="001559.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [669] - rename base class, more consistent</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B669%5D%20-%20rename%20base%20class%2C%20more%20consistent&In-Reply-To=%3C20110106013342.21937419C0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [669] - rename base class, more consistent">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:33:42 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001557.html">[Mageia-sysadm] [216] default section is now core
+</A></li>
+ <LI>Next message: <A HREF="001559.html">[Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1558">[ date ]</a>
+ <a href="thread.html#1558">[ thread ]</a>
+ <a href="subject.html#1558">[ subject ]</a>
+ <a href="author.html#1558">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 669
+Author: misc
+Date: 2011-01-06 02:33:41 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- rename base class, more consistent
+
+Modified Paths:
+--------------
+ puppet/modules/openldap/manifests/init.pp
+
+Modified: puppet/modules/openldap/manifests/init.pp
+===================================================================
+--- puppet/modules/openldap/manifests/init.pp 2011-01-06 00:06:30 UTC (rev 668)
++++ puppet/modules/openldap/manifests/init.pp 2011-01-06 01:33:41 UTC (rev 669)
+@@ -1,5 +1,5 @@
+ class openldap {
+- class base {
++ class common {
+ package { 'openldap-servers':
+ ensure =&gt; installed
+ }
+@@ -55,7 +55,7 @@
+ notify =&gt; [Service['ldap']]
+ }
+
+- class master inherits base {
++ class master inherits common {
+ file { '/etc/openldap/mandriva-dit-access.conf':
+ content =&gt; template(&quot;openldap/mandriva-dit-access.conf&quot;),
+ }
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/7be4060a/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001557.html">[Mageia-sysadm] [216] default section is now core
+</A></li>
+ <LI>Next message: <A HREF="001559.html">[Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1558">[ date ]</a>
+ <a href="thread.html#1558">[ thread ]</a>
+ <a href="subject.html#1558">[ subject ]</a>
+ <a href="author.html#1558">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001559.html b/zarb-ml/mageia-sysadm/2011-January/001559.html
new file mode 100644
index 000000000..f2dcbfb6e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001559.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B670%5D%20-%20use%20root%20instead%20of%20reports%40%2C%0A%09for%20migration%20to%20a%20ml&In-Reply-To=%3C20110106013345.295D3419C0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001558.html">
+ <LINK REL="Next" HREF="001560.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B670%5D%20-%20use%20root%20instead%20of%20reports%40%2C%0A%09for%20migration%20to%20a%20ml&In-Reply-To=%3C20110106013345.295D3419C0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:33:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001558.html">[Mageia-sysadm] [669] - rename base class, more consistent
+</A></li>
+ <LI>Next message: <A HREF="001560.html">[Mageia-sysadm] [671] - remove test list
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1559">[ date ]</a>
+ <a href="thread.html#1559">[ thread ]</a>
+ <a href="subject.html#1559">[ subject ]</a>
+ <a href="author.html#1559">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 670
+Author: misc
+Date: 2011-01-06 02:33:44 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- use root instead of reports@, for migration to a ml
+
+Modified Paths:
+--------------
+ puppet/modules/puppet/templates/puppet.conf
+
+Modified: puppet/modules/puppet/templates/puppet.conf
+===================================================================
+--- puppet/modules/puppet/templates/puppet.conf 2011-01-06 01:33:41 UTC (rev 669)
++++ puppet/modules/puppet/templates/puppet.conf 2011-01-06 01:33:44 UTC (rev 670)
+@@ -33,7 +33,8 @@
+ splay = true
+
+ report = true
+-
++ reportfrom = root@&lt;%= domain %&gt;
++
+ # The file in which puppetd stores a list of the classes
+ # associated with the retrieved configuratiion. Can be loaded in
+ # the separate ``puppet`` executable using the ``--loadclasses``
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/468c3a87/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001558.html">[Mageia-sysadm] [669] - rename base class, more consistent
+</A></li>
+ <LI>Next message: <A HREF="001560.html">[Mageia-sysadm] [671] - remove test list
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1559">[ date ]</a>
+ <a href="thread.html#1559">[ thread ]</a>
+ <a href="subject.html#1559">[ subject ]</a>
+ <a href="author.html#1559">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001560.html b/zarb-ml/mageia-sysadm/2011-January/001560.html
new file mode 100644
index 000000000..ddf1b33eb
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001560.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [671] - remove test list
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B671%5D%20-%20remove%20test%20list&In-Reply-To=%3C20110106013350.1324D419C0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001559.html">
+ <LINK REL="Next" HREF="001561.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [671] - remove test list</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B671%5D%20-%20remove%20test%20list&In-Reply-To=%3C20110106013350.1324D419C0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [671] - remove test list">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:33:50 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001559.html">[Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml
+</A></li>
+ <LI>Next message: <A HREF="001561.html">[Mageia-sysadm] [672] - update the topics list
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1560">[ date ]</a>
+ <a href="thread.html#1560">[ thread ]</a>
+ <a href="subject.html#1560">[ subject ]</a>
+ <a href="author.html#1560">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 671
+Author: misc
+Date: 2011-01-06 02:33:49 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- remove test list
+
+Modified Paths:
+--------------
+ puppet/manifests/nodes.pp
+
+Modified: puppet/manifests/nodes.pp
+===================================================================
+--- puppet/manifests/nodes.pp 2011-01-06 01:33:44 UTC (rev 670)
++++ puppet/manifests/nodes.pp 2011-01-06 01:33:49 UTC (rev 671)
+@@ -58,11 +58,6 @@
+ include postfix::primary_smtp
+
+
+- sympa::list {&quot;test_sympa&quot;:
+- subject =&gt; &quot;Just a test, will be erased later&quot;,
+- profile =&gt; &quot;discussion_list&quot;,
+- language =&gt; 'en',
+- }
+ }
+
+ # buildnode
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/d7cf8c1f/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001559.html">[Mageia-sysadm] [670] - use root instead of reports@, for migration to a ml
+</A></li>
+ <LI>Next message: <A HREF="001561.html">[Mageia-sysadm] [672] - update the topics list
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1560">[ date ]</a>
+ <a href="thread.html#1560">[ thread ]</a>
+ <a href="subject.html#1560">[ subject ]</a>
+ <a href="author.html#1560">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001561.html b/zarb-ml/mageia-sysadm/2011-January/001561.html
new file mode 100644
index 000000000..9db83fd92
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001561.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [672] - update the topics list
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B672%5D%20-%20update%20the%20topics%20list&In-Reply-To=%3C20110106013352.58698419C0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001560.html">
+ <LINK REL="Next" HREF="001562.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [672] - update the topics list</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B672%5D%20-%20update%20the%20topics%20list&In-Reply-To=%3C20110106013352.58698419C0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [672] - update the topics list">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:33:52 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001560.html">[Mageia-sysadm] [671] - remove test list
+</A></li>
+ <LI>Next message: <A HREF="001562.html">[Mageia-sysadm] [673] - create the initial set of i18n lists
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1561">[ date ]</a>
+ <a href="thread.html#1561">[ thread ]</a>
+ <a href="subject.html#1561">[ subject ]</a>
+ <a href="author.html#1561">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 672
+Author: misc
+Date: 2011-01-06 02:33:52 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- update the topics list
+
+Modified Paths:
+--------------
+ puppet/modules/sympa/files/topics.conf
+
+Modified: puppet/modules/sympa/files/topics.conf
+===================================================================
+--- puppet/modules/sympa/files/topics.conf 2011-01-06 01:33:49 UTC (rev 671)
++++ puppet/modules/sympa/files/topics.conf 2011-01-06 01:33:52 UTC (rev 672)
+@@ -1,3 +1,5 @@
+-test
+-title Test lists
+-title.fr Listes de test
++sysadm
++title System administration, infrastructure
++
++i18n
++title Internationalization and translation
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/b4e0aa87/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001560.html">[Mageia-sysadm] [671] - remove test list
+</A></li>
+ <LI>Next message: <A HREF="001562.html">[Mageia-sysadm] [673] - create the initial set of i18n lists
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1561">[ date ]</a>
+ <a href="thread.html#1561">[ thread ]</a>
+ <a href="subject.html#1561">[ subject ]</a>
+ <a href="author.html#1561">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001562.html b/zarb-ml/mageia-sysadm/2011-January/001562.html
new file mode 100644
index 000000000..88c6daa00
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001562.html
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [673] - create the initial set of i18n lists
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B673%5D%20-%20create%20the%20initial%20set%20of%20i18n%20lists&In-Reply-To=%3C20110106013354.C4875419C0%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001561.html">
+ <LINK REL="Next" HREF="001608.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [673] - create the initial set of i18n lists</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B673%5D%20-%20create%20the%20initial%20set%20of%20i18n%20lists&In-Reply-To=%3C20110106013354.C4875419C0%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [673] - create the initial set of i18n lists">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 02:33:54 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001561.html">[Mageia-sysadm] [672] - update the topics list
+</A></li>
+ <LI>Next message: <A HREF="001608.html">[Mageia-sysadm] [673] - create the initial set of i18n lists
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1562">[ date ]</a>
+ <a href="thread.html#1562">[ thread ]</a>
+ <a href="subject.html#1562">[ subject ]</a>
+ <a href="author.html#1562">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 673
+Author: misc
+Date: 2011-01-06 02:33:54 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- create the initial set of i18n lists
+
+Modified Paths:
+--------------
+ puppet/manifests/nodes.pp
+
+Modified: puppet/manifests/nodes.pp
+===================================================================
+--- puppet/manifests/nodes.pp 2011-01-06 01:33:52 UTC (rev 672)
++++ puppet/manifests/nodes.pp 2011-01-06 01:33:54 UTC (rev 673)
+@@ -56,8 +56,54 @@
+ include bugzilla
+ include sympa::server
+ include postfix::primary_smtp
+-
++
++ # please check that the list use the proper code for
++ # language ( not to be confused with tld or country code )
++ sympa::public_list {&quot;i18n-af&quot;:
++ subject =&gt; &quot;List about translation in Afrikaans&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
+
++ sympa::public_list {&quot;i18n-de&quot;:
++ subject =&gt; &quot;List about translation in German&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-et&quot;:
++ subject =&gt; &quot;List about translation in Estonian&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-fr&quot;:
++ subject =&gt; &quot;List about translation in French&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-nl&quot;:
++ subject =&gt; &quot;List about translation in Dutch&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-pt_br&quot;:
++ subject =&gt; &quot;List about translation in Brazilian Portuguese&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-pl&quot;:
++ subject =&gt; &quot;List about translation in Polish&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-ru&quot;:
++ subject =&gt; &quot;List about translation in Russian&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
++ sympa::public_list {&quot;i18n-tr&quot;:
++ subject =&gt; &quot;List about translation in Turkish&quot;,
++ topics =&gt; &quot;i18n&quot;,
++ }
++
+ }
+
+ # buildnode
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/2333b706/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001561.html">[Mageia-sysadm] [672] - update the topics list
+</A></li>
+ <LI>Next message: <A HREF="001608.html">[Mageia-sysadm] [673] - create the initial set of i18n lists
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1562">[ date ]</a>
+ <a href="thread.html#1562">[ thread ]</a>
+ <a href="subject.html#1562">[ subject ]</a>
+ <a href="author.html#1562">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001563.html b/zarb-ml/mageia-sysadm/2011-January/001563.html
new file mode 100644
index 000000000..6d02d0095
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001563.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Request of mailing lists for i18n language teams
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Request%20of%20mailing%20lists%20for%20i18n%20language%20teams&In-Reply-To=%3C1294278422.11792.7.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001628.html">
+ <LINK REL="Next" HREF="001564.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Request of mailing lists for i18n language teams</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Request%20of%20mailing%20lists%20for%20i18n%20language%20teams&In-Reply-To=%3C1294278422.11792.7.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] Request of mailing lists for i18n language teams">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 02:47:02 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001628.html">[Mageia-sysadm] [673] - create the initial set of i18n lists
+</A></li>
+ <LI>Next message: <A HREF="001564.html">[Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1563">[ date ]</a>
+ <a href="thread.html#1563">[ thread ]</a>
+ <a href="subject.html#1563">[ subject ]</a>
+ <a href="author.html#1563">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le jeudi 23 d&#233;cembre 2010 &#224; 11:10 +0100, Wolfgang Bornath a &#233;crit :
+&gt;<i> Hi,
+</I>&gt;<i>
+</I>&gt;<i> here are the requests of the language teams for mailing lists to be created:
+</I>&gt;<i>
+</I>&gt;<i> i18n-ru
+</I>&gt;<i> i18n-tr
+</I>&gt;<i> i18n-fr
+</I>&gt;<i> i18n-nl
+</I>&gt;<i> i18b-de
+</I>&gt;<i>
+</I>&gt;<i> Could you pls inform me about the creation. Misc wrote that I don't
+</I>&gt;<i> need to subscribe to this list, so pls reply to me directly.
+</I>
+I have created the lists :
+
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-af at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-de at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-et at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-fr at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-nl at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-pt_br at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-pl at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-ru at ml.mageia</A>
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">i18n-tr at ml.mageia</A>
+
+
+but they are still not accessible ( well, technically, they should be
+soon, once the system create them . I still need to write a quick howto
+on how to use them, and fix the software used to subscribe ( catdap ) as
+posted on webteam ).
+
+I will mail in a few days with instructions on how to subscribe and how
+to use it.
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001628.html">[Mageia-sysadm] [673] - create the initial set of i18n lists
+</A></li>
+ <LI>Next message: <A HREF="001564.html">[Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1563">[ date ]</a>
+ <a href="thread.html#1563">[ thread ]</a>
+ <a href="subject.html#1563">[ subject ]</a>
+ <a href="author.html#1563">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001564.html b/zarb-ml/mageia-sysadm/2011-January/001564.html
new file mode 100644
index 000000000..e851c2def
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001564.html
@@ -0,0 +1,362 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B217%5D%20remove%20Mandriva_upload_pre.pm%20as%20it%20seems%20to%0A%09be%20obsolete%20and%20not%20used&In-Reply-To=%3C20110106021129.2679E419C7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001563.html">
+ <LINK REL="Next" HREF="001565.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B217%5D%20remove%20Mandriva_upload_pre.pm%20as%20it%20seems%20to%0A%09be%20obsolete%20and%20not%20used&In-Reply-To=%3C20110106021129.2679E419C7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:11:29 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001563.html">[Mageia-sysadm] Request of mailing lists for i18n language teams
+</A></li>
+ <LI>Next message: <A HREF="001565.html">[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1564">[ date ]</a>
+ <a href="thread.html#1564">[ thread ]</a>
+ <a href="subject.html#1564">[ subject ]</a>
+ <a href="author.html#1564">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 217
+Author: boklm
+Date: 2011-01-06 03:11:28 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+remove Mandriva_upload_pre.pm as it seems to be obsolete and not used
+
+Removed Paths:
+-------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+
+Deleted: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-06 01:08:18 UTC (rev 216)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload_pre.pm 2011-01-06 02:11:28 UTC (rev 217)
+@@ -1,276 +0,0 @@
+-# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
+-package Youri::Repository::Mandriva_upload_pre;
+-
+-=head1 NAME
+-
+-Youri::Repository::PLF - PLF repository implementation
+-
+-=head1 DESCRIPTION
+-
+-This module implements PLF repository.
+-
+-=cut
+-
+-use warnings;
+-use strict;
+-use Carp;
+-use Memoize;
+-use File::Find 'find';
+-use base qw/Youri::Repository/;
+-use SVN::Client;
+-use constant {
+- PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
+- PACKAGE_CHARSET =&gt; 'utf8'
+-};
+-
+-memoize('_get_section');
+-
+-my @pkgsections = qw/core nonfree tainted/;
+-
+-sub _init {
+- my $self = shift;
+- my %options = (
+- module =&gt; 'SPECS', # CVS module
+- noarch =&gt; 'i586', # noarch packages policy
+- svn =&gt; '',
+- upload_root =&gt; '',
+- @_
+- );
+-
+- $self-&gt;{_module} = $options{module};
+- $self-&gt;{_noarch} = $options{noarch};
+- $self-&gt;{_svn} = $options{svn};
+- $self-&gt;{_upload_root} = $options{upload_root};
+-
+- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
+- $year+=1900;
+- my $hostname = `hostname`;
+- my ($host) = $hostname =~ /([^.]*)/;
+- $self-&gt;{group_dir} = sprintf &quot;$ENV{SUDO_USER}.$host.$$.$year%02d%02d%02d%02d%02d&quot;, $mon, $mday, $hour, $min, $sec;
+-}
+-
+-sub get_package_class {
+- return PACKAGE_CLASS;
+-}
+-
+-sub package_in_svn {
+- my ($self, $srpm_name) = @_;
+- my $ctx = new SVN::Client(
+- auth =&gt; [SVN::Client::get_simple_provider(),
+- SVN::Client::get_simple_prompt_provider(\&amp;simple_prompt,2),
+- SVN::Client::get_username_provider()]
+- );
+-
+- my $svn_entry = $ctx-&gt;ls(&quot;$self-&gt;{_svn}/&quot;, 'HEAD', 0);
+- foreach (keys %{$svn_entry}) {
+- if ($srpm_name eq $_) {
+- print &quot;Package $_ is in the SVN\n&quot;;
+- return 1
+- }
+- }
+-}
+-
+-sub get_svn_url {
+- my ($self) = @_;
+- $self-&gt;{_svn}
+-}
+-
+-sub get_revisions {
+- my ($self, $package, $target, $define, $filter) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+- print &quot;Looking for package $package revisions for $target\n&quot;
+- if $self-&gt;{_verbose} &gt; 0;
+-
+- my $arch = $define-&gt;{arch} || $package-&gt;get_arch;
+- if ($arch eq 'src') {
+- $arch = 'SRPMS'
+- } else {
+- $arch .= '/media'
+- }
+- my @packages;
+- foreach my $dir (@pkgsections) {
+- print &quot;Looking into $self-&gt;{_install_root}/$target/$arch/$dir/release\n&quot;;
+- push @packages,
+- map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
+- $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- &quot;$target/$arch/$dir/release&quot; ,
+- $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(),undef, undef, $arch)
+- );
+- }
+-
+- @packages = grep { $filter-&gt;($_) } @packages if $filter;
+-
+- return
+- sort { $b-&gt;compare($a) } # sort by revision order
+- @packages;
+-}
+-
+-sub get_package_charset {
+- return PACKAGE_CHARSET;
+-}
+-
+-sub get_upload_dir {
+- my ($self, $package, $target, $define) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+- my $arch = $package-&gt;get_arch();
+- my $section = $self-&gt;_get_section($package, $target, $define);
+- my $media_path = $section eq 'main' ? $target : $target =~ /^cooker/ ? &quot;contrib&quot; : &quot;$target/contrib&quot;;
+- my $arch_path = $arch eq 'src' ? 'SRPMS' : 'RPMS';
+- my $force = $target =~ /_force/ ? 'force' : '';
+- $self-&gt;{_upload_root} . &quot;/$media_path/$force/$arch_path/&quot;
+-}
+-
+-sub get_arch {
+- my ($self, $package, $target, $define) = @_;
+- my $arch = $package-&gt;get_arch();
+- if ($arch eq 'noarch') {
+- $arch = $self-&gt;{_noarch}
+- }
+- $arch
+-}
+-
+-sub get_install_path {
+- my ($self, $package, $target, $define) = @_;
+-
+- return $self-&gt;_get_path($package, $target, $define);
+-}
+-
+-sub get_archive_path {
+- my ($self, $package, $target, $define) = @_;
+-
+- return $self-&gt;_get_path($package, $target, $define);
+-}
+-
+-sub _get_path {
+- my ($self, $package, $target, $define) = @_;
+-
+- my $arch = $package-&gt;get_arch;
+- if ($arch eq 'src') {
+- $arch = 'SRPMS'
+- } else {
+- $arch .= '/media'
+- }
+- my $section = $self-&gt;_get_section($package, $target, $define);
+-
+- return &quot;$target/$arch/$section/release/&quot;;
+-}
+-
+-
+-sub get_version_path {
+- my ($self, $package, $target, $define) = @_;
+-
+- my $section = $self-&gt;_get_section($package, $target, $define);
+-
+- return &quot;$self-&gt;{_module}/$section/release/&quot;;
+-}
+-
+-=head2 get_replaced_packages($package, $target, $define)
+-
+-Overrides parent method to add libified packages.
+-
+-=cut
+-
+-sub get_replaced_packages {
+- my ($self, $package, $target, $define) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+-
+- my @replaced_packages =
+- $self-&gt;SUPER::get_replaced_packages($package, $target, $define);
+-
+- # mandriva lib policy:
+- # library package names change with revision, making mandatory to
+- # duplicate older revisions search with a custom pattern
+- my $name = $package-&gt;get_name();
+- if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
+- push(@replaced_packages,
+- grep { $package-&gt;compare($_) &gt; 0 }
+- map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
+- $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- $self-&gt;get_install_path($package, $target, $define),
+- PACKAGE_CLASS-&gt;get_pattern(
+- $1 . '[\d_\.]+' . $2, # custom name pattern
+- undef,
+- undef,
+- $package-&gt;get_arch()
+- ),
+- )
+- );
+- }
+-
+- return @replaced_packages;
+-
+-}
+-
+-sub _get_section {
+- my ($self, $package, $target, $define) = @_;
+-
+- my $section;
+-
+- # try to find section automatically
+- my $arch = $package-&gt;get_arch();
+- $arch = $self-&gt;{_noarch} if $arch eq 'noarch';
+-
+- my $source_pattern = PACKAGE_CLASS-&gt;get_pattern(
+- $package-&gt;get_canonical_name(),
+- undef,
+- undef,
+- 'src'
+- );
+-
+- my $binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
+- $package-&gt;get_name(),
+- undef,
+- undef,
+- $arch
+- );
+-
+- # for each potential section, try to match
+- # a suitable source patten in source directory
+- # a suitable binary patten in binary directory
+- foreach my $dir (@pkgsections) {
+- next unless
+- $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- &quot;$target/SRPMS/$dir/release&quot;,
+- $source_pattern
+- ) || $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- &quot;$target/$arch/media/$dir/release&quot;,
+- $binary_pattern
+- );
+- print &quot;Section is $dir\n&quot;;
+- $section = $dir;
+- last;
+- }
+-
+- # use defined section if not found
+- $section = $define-&gt;{section} unless $section;
+-
+- $section || 'core'
+-}
+-
+-sub get_upload_newer_revisions {
+- my ($self, $package, $target, $define) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+- my $arch = $package-&gt;get_arch();
+- my $pattern = $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(), undef, undef, $arch);
+- print &quot;Looking for package $package revisions for $target in $self-&gt;{_upload_root} (pattern $pattern)\n&quot;;
+- my @packages;
+- foreach my $dir ('cooker', 'contrib') {
+- find(sub { return if ! /^$pattern/; print &quot;Find $_\n&quot;; push @packages, $File::Find::name if $package-&gt;compare($self-&gt;get_package_class()-&gt;new(file =&gt; $File::Find::name)) &lt;= 0 }, &quot;$self-&gt;{_upload_root}/$dir&quot;);
+- }
+- return
+- @packages;
+-}
+-
+-=head1 COPYRIGHT AND LICENSE
+-
+-Copyright (C) 2002-2006, YOURI project
+-
+-This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+-
+-=cut
+-
+-1;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/cface7f3/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001563.html">[Mageia-sysadm] Request of mailing lists for i18n language teams
+</A></li>
+ <LI>Next message: <A HREF="001565.html">[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1564">[ date ]</a>
+ <a href="thread.html#1564">[ thread ]</a>
+ <a href="subject.html#1564">[ subject ]</a>
+ <a href="author.html#1564">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001565.html b/zarb-ml/mageia-sysadm/2011-January/001565.html
new file mode 100644
index 000000000..a6e0b5065
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001565.html
@@ -0,0 +1,1188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B218%5D%20rename%20Mandriva_upload.pm%20to%20Mageia_upload.pm&In-Reply-To=%3C20110106021224.4CF68419C7%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001564.html">
+ <LINK REL="Next" HREF="001566.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B218%5D%20rename%20Mandriva_upload.pm%20to%20Mageia_upload.pm&In-Reply-To=%3C20110106021224.4CF68419C7%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:12:24 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001564.html">[Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used
+</A></li>
+ <LI>Next message: <A HREF="001566.html">[Mageia-sysadm] [219] default section is now core/release instead of contrib/release
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1565">[ date ]</a>
+ <a href="thread.html#1565">[ thread ]</a>
+ <a href="subject.html#1565">[ subject ]</a>
+ <a href="author.html#1565">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 218
+Author: boklm
+Date: 2011-01-06 03:12:24 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+rename Mandriva_upload.pm to Mageia_upload.pm
+
+Added Paths:
+-----------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+
+Removed Paths:
+-------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm
+
+Copied: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm (from rev 210, build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm)
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 02:12:24 UTC (rev 218)
+@@ -0,0 +1,546 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
++package Youri::Repository::Mandriva_upload;
++
++=head1 NAME
++
++Youri::Repository::PLF - PLF repository implementation
++
++=head1 DESCRIPTION
++
++This module implements PLF repository.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Memoize;
++use File::Find 'find';
++use base qw/Youri::Repository/;
++use MDV::Distribconf::Build;
++use SVN::Client;
++
++use constant {
++ PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
++ PACKAGE_CHARSET =&gt; 'utf8'
++};
++
++memoize('_get_media_config');
++
++my %translate_arch = (
++ i386 =&gt; 'i586',
++ sparc64 =&gt; 'sparcv9',
++);
++
++sub _init {
++ my $self = shift;
++ my %options = (
++ noarch =&gt; 'i586', # noarch packages policy
++ src =&gt; 'i586',
++ install_root =&gt; '',
++ test =&gt; 0, # test mode
++ verbose =&gt; 0, # verbose mode
++ queue =&gt; '',
++ rejected =&gt; '',
++ @_
++ );
++ foreach my $var ('upload_state') {
++ $self-&gt;{&quot;_$var&quot;} = [];
++ foreach my $value (split ' ', $options{$var}) {
++ push @{$self-&gt;{&quot;_$var&quot;}}, $value
++ }
++ }
++ print &quot;Initializing repository\n&quot;;
++ foreach my $v ('rejected', 'svn', 'queue', 'noarch', 'install_root', 'upload_root', 'verbose') {
++ $self-&gt;{&quot;_$v&quot;} = $options{$v}
++ }
++ foreach my $target (@{$options{targets}}) {
++ $self-&gt;{$target} = [];
++ print &quot;Adding $target ($options{$target}{arch})\n&quot; if $self-&gt;{_verbose};
++ foreach my $value (split ' ', $options{$target}{arch}) {
++ push @{$self-&gt;{_arch}{$target}}, $value;
++ push @{$self-&gt;{_extra_arches}}, $value
++ }
++ }
++ $self
++}
++
++sub get_group_id {
++ my ($user) = @_;
++ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
++ $year+=1900;
++ $mon++;
++ my $hostname = `hostname`;
++ my ($host) = $hostname =~ /([^.]*)/;
++ sprintf &quot;$year%02d%02d%02d%02d%02d.$user.$host.${$}_&quot;, $mon, $mday, $hour, $min, $sec;
++}
++
++sub get_target_arch {
++ my ($self, $target) = $_;
++ return $self-&gt;{_arch}{$target}
++}
++
++sub set_arch_changed {
++ my ($self, $target, $arch) = @_;
++ if ($arch eq 'noarch') {
++ $self-&gt;{_arch_changed}{$_} = 1 foreach @{$self-&gt;{_arch}{$target}}
++ } elsif ($arch eq 'src') {
++ $self-&gt;{_arch_changed} = $self-&gt;{_src}
++ } else {
++ $self-&gt;{_arch_changed}{$arch} = 1
++ }
++}
++
++sub get_arch_changed {
++ my ($self, $target) = @_;
++ return [ keys %{$self-&gt;{_arch_changed}} ]
++}
++
++sub set_install_dir_changed {
++ my ($self, $install_dir) = @_;
++ $self-&gt;{_install_dir_changed}{$install_dir} = 1;
++}
++
++sub get_install_dir_changed {
++ my ($self) = @_;
++ return [ keys %{$self-&gt;{_install_dir_changed}} ];
++}
++
++sub _get_media_config {
++ my ($self, $target) = @_;
++ my %media;
++ my $real_target = $target;
++ $real_target =~ s/_force//;
++ foreach my $arch (@{$self-&gt;{_arch}{$target}}) {
++ my $root = &quot;$self-&gt;{_install_root}/$real_target/$arch&quot;;
++ my $distrib = MDV::Distribconf::Build-&gt;new($root);
++ print &quot;Getting media config from $root\n&quot; if $self-&gt;{_verbose};
++ $self-&gt;{distrib}{$arch} = $distrib;
++ $distrib-&gt;loadtree or die &quot;$root does not seem to be a distribution tree\n&quot;;
++ $distrib-&gt;parse_mediacfg;
++ foreach my $media ($distrib-&gt;listmedia) {
++ my $rpms = $distrib-&gt;getvalue($media, 'rpms');
++ my $debug_for = $distrib-&gt;getvalue($media, 'debug_for');
++ my $srpms = $distrib-&gt;getvalue($media, 'srpms');
++ my $path = $distrib-&gt;getfullpath($media, 'path');
++ if (!$rpms) {
++ if (-d $path) {
++ print &quot;MEDIA defining $media in $path\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ $media{$arch}{$media} = $path
++ } else {
++ print &quot;ERROR $path does not exist for media $media on $arch\n&quot;
++ }
++ } else {
++ my ($media) = split ' ', $rpms;
++ if (-d $path) {
++ print &quot;MEDIA defining SOURCE media for $media in $path\n&quot; if $self-&gt;{_verbose} &gt; 1;
++ $media{src}{$media} = $path
++ } else {
++ print &quot;ERROR $path does not exist for source media $media on $arch\n&quot;
++ }
++ }
++ }
++ }
++ \%media
++}
++
++sub get_package_class {
++ return PACKAGE_CLASS;
++}
++
++sub get_package_charset {
++ return PACKAGE_CHARSET;
++}
++
++sub get_upload_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $arch = $package-&gt;get_arch();
++ return
++ $self-&gt;{_upload_root} .
++ &quot;/$self-&gt;{_queue}/$target/&quot; .
++ _get_section($self, $package, $target, $user_context, $app_context) .
++ '/' .
++ ($user_context-&gt;{prefix} ? '' : get_group_id($user_context-&gt;{user}))
++}
++
++sub get_install_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ return $self-&gt;_get_path($package, $target, $user_context, $app_context);
++}
++
++
++sub get_distribution_paths {
++ my ($self, $package, $target) = @_;
++
++ return $self-&gt;_get_distribution_paths($package, $target);
++}
++
++sub get_archive_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ return $self-&gt;_get_path($package, $target, $user_context, $app_context);
++}
++
++sub get_reject_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ return $self-&gt;{_rejected};
++}
++
++
++sub _get_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++ my $arch = $app_context-&gt;{arch} || $package-&gt;get_arch();
++ $arch = $translate_arch{$arch} || $arch;
++ if ($arch eq 'noarch') {
++ $arch = $self-&gt;{_noarch}
++ } elsif ($arch eq 'src') {
++ return &quot;$target/SRPMS/$section&quot;
++ }
++ &quot;$target/$arch/media/$section&quot;
++}
++
++sub _get_distribution_paths {
++ my ($self, $package, $target) = @_;
++
++ my $arch = $package-&gt;get_arch();
++ $arch = $translate_arch{$arch} || $arch;
++ if ($arch eq 'noarch') {
++ map { &quot;$target/$_&quot; } $self-&gt;get_extra_arches;
++ } elsif ($arch eq 'src') {
++ die &quot;no way to get distribution path using a $arch package&quot;;
++ } else {
++ &quot;$target/$arch&quot;;
++ }
++}
++
++sub get_arch {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ my $arch = $package-&gt;get_arch();
++ $arch = $translate_arch{$arch} || $arch;
++ if ($arch eq 'noarch') {
++ $arch = $self-&gt;{_noarch}
++ }
++ $arch
++}
++
++sub get_version_path {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++
++ return &quot;$self-&gt;{_module}/$section&quot;;
++}
++
++=head2 get_replaced_packages($package, $target, $user_context, $app_context)
++
++Overrides parent method to add libified packages.
++
++=cut
++
++sub get_replaced_packages {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ my @replaced_packages =
++ $self-&gt;SUPER::get_replaced_packages($package, $target, $user_context, $app_context);
++
++ # mandriva lib policy:
++ # library package names change with revision, making mandatory to
++ # duplicate older revisions search with a custom pattern
++ my $name = $package-&gt;get_name();
++ if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
++ push(@replaced_packages,
++ grep { $package-&gt;compare($_) &gt; 0 }
++ map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $user_context, $app_context),
++ PACKAGE_CLASS-&gt;get_pattern(
++ $1 . '[\d_\.]+' . $2, # custom name pattern
++ undef,
++ undef,
++ $package-&gt;get_arch()
++ ),
++ )
++ );
++ }
++
++ # kernel packages have the version in the name
++ # binary dkms built for old kernels have to be removed too
++ if ($name =~ /^kernel-([^\d]*-)?([\d.]*)-(.*)$/) { # &quot;desktop&quot;, &quot;2.6.28&quot;, &quot;2mnb&quot;
++ push(@replaced_packages,
++ map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ $self-&gt;get_install_path($package, $target, $user_context, $app_context),
++ PACKAGE_CLASS-&gt;get_pattern(
++ '(kernel-' . $1 . '\d.*|.*-kernel-[\d.]*-' . $1 . '\d.*)',
++ undef,
++ undef,
++ $package-&gt;get_arch()
++ ),
++ )
++ );
++ }
++
++ return @replaced_packages;
++
++}
++
++sub _get_main_section {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++ my ($main_section) = $section =~ m,^([^/]+),;
++ $main_section
++}
++
++sub _get_section {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++
++ my $name = $package-&gt;get_name();
++ my $cname = $package-&gt;get_canonical_name();
++ my $version = $package-&gt;get_version();
++ my $release = $package-&gt;get_release();
++ my $section = $user_context-&gt;{section};
++ my $media = $self-&gt;_get_media_config($target);
++ my $arch = $package-&gt;get_arch();
++ my $file = $package-&gt;as_file();
++ $file =~ s,/+,/,g; # unneeded?
++ # FIXME: use $self-&gt;get_arch()
++ $arch = $self-&gt;{_noarch} if $arch eq 'noarch';
++ $arch = $translate_arch{$arch} || $arch;
++
++ if (!$section) {
++ $section = $self-&gt;{packages}{$file}{section};
++ print &quot;Section undefined, repository says it is '$section' for '$file'\n&quot; if $self-&gt;{_verbose};
++ }
++ if ($section &amp;&amp; $section !~ /debug_/ &amp;&amp; $package-&gt;is_debug()) {
++ $section = &quot;debug_$section&quot;
++ }
++
++ # if have section already, check if it exists, and may return immediately
++ if ($section) {
++ print &quot;Using requested section $section\n&quot;;
++ if ($media-&gt;{$arch}{$section}) {
++ return $section
++ } else {
++ die &quot;FATAL youri: unknown section $section for target $target for arch $arch\n&quot;
++ }
++ }
++ # else, try to find section automatically
++
++ # pattern for search of src package with specific version-release,
++ # should be searched first, because we prefer to find the precise
++ # section a package is already in
++ my $specific_source_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $cname,
++ $version,
++ $release,
++ 'src'
++ );
++
++ my $source_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $cname,
++ undef,
++ undef,
++ 'src'
++ );
++
++ # if a media has no source media configured, or if it is a debug
++ # package, we search in binary media
++
++ # pattern for search when a binary media has no src media configured
++ my $specific_binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $name,
++ $version,
++ $release,
++ $arch
++ );
++
++ # last resort pattern: previous existing binary packages
++ my $binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
++ $name,
++ undef,
++ undef,
++ $arch
++ );
++
++ # first try to find section for the specific version, as it is possibly already there;
++ # this is the case for when called in Youri::Submit::Action::Archive, to find the
++ # section the package got installed
++ print &quot;Looking for package $name with version $version-$release\n&quot;;
++ foreach my $m (keys %{$media-&gt;{$arch}}) {
++ print &quot; .. section '$m' path '&quot;.$media-&gt;{$arch}{$m}.&quot;'\n&quot; if $self-&gt;{_verbose};
++ # - prefer source for non-debug packages, use binary if there is no source media configured
++ # - debug packages must be searched in binary medias, due to their
++ # src section != binary section; NOTE: should/need we search in
++ # src medias and add the 'debug_' prefix?
++ if (!$package-&gt;is_debug() &amp;&amp; $media-&gt;{src}{$m}) {
++ next unless $self-&gt;get_files('', $media-&gt;{src}{$m}, $specific_source_pattern);
++ } else {
++ next unless $self-&gt;get_files('', $media-&gt;{$arch}{$m}, $specific_binary_pattern);
++ }
++ $section = $m;
++ last;
++ }
++
++ # if still not found, try finding any version of the package in a
++ # /release subsection (safe default: /release is default for cooker,
++ # should be locked for released distros, and we don't risk wrongly
++ # choosing /backports, /testing, or /updates);
++ # this is the case for when called at submit, to find the section where
++ # the package already resides
++ if (!$section) {
++ # debug packages should be found by previous specific version search
++ # NOTE: as above, should/need we search here and add the 'debug_' prefix?
++ # ... probably... as at least mdv-youri-submit-force will process debug packages
++ if ($package-&gt;is_debug() &amp;&amp; $self-&gt;{_verbose}) {
++ print &quot;Warning: debug package $name with version $version-$release not found.\n&quot;;
++ }
++
++ print &quot;Warning: Looking for any section with a package $name of any version\n&quot;;
++ foreach my $m (keys %{$media-&gt;{$arch}}) {
++ print &quot; .. section '$m' path '&quot;.$media-&gt;{$arch}{$m}.&quot;'\n&quot; if $self-&gt;{_verbose};
++ # NOTE: !$package-&gt;is_debug() test is here to prevent when above FATAL error is removed
++ next if $m !~ /release/ || ($m =~ /debug/ &amp;&amp; !$package-&gt;is_debug());
++ # - prefer source
++ if ($media-&gt;{src}{$m}) {
++ next unless $self-&gt;get_files('', $media-&gt;{src}{$m}, $source_pattern);
++ } else {
++ next unless $self-&gt;get_files('', $media-&gt;{$arch}{$m}, $binary_pattern);
++ }
++ $section = $m;
++ last;
++ }
++ }
++
++ # FIXME: doing this here is wrong; this way the caller can never know if
++ # a section was actually found or not; should return undef and let the
++ # caller set a default (Note: IIRC PLF|Zarb has this right, see there) -spuk
++ print STDERR &quot;Warning: Can't guess destination: section missing, defaulting to contrib/release\n&quot; unless $section;
++ $section ||= 'contrib/release';
++
++ # next time we don't need to search everything again
++ $self-&gt;{packages}{$file}{section} = $section;
++
++ print &quot;Section is '$section'.\n&quot;;
++
++ return $section;
++}
++
++sub get_upload_newer_revisions {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ my $arch = $package-&gt;get_arch();
++ my $name = $package-&gt;get_full_name;
++ $name =~ s/^\@\d+://;
++ my $pattern = $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(), undef, undef, $arch);
++ my $media = $self-&gt;_get_media_config($target);
++ my @packages;
++ foreach my $state (@{$self-&gt;{_upload_state}}) {
++ foreach my $m (keys %{$media-&gt;{$arch}}) {
++ my $path = &quot;$self-&gt;{_upload_root}/$state/$target/$m&quot;;
++ print &quot;Looking for package $package revisions for $target in $path (pattern $pattern)\n&quot; if $self-&gt;{_verbose};
++ find(
++ sub {
++ s/\d{14}\.[^.]*\.[^.]*\.\d+_//;
++ s/^\@\d+://;
++ return if ! /^$pattern/;
++ return if /\.info$/;
++ print &quot;Find $_\n&quot;;
++ push @packages, $File::Find::name if $package-&gt;check_ranges_compatibility(&quot;== $name&quot;, &quot;&lt; $_&quot;)
++ }, $path);
++ }
++ }
++ return
++ @packages;
++}
++
++sub package_in_svn {
++ my ($self, $srpm_name) = @_;
++ my $ctx = new SVN::Client(
++ auth =&gt; [SVN::Client::get_simple_provider(),
++ SVN::Client::get_simple_prompt_provider(\&amp;simple_prompt,2),
++ SVN::Client::get_username_provider()]
++ );
++
++ my $svn_entry = $ctx-&gt;ls(&quot;$self-&gt;{_svn}/$srpm_name&quot;, 'HEAD', 0);
++ if ($svn_entry) {
++ print &quot;Package $srpm_name is in the SVN\n&quot;;
++ return 1
++ }
++}
++
++sub get_svn_url {
++ my ($self) = @_;
++ $self-&gt;{_svn}
++}
++
++sub get_revisions {
++ my ($self, $package, $target, $user_context, $app_context, $filter) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++ print &quot;Looking for package $package revisions for $target\n&quot; if $self-&gt;{_verbose} &gt; 0;
++
++ my $arch = $app_context-&gt;{arch} || $user_context-&gt;{arch} || $package-&gt;get_arch();
++ my $media_arch = $arch eq 'noarch' ? $self-&gt;{_noarch} : $arch;
++ my $path = $arch eq 'src' ? &quot;$target/SRPMS/&quot; : &quot;$target/$media_arch/media&quot;;
++ my $media = $self-&gt;_get_section($package, $target, $user_context, $app_context);
++ my $name = $package-&gt;get_name();
++ my @packages = map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
++ $self-&gt;get_files(
++ $self-&gt;{_install_root},
++ &quot;$path/$media&quot;,
++ $self-&gt;get_package_class()-&gt;get_pattern(
++ $name,
++ undef,
++ undef,
++ $package-&gt;get_arch(),
++ )
++ );
++
++ @packages = grep { $filter-&gt;($_) } @packages if $filter;
++
++ return
++ sort { $b-&gt;compare($a) } # sort by revision order
++ @packages;
++}
++
++sub reject {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++
++}
++
++sub get_archive_dir {
++ my ($self, $package, $target, $user_context, $app_context) = @_;
++ croak &quot;Not a class method&quot; unless ref $self;
++
++ return
++ $self-&gt;{_archive_root}
++}
++
++
++# 20060801 warly
++#
++# Upload steps
++# SRPMS are uploaded in /home/mandrake/uploads/todo/$target/$media/group_id
++#
++#
++#
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (C) 2002-2006, YOURI project
++
++This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
++
++=cut
++
++1;
+
+Deleted: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm 2011-01-06 02:11:28 UTC (rev 217)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm 2011-01-06 02:12:24 UTC (rev 218)
+@@ -1,546 +0,0 @@
+-# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
+-package Youri::Repository::Mandriva_upload;
+-
+-=head1 NAME
+-
+-Youri::Repository::PLF - PLF repository implementation
+-
+-=head1 DESCRIPTION
+-
+-This module implements PLF repository.
+-
+-=cut
+-
+-use warnings;
+-use strict;
+-use Carp;
+-use Memoize;
+-use File::Find 'find';
+-use base qw/Youri::Repository/;
+-use MDV::Distribconf::Build;
+-use SVN::Client;
+-
+-use constant {
+- PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
+- PACKAGE_CHARSET =&gt; 'utf8'
+-};
+-
+-memoize('_get_media_config');
+-
+-my %translate_arch = (
+- i386 =&gt; 'i586',
+- sparc64 =&gt; 'sparcv9',
+-);
+-
+-sub _init {
+- my $self = shift;
+- my %options = (
+- noarch =&gt; 'i586', # noarch packages policy
+- src =&gt; 'i586',
+- install_root =&gt; '',
+- test =&gt; 0, # test mode
+- verbose =&gt; 0, # verbose mode
+- queue =&gt; '',
+- rejected =&gt; '',
+- @_
+- );
+- foreach my $var ('upload_state') {
+- $self-&gt;{&quot;_$var&quot;} = [];
+- foreach my $value (split ' ', $options{$var}) {
+- push @{$self-&gt;{&quot;_$var&quot;}}, $value
+- }
+- }
+- print &quot;Initializing repository\n&quot;;
+- foreach my $v ('rejected', 'svn', 'queue', 'noarch', 'install_root', 'upload_root', 'verbose') {
+- $self-&gt;{&quot;_$v&quot;} = $options{$v}
+- }
+- foreach my $target (@{$options{targets}}) {
+- $self-&gt;{$target} = [];
+- print &quot;Adding $target ($options{$target}{arch})\n&quot; if $self-&gt;{_verbose};
+- foreach my $value (split ' ', $options{$target}{arch}) {
+- push @{$self-&gt;{_arch}{$target}}, $value;
+- push @{$self-&gt;{_extra_arches}}, $value
+- }
+- }
+- $self
+-}
+-
+-sub get_group_id {
+- my ($user) = @_;
+- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
+- $year+=1900;
+- $mon++;
+- my $hostname = `hostname`;
+- my ($host) = $hostname =~ /([^.]*)/;
+- sprintf &quot;$year%02d%02d%02d%02d%02d.$user.$host.${$}_&quot;, $mon, $mday, $hour, $min, $sec;
+-}
+-
+-sub get_target_arch {
+- my ($self, $target) = $_;
+- return $self-&gt;{_arch}{$target}
+-}
+-
+-sub set_arch_changed {
+- my ($self, $target, $arch) = @_;
+- if ($arch eq 'noarch') {
+- $self-&gt;{_arch_changed}{$_} = 1 foreach @{$self-&gt;{_arch}{$target}}
+- } elsif ($arch eq 'src') {
+- $self-&gt;{_arch_changed} = $self-&gt;{_src}
+- } else {
+- $self-&gt;{_arch_changed}{$arch} = 1
+- }
+-}
+-
+-sub get_arch_changed {
+- my ($self, $target) = @_;
+- return [ keys %{$self-&gt;{_arch_changed}} ]
+-}
+-
+-sub set_install_dir_changed {
+- my ($self, $install_dir) = @_;
+- $self-&gt;{_install_dir_changed}{$install_dir} = 1;
+-}
+-
+-sub get_install_dir_changed {
+- my ($self) = @_;
+- return [ keys %{$self-&gt;{_install_dir_changed}} ];
+-}
+-
+-sub _get_media_config {
+- my ($self, $target) = @_;
+- my %media;
+- my $real_target = $target;
+- $real_target =~ s/_force//;
+- foreach my $arch (@{$self-&gt;{_arch}{$target}}) {
+- my $root = &quot;$self-&gt;{_install_root}/$real_target/$arch&quot;;
+- my $distrib = MDV::Distribconf::Build-&gt;new($root);
+- print &quot;Getting media config from $root\n&quot; if $self-&gt;{_verbose};
+- $self-&gt;{distrib}{$arch} = $distrib;
+- $distrib-&gt;loadtree or die &quot;$root does not seem to be a distribution tree\n&quot;;
+- $distrib-&gt;parse_mediacfg;
+- foreach my $media ($distrib-&gt;listmedia) {
+- my $rpms = $distrib-&gt;getvalue($media, 'rpms');
+- my $debug_for = $distrib-&gt;getvalue($media, 'debug_for');
+- my $srpms = $distrib-&gt;getvalue($media, 'srpms');
+- my $path = $distrib-&gt;getfullpath($media, 'path');
+- if (!$rpms) {
+- if (-d $path) {
+- print &quot;MEDIA defining $media in $path\n&quot; if $self-&gt;{_verbose} &gt; 1;
+- $media{$arch}{$media} = $path
+- } else {
+- print &quot;ERROR $path does not exist for media $media on $arch\n&quot;
+- }
+- } else {
+- my ($media) = split ' ', $rpms;
+- if (-d $path) {
+- print &quot;MEDIA defining SOURCE media for $media in $path\n&quot; if $self-&gt;{_verbose} &gt; 1;
+- $media{src}{$media} = $path
+- } else {
+- print &quot;ERROR $path does not exist for source media $media on $arch\n&quot;
+- }
+- }
+- }
+- }
+- \%media
+-}
+-
+-sub get_package_class {
+- return PACKAGE_CLASS;
+-}
+-
+-sub get_package_charset {
+- return PACKAGE_CHARSET;
+-}
+-
+-sub get_upload_dir {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+- my $arch = $package-&gt;get_arch();
+- return
+- $self-&gt;{_upload_root} .
+- &quot;/$self-&gt;{_queue}/$target/&quot; .
+- _get_section($self, $package, $target, $user_context, $app_context) .
+- '/' .
+- ($user_context-&gt;{prefix} ? '' : get_group_id($user_context-&gt;{user}))
+-}
+-
+-sub get_install_path {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- return $self-&gt;_get_path($package, $target, $user_context, $app_context);
+-}
+-
+-
+-sub get_distribution_paths {
+- my ($self, $package, $target) = @_;
+-
+- return $self-&gt;_get_distribution_paths($package, $target);
+-}
+-
+-sub get_archive_path {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- return $self-&gt;_get_path($package, $target, $user_context, $app_context);
+-}
+-
+-sub get_reject_path {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- return $self-&gt;{_rejected};
+-}
+-
+-
+-sub _get_path {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
+- my $arch = $app_context-&gt;{arch} || $package-&gt;get_arch();
+- $arch = $translate_arch{$arch} || $arch;
+- if ($arch eq 'noarch') {
+- $arch = $self-&gt;{_noarch}
+- } elsif ($arch eq 'src') {
+- return &quot;$target/SRPMS/$section&quot;
+- }
+- &quot;$target/$arch/media/$section&quot;
+-}
+-
+-sub _get_distribution_paths {
+- my ($self, $package, $target) = @_;
+-
+- my $arch = $package-&gt;get_arch();
+- $arch = $translate_arch{$arch} || $arch;
+- if ($arch eq 'noarch') {
+- map { &quot;$target/$_&quot; } $self-&gt;get_extra_arches;
+- } elsif ($arch eq 'src') {
+- die &quot;no way to get distribution path using a $arch package&quot;;
+- } else {
+- &quot;$target/$arch&quot;;
+- }
+-}
+-
+-sub get_arch {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+- my $arch = $package-&gt;get_arch();
+- $arch = $translate_arch{$arch} || $arch;
+- if ($arch eq 'noarch') {
+- $arch = $self-&gt;{_noarch}
+- }
+- $arch
+-}
+-
+-sub get_version_path {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
+-
+- return &quot;$self-&gt;{_module}/$section&quot;;
+-}
+-
+-=head2 get_replaced_packages($package, $target, $user_context, $app_context)
+-
+-Overrides parent method to add libified packages.
+-
+-=cut
+-
+-sub get_replaced_packages {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+-
+- my @replaced_packages =
+- $self-&gt;SUPER::get_replaced_packages($package, $target, $user_context, $app_context);
+-
+- # mandriva lib policy:
+- # library package names change with revision, making mandatory to
+- # duplicate older revisions search with a custom pattern
+- my $name = $package-&gt;get_name();
+- if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
+- push(@replaced_packages,
+- grep { $package-&gt;compare($_) &gt; 0 }
+- map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
+- $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- $self-&gt;get_install_path($package, $target, $user_context, $app_context),
+- PACKAGE_CLASS-&gt;get_pattern(
+- $1 . '[\d_\.]+' . $2, # custom name pattern
+- undef,
+- undef,
+- $package-&gt;get_arch()
+- ),
+- )
+- );
+- }
+-
+- # kernel packages have the version in the name
+- # binary dkms built for old kernels have to be removed too
+- if ($name =~ /^kernel-([^\d]*-)?([\d.]*)-(.*)$/) { # &quot;desktop&quot;, &quot;2.6.28&quot;, &quot;2mnb&quot;
+- push(@replaced_packages,
+- map { PACKAGE_CLASS-&gt;new(file =&gt; $_) }
+- $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- $self-&gt;get_install_path($package, $target, $user_context, $app_context),
+- PACKAGE_CLASS-&gt;get_pattern(
+- '(kernel-' . $1 . '\d.*|.*-kernel-[\d.]*-' . $1 . '\d.*)',
+- undef,
+- undef,
+- $package-&gt;get_arch()
+- ),
+- )
+- );
+- }
+-
+- return @replaced_packages;
+-
+-}
+-
+-sub _get_main_section {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- my $section = $self-&gt;_get_section($package, $target, $user_context, $app_context);
+- my ($main_section) = $section =~ m,^([^/]+),;
+- $main_section
+-}
+-
+-sub _get_section {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+- my $name = $package-&gt;get_name();
+- my $cname = $package-&gt;get_canonical_name();
+- my $version = $package-&gt;get_version();
+- my $release = $package-&gt;get_release();
+- my $section = $user_context-&gt;{section};
+- my $media = $self-&gt;_get_media_config($target);
+- my $arch = $package-&gt;get_arch();
+- my $file = $package-&gt;as_file();
+- $file =~ s,/+,/,g; # unneeded?
+- # FIXME: use $self-&gt;get_arch()
+- $arch = $self-&gt;{_noarch} if $arch eq 'noarch';
+- $arch = $translate_arch{$arch} || $arch;
+-
+- if (!$section) {
+- $section = $self-&gt;{packages}{$file}{section};
+- print &quot;Section undefined, repository says it is '$section' for '$file'\n&quot; if $self-&gt;{_verbose};
+- }
+- if ($section &amp;&amp; $section !~ /debug_/ &amp;&amp; $package-&gt;is_debug()) {
+- $section = &quot;debug_$section&quot;
+- }
+-
+- # if have section already, check if it exists, and may return immediately
+- if ($section) {
+- print &quot;Using requested section $section\n&quot;;
+- if ($media-&gt;{$arch}{$section}) {
+- return $section
+- } else {
+- die &quot;FATAL youri: unknown section $section for target $target for arch $arch\n&quot;
+- }
+- }
+- # else, try to find section automatically
+-
+- # pattern for search of src package with specific version-release,
+- # should be searched first, because we prefer to find the precise
+- # section a package is already in
+- my $specific_source_pattern = PACKAGE_CLASS-&gt;get_pattern(
+- $cname,
+- $version,
+- $release,
+- 'src'
+- );
+-
+- my $source_pattern = PACKAGE_CLASS-&gt;get_pattern(
+- $cname,
+- undef,
+- undef,
+- 'src'
+- );
+-
+- # if a media has no source media configured, or if it is a debug
+- # package, we search in binary media
+-
+- # pattern for search when a binary media has no src media configured
+- my $specific_binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
+- $name,
+- $version,
+- $release,
+- $arch
+- );
+-
+- # last resort pattern: previous existing binary packages
+- my $binary_pattern = PACKAGE_CLASS-&gt;get_pattern(
+- $name,
+- undef,
+- undef,
+- $arch
+- );
+-
+- # first try to find section for the specific version, as it is possibly already there;
+- # this is the case for when called in Youri::Submit::Action::Archive, to find the
+- # section the package got installed
+- print &quot;Looking for package $name with version $version-$release\n&quot;;
+- foreach my $m (keys %{$media-&gt;{$arch}}) {
+- print &quot; .. section '$m' path '&quot;.$media-&gt;{$arch}{$m}.&quot;'\n&quot; if $self-&gt;{_verbose};
+- # - prefer source for non-debug packages, use binary if there is no source media configured
+- # - debug packages must be searched in binary medias, due to their
+- # src section != binary section; NOTE: should/need we search in
+- # src medias and add the 'debug_' prefix?
+- if (!$package-&gt;is_debug() &amp;&amp; $media-&gt;{src}{$m}) {
+- next unless $self-&gt;get_files('', $media-&gt;{src}{$m}, $specific_source_pattern);
+- } else {
+- next unless $self-&gt;get_files('', $media-&gt;{$arch}{$m}, $specific_binary_pattern);
+- }
+- $section = $m;
+- last;
+- }
+-
+- # if still not found, try finding any version of the package in a
+- # /release subsection (safe default: /release is default for cooker,
+- # should be locked for released distros, and we don't risk wrongly
+- # choosing /backports, /testing, or /updates);
+- # this is the case for when called at submit, to find the section where
+- # the package already resides
+- if (!$section) {
+- # debug packages should be found by previous specific version search
+- # NOTE: as above, should/need we search here and add the 'debug_' prefix?
+- # ... probably... as at least mdv-youri-submit-force will process debug packages
+- if ($package-&gt;is_debug() &amp;&amp; $self-&gt;{_verbose}) {
+- print &quot;Warning: debug package $name with version $version-$release not found.\n&quot;;
+- }
+-
+- print &quot;Warning: Looking for any section with a package $name of any version\n&quot;;
+- foreach my $m (keys %{$media-&gt;{$arch}}) {
+- print &quot; .. section '$m' path '&quot;.$media-&gt;{$arch}{$m}.&quot;'\n&quot; if $self-&gt;{_verbose};
+- # NOTE: !$package-&gt;is_debug() test is here to prevent when above FATAL error is removed
+- next if $m !~ /release/ || ($m =~ /debug/ &amp;&amp; !$package-&gt;is_debug());
+- # - prefer source
+- if ($media-&gt;{src}{$m}) {
+- next unless $self-&gt;get_files('', $media-&gt;{src}{$m}, $source_pattern);
+- } else {
+- next unless $self-&gt;get_files('', $media-&gt;{$arch}{$m}, $binary_pattern);
+- }
+- $section = $m;
+- last;
+- }
+- }
+-
+- # FIXME: doing this here is wrong; this way the caller can never know if
+- # a section was actually found or not; should return undef and let the
+- # caller set a default (Note: IIRC PLF|Zarb has this right, see there) -spuk
+- print STDERR &quot;Warning: Can't guess destination: section missing, defaulting to contrib/release\n&quot; unless $section;
+- $section ||= 'contrib/release';
+-
+- # next time we don't need to search everything again
+- $self-&gt;{packages}{$file}{section} = $section;
+-
+- print &quot;Section is '$section'.\n&quot;;
+-
+- return $section;
+-}
+-
+-sub get_upload_newer_revisions {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+- my $arch = $package-&gt;get_arch();
+- my $name = $package-&gt;get_full_name;
+- $name =~ s/^\@\d+://;
+- my $pattern = $self-&gt;get_package_class()-&gt;get_pattern($package-&gt;get_name(), undef, undef, $arch);
+- my $media = $self-&gt;_get_media_config($target);
+- my @packages;
+- foreach my $state (@{$self-&gt;{_upload_state}}) {
+- foreach my $m (keys %{$media-&gt;{$arch}}) {
+- my $path = &quot;$self-&gt;{_upload_root}/$state/$target/$m&quot;;
+- print &quot;Looking for package $package revisions for $target in $path (pattern $pattern)\n&quot; if $self-&gt;{_verbose};
+- find(
+- sub {
+- s/\d{14}\.[^.]*\.[^.]*\.\d+_//;
+- s/^\@\d+://;
+- return if ! /^$pattern/;
+- return if /\.info$/;
+- print &quot;Find $_\n&quot;;
+- push @packages, $File::Find::name if $package-&gt;check_ranges_compatibility(&quot;== $name&quot;, &quot;&lt; $_&quot;)
+- }, $path);
+- }
+- }
+- return
+- @packages;
+-}
+-
+-sub package_in_svn {
+- my ($self, $srpm_name) = @_;
+- my $ctx = new SVN::Client(
+- auth =&gt; [SVN::Client::get_simple_provider(),
+- SVN::Client::get_simple_prompt_provider(\&amp;simple_prompt,2),
+- SVN::Client::get_username_provider()]
+- );
+-
+- my $svn_entry = $ctx-&gt;ls(&quot;$self-&gt;{_svn}/$srpm_name&quot;, 'HEAD', 0);
+- if ($svn_entry) {
+- print &quot;Package $srpm_name is in the SVN\n&quot;;
+- return 1
+- }
+-}
+-
+-sub get_svn_url {
+- my ($self) = @_;
+- $self-&gt;{_svn}
+-}
+-
+-sub get_revisions {
+- my ($self, $package, $target, $user_context, $app_context, $filter) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+- print &quot;Looking for package $package revisions for $target\n&quot; if $self-&gt;{_verbose} &gt; 0;
+-
+- my $arch = $app_context-&gt;{arch} || $user_context-&gt;{arch} || $package-&gt;get_arch();
+- my $media_arch = $arch eq 'noarch' ? $self-&gt;{_noarch} : $arch;
+- my $path = $arch eq 'src' ? &quot;$target/SRPMS/&quot; : &quot;$target/$media_arch/media&quot;;
+- my $media = $self-&gt;_get_section($package, $target, $user_context, $app_context);
+- my $name = $package-&gt;get_name();
+- my @packages = map { $self-&gt;get_package_class()-&gt;new(file =&gt; $_) }
+- $self-&gt;get_files(
+- $self-&gt;{_install_root},
+- &quot;$path/$media&quot;,
+- $self-&gt;get_package_class()-&gt;get_pattern(
+- $name,
+- undef,
+- undef,
+- $package-&gt;get_arch(),
+- )
+- );
+-
+- @packages = grep { $filter-&gt;($_) } @packages if $filter;
+-
+- return
+- sort { $b-&gt;compare($a) } # sort by revision order
+- @packages;
+-}
+-
+-sub reject {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+-
+-
+-}
+-
+-sub get_archive_dir {
+- my ($self, $package, $target, $user_context, $app_context) = @_;
+- croak &quot;Not a class method&quot; unless ref $self;
+-
+- return
+- $self-&gt;{_archive_root}
+-}
+-
+-
+-# 20060801 warly
+-#
+-# Upload steps
+-# SRPMS are uploaded in /home/mandrake/uploads/todo/$target/$media/group_id
+-#
+-#
+-#
+-
+-=head1 COPYRIGHT AND LICENSE
+-
+-Copyright (C) 2002-2006, YOURI project
+-
+-This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+-
+-=cut
+-
+-1;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001564.html">[Mageia-sysadm] [217] remove Mandriva_upload_pre.pm as it seems to be obsolete and not used
+</A></li>
+ <LI>Next message: <A HREF="001566.html">[Mageia-sysadm] [219] default section is now core/release instead of contrib/release
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1565">[ date ]</a>
+ <a href="thread.html#1565">[ thread ]</a>
+ <a href="subject.html#1565">[ subject ]</a>
+ <a href="author.html#1565">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001566.html b/zarb-ml/mageia-sysadm/2011-January/001566.html
new file mode 100644
index 000000000..81bf115b8
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001566.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [219] default section is now core/release instead of contrib/release
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B219%5D%20default%20section%20is%20now%20core/release%20instead%0A%09of%20contrib/release&In-Reply-To=%3C20110106021602.F15DC419C8%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001565.html">
+ <LINK REL="Next" HREF="001567.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [219] default section is now core/release instead of contrib/release</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B219%5D%20default%20section%20is%20now%20core/release%20instead%0A%09of%20contrib/release&In-Reply-To=%3C20110106021602.F15DC419C8%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [219] default section is now core/release instead of contrib/release">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:16:02 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001565.html">[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm
+</A></li>
+ <LI>Next message: <A HREF="001567.html">[Mageia-sysadm] [220] mdv-youri-core version 0.9.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1566">[ date ]</a>
+ <a href="thread.html#1566">[ thread ]</a>
+ <a href="subject.html#1566">[ subject ]</a>
+ <a href="author.html#1566">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 219
+Author: boklm
+Date: 2011-01-06 03:16:02 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+default section is now core/release instead of contrib/release
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+
+Modified: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 02:12:24 UTC (rev 218)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 02:16:02 UTC (rev 219)
+@@ -423,8 +423,8 @@
+ # FIXME: doing this here is wrong; this way the caller can never know if
+ # a section was actually found or not; should return undef and let the
+ # caller set a default (Note: IIRC PLF|Zarb has this right, see there) -spuk
+- print STDERR &quot;Warning: Can't guess destination: section missing, defaulting to contrib/release\n&quot; unless $section;
+- $section ||= 'contrib/release';
++ print STDERR &quot;Warning: Can't guess destination: section missing, defaulting to core/release\n&quot; unless $section;
++ $section ||= 'core/release';
+
+ # next time we don't need to search everything again
+ $self-&gt;{packages}{$file}{section} = $section;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/fee6348e/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001565.html">[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm
+</A></li>
+ <LI>Next message: <A HREF="001567.html">[Mageia-sysadm] [220] mdv-youri-core version 0.9.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1566">[ date ]</a>
+ <a href="thread.html#1566">[ thread ]</a>
+ <a href="subject.html#1566">[ subject ]</a>
+ <a href="author.html#1566">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001567.html b/zarb-ml/mageia-sysadm/2011-January/001567.html
new file mode 100644
index 000000000..980a50d01
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001567.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [220] mdv-youri-core version 0.9.1
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B220%5D%20mdv-youri-core%20version%200.9.1&In-Reply-To=%3C20110106022943.27C9B419CC%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001566.html">
+ <LINK REL="Next" HREF="001568.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [220] mdv-youri-core version 0.9.1</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B220%5D%20mdv-youri-core%20version%200.9.1&In-Reply-To=%3C20110106022943.27C9B419CC%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [220] mdv-youri-core version 0.9.1">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:29:43 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001566.html">[Mageia-sysadm] [219] default section is now core/release instead of contrib/release
+</A></li>
+ <LI>Next message: <A HREF="001568.html">[Mageia-sysadm] [221] mdv-youri-core version 0.9.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1567">[ date ]</a>
+ <a href="thread.html#1567">[ thread ]</a>
+ <a href="subject.html#1567">[ subject ]</a>
+ <a href="author.html#1567">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 220
+Author: boklm
+Date: 2011-01-06 03:29:42 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+mdv-youri-core version 0.9.1
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/Makefile.PL
+
+Modified: build_system/mdv-youri-core/trunk/Makefile.PL
+===================================================================
+--- build_system/mdv-youri-core/trunk/Makefile.PL 2011-01-06 02:16:02 UTC (rev 219)
++++ build_system/mdv-youri-core/trunk/Makefile.PL 2011-01-06 02:29:42 UTC (rev 220)
+@@ -3,7 +3,7 @@
+
+ WriteMakefile(
+ NAME =&gt; 'youri-core',
+- VERSION =&gt; 0.9,
++ VERSION =&gt; 0.9.1,
+ AUTHOR =&gt; 'Youri project &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">youri at zarb.org</A>&gt;',
+ PREREQ_PM =&gt; {
+ 'AppConfig' =&gt; 0,
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/3e0285a2/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001566.html">[Mageia-sysadm] [219] default section is now core/release instead of contrib/release
+</A></li>
+ <LI>Next message: <A HREF="001568.html">[Mageia-sysadm] [221] mdv-youri-core version 0.9.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1567">[ date ]</a>
+ <a href="thread.html#1567">[ thread ]</a>
+ <a href="subject.html#1567">[ subject ]</a>
+ <a href="author.html#1567">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001568.html b/zarb-ml/mageia-sysadm/2011-January/001568.html
new file mode 100644
index 000000000..7c67f9e80
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001568.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [221] mdv-youri-core version 0.9.1
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B221%5D%20mdv-youri-core%20version%200.9.1&In-Reply-To=%3C20110106023055.9A0B1419CC%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001567.html">
+ <LINK REL="Next" HREF="001569.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [221] mdv-youri-core version 0.9.1</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B221%5D%20mdv-youri-core%20version%200.9.1&In-Reply-To=%3C20110106023055.9A0B1419CC%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [221] mdv-youri-core version 0.9.1">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:30:55 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001567.html">[Mageia-sysadm] [220] mdv-youri-core version 0.9.1
+</A></li>
+ <LI>Next message: <A HREF="001569.html">[Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1568">[ date ]</a>
+ <a href="thread.html#1568">[ thread ]</a>
+ <a href="subject.html#1568">[ subject ]</a>
+ <a href="author.html#1568">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 221
+Author: boklm
+Date: 2011-01-06 03:30:55 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+mdv-youri-core version 0.9.1
+
+Added Paths:
+-----------
+ build_system/mdv-youri-core/tags/0.9.1/
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/9c67899a/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001567.html">[Mageia-sysadm] [220] mdv-youri-core version 0.9.1
+</A></li>
+ <LI>Next message: <A HREF="001569.html">[Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1568">[ date ]</a>
+ <a href="thread.html#1568">[ thread ]</a>
+ <a href="subject.html#1568">[ subject ]</a>
+ <a href="author.html#1568">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001569.html b/zarb-ml/mageia-sysadm/2011-January/001569.html
new file mode 100644
index 000000000..c3b36e9a8
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001569.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B674%5D%20Mandriva_upload%20renamed%20to%20Mageia_upload&In-Reply-To=%3C20110106023957.2EFCB419CD%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001568.html">
+ <LINK REL="Next" HREF="001570.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B674%5D%20Mandriva_upload%20renamed%20to%20Mageia_upload&In-Reply-To=%3C20110106023957.2EFCB419CD%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:39:57 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001568.html">[Mageia-sysadm] [221] mdv-youri-core version 0.9.1
+</A></li>
+ <LI>Next message: <A HREF="001570.html">[Mageia-sysadm] [675] - add topics to sympa mailling list
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1569">[ date ]</a>
+ <a href="thread.html#1569">[ thread ]</a>
+ <a href="subject.html#1569">[ subject ]</a>
+ <a href="author.html#1569">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 674
+Author: boklm
+Date: 2011-01-06 03:39:56 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+Mandriva_upload renamed to Mageia_upload
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/submit-todo.conf
+
+Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 01:33:54 UTC (rev 673)
++++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 02:39:56 UTC (rev 674)
+@@ -6,7 +6,7 @@
+
+ # repository declaration
+ repository:
+- class: Youri::Repository::Mandriva_upload
++ class: Youri::Repository::Mageia_upload
+ options:
+ install_root: &lt;%= repository_root %&gt;/distrib
+ upload_root: ${home}/uploads/
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/011a0e3e/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001568.html">[Mageia-sysadm] [221] mdv-youri-core version 0.9.1
+</A></li>
+ <LI>Next message: <A HREF="001570.html">[Mageia-sysadm] [675] - add topics to sympa mailling list
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1569">[ date ]</a>
+ <a href="thread.html#1569">[ thread ]</a>
+ <a href="subject.html#1569">[ subject ]</a>
+ <a href="author.html#1569">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001570.html b/zarb-ml/mageia-sysadm/2011-January/001570.html
new file mode 100644
index 000000000..aee778e50
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001570.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [675] - add topics to sympa mailling list
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B675%5D%20-%20add%20topics%20to%20sympa%20mailling%20list&In-Reply-To=%3C20110106024306.2BD9E419CE%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001569.html">
+ <LINK REL="Next" HREF="001571.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [675] - add topics to sympa mailling list</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B675%5D%20-%20add%20topics%20to%20sympa%20mailling%20list&In-Reply-To=%3C20110106024306.2BD9E419CE%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [675] - add topics to sympa mailling list">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 03:43:06 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001569.html">[Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload
+</A></li>
+ <LI>Next message: <A HREF="001571.html">[Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1570">[ date ]</a>
+ <a href="thread.html#1570">[ thread ]</a>
+ <a href="subject.html#1570">[ subject ]</a>
+ <a href="author.html#1570">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 675
+Author: misc
+Date: 2011-01-06 03:43:05 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- add topics to sympa mailling list
+
+Modified Paths:
+--------------
+ puppet/modules/sympa/manifests/init.pp
+
+Modified: puppet/modules/sympa/manifests/init.pp
+===================================================================
+--- puppet/modules/sympa/manifests/init.pp 2011-01-06 02:39:56 UTC (rev 674)
++++ puppet/modules/sympa/manifests/init.pp 2011-01-06 02:43:05 UTC (rev 675)
+@@ -239,6 +239,7 @@
+ subject =&gt; $subject,
+ # profile =&gt; &quot;public&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ }
+ }
+
+@@ -250,6 +251,7 @@
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ reply_to =&gt; $reply_to,
+ sender_ldap_group =&gt; $sender_ldap_group,
+ }
+@@ -263,6 +265,7 @@
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ reply_to =&gt; $reply_to,
+ sender_email =&gt; $sender_email,
+ }
+@@ -274,6 +277,7 @@
+ list{ $name:
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
++ topics =&gt; $topics,
+ language =&gt; $language,
+ subscriber_ldap_group =&gt; $subscriber_ldap_group,
+ sender_ldap_group =&gt; $subscriber_ldap_group,
+@@ -286,6 +290,7 @@
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ subscriber_ldap_group =&gt; $subscriber_ldap_group,
+ sender_ldap_group =&gt; $subscriber_ldap_group,
+ }
+@@ -297,6 +302,7 @@
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ subscriber_ldap_group =&gt; $subscriber_ldap_group,
+ sender_ldap_group =&gt; $subscriber_ldap_group,
+ public_archive =&gt; false,
+@@ -311,6 +317,7 @@
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ subscriber_ldap_group =&gt; $subscriber_ldap_group,
+ public_archive =&gt; false,
+ }
+@@ -323,6 +330,7 @@
+ subject =&gt; $subject,
+ profile =&gt; &quot;&quot;,
+ language =&gt; $language,
++ topics =&gt; $topics,
+ subscriber_ldap_group =&gt; $subscriber_ldap_group,
+ sender_email =&gt; $sender_email,
+ public_archive =&gt; false,
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/a249187c/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001569.html">[Mageia-sysadm] [674] Mandriva_upload renamed to Mageia_upload
+</A></li>
+ <LI>Next message: <A HREF="001571.html">[Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1570">[ date ]</a>
+ <a href="thread.html#1570">[ thread ]</a>
+ <a href="subject.html#1570">[ subject ]</a>
+ <a href="author.html#1570">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001571.html b/zarb-ml/mageia-sysadm/2011-January/001571.html
new file mode 100644
index 000000000..7f04b787e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001571.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B676%5D%20manage%20sysadmin%20svn%20with%20puppet%20%28%20eat%20our%20own%0A%09dogfood%20%29&In-Reply-To=%3C20110106030445.4AB3A418D8%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001570.html">
+ <LINK REL="Next" HREF="001572.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B676%5D%20manage%20sysadmin%20svn%20with%20puppet%20%28%20eat%20our%20own%0A%09dogfood%20%29&In-Reply-To=%3C20110106030445.4AB3A418D8%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 04:04:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001570.html">[Mageia-sysadm] [675] - add topics to sympa mailling list
+</A></li>
+ <LI>Next message: <A HREF="001572.html">[Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1571">[ date ]</a>
+ <a href="thread.html#1571">[ thread ]</a>
+ <a href="subject.html#1571">[ subject ]</a>
+ <a href="author.html#1571">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 676
+Author: misc
+Date: 2011-01-06 04:04:45 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+manage sysadmin svn with puppet ( eat our own dogfood )
+
+Modified Paths:
+--------------
+ puppet/manifests/nodes.pp
+
+Modified: puppet/manifests/nodes.pp
+===================================================================
+--- puppet/manifests/nodes.pp 2011-01-06 02:43:05 UTC (rev 675)
++++ puppet/manifests/nodes.pp 2011-01-06 03:04:45 UTC (rev 676)
+@@ -24,6 +24,12 @@
+ include restrictshell::allow_svn
+ include restrictshell::allow_pkgsubmit
+
++ subversion::repository { &quot;/svn/adm/&quot;:
++ group =&gt; &quot;mga-sysadmin&quot;,
++ commit_mail =&gt; &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>&quot;,
++ syntax_check =&gt; ['check_puppet_templates','check_puppet'],
++ }
++
+ subversion::snapshot { &quot;/etc/puppet&quot;:
+ source =&gt; &quot;<A HREF="svn://svn.mageia.org/svn/adm/puppet/">svn://svn.mageia.org/svn/adm/puppet/</A>&quot;
+ }
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/a23b19f8/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001570.html">[Mageia-sysadm] [675] - add topics to sympa mailling list
+</A></li>
+ <LI>Next message: <A HREF="001572.html">[Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1571">[ date ]</a>
+ <a href="thread.html#1571">[ thread ]</a>
+ <a href="subject.html#1571">[ subject ]</a>
+ <a href="author.html#1571">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001572.html b/zarb-ml/mageia-sysadm/2011-January/001572.html
new file mode 100644
index 000000000..f62514359
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001572.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B222%5D%20sync%20the%20name%20of%20the%20package%20with%20the%0A%09filename%2C%20and%20correct%20the%20pod&In-Reply-To=%3C20110106031210.EA128419D2%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001571.html">
+ <LINK REL="Next" HREF="001573.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B222%5D%20sync%20the%20name%20of%20the%20package%20with%20the%0A%09filename%2C%20and%20correct%20the%20pod&In-Reply-To=%3C20110106031210.EA128419D2%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 04:12:10 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001571.html">[Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )
+</A></li>
+ <LI>Next message: <A HREF="001573.html">[Mageia-sysadm] [223] - fix copyright, based on svn log.
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1572">[ date ]</a>
+ <a href="thread.html#1572">[ thread ]</a>
+ <a href="subject.html#1572">[ subject ]</a>
+ <a href="author.html#1572">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 222
+Author: misc
+Date: 2011-01-06 04:12:10 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+sync the name of the package with the filename, and correct the pod
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+
+Modified: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 02:30:55 UTC (rev 221)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 03:12:10 UTC (rev 222)
+@@ -1,13 +1,13 @@
+ # $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume $
+-package Youri::Repository::Mandriva_upload;
++package Youri::Repository::Mageia_upload;
+
+ =head1 NAME
+
+-Youri::Repository::PLF - PLF repository implementation
++Youri::Repository::Mageia_upload - Mageia repository implementation, on upload phase
+
+ =head1 DESCRIPTION
+
+-This module implements PLF repository.
++This module implements Mageia repository, for the upload phase
+
+ =cut
+
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/de713a1c/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001571.html">[Mageia-sysadm] [676] manage sysadmin svn with puppet ( eat our own dogfood )
+</A></li>
+ <LI>Next message: <A HREF="001573.html">[Mageia-sysadm] [223] - fix copyright, based on svn log.
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1572">[ date ]</a>
+ <a href="thread.html#1572">[ thread ]</a>
+ <a href="subject.html#1572">[ subject ]</a>
+ <a href="author.html#1572">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001573.html b/zarb-ml/mageia-sysadm/2011-January/001573.html
new file mode 100644
index 000000000..a539c7888
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001573.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [223] - fix copyright, based on svn log.
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B223%5D%20-%20fix%20copyright%2C%20based%20on%20svn%20log.&In-Reply-To=%3C20110106031834.73D10419D4%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001572.html">
+ <LINK REL="Next" HREF="001574.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [223] - fix copyright, based on svn log.</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B223%5D%20-%20fix%20copyright%2C%20based%20on%20svn%20log.&In-Reply-To=%3C20110106031834.73D10419D4%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [223] - fix copyright, based on svn log.">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 04:18:34 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001572.html">[Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod
+</A></li>
+ <LI>Next message: <A HREF="001574.html">[Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1573">[ date ]</a>
+ <a href="thread.html#1573">[ thread ]</a>
+ <a href="subject.html#1573">[ subject ]</a>
+ <a href="author.html#1573">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 223
+Author: misc
+Date: 2011-01-06 04:18:34 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+- fix copyright, based on svn log. Mandriva didn't care much, we do.
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+
+Modified: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 03:12:10 UTC (rev 222)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 03:18:34 UTC (rev 223)
+@@ -538,6 +538,8 @@
+ =head1 COPYRIGHT AND LICENSE
+
+ Copyright (C) 2002-2006, YOURI project
++Copyright (C) 2006,2007,2009 Mandriva
++Copyright (C) 2011 Nicolas Vigier, Michael Scherer
+
+ This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/9fc64239/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001572.html">[Mageia-sysadm] [222] sync the name of the package with the filename, and correct the pod
+</A></li>
+ <LI>Next message: <A HREF="001574.html">[Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1573">[ date ]</a>
+ <a href="thread.html#1573">[ thread ]</a>
+ <a href="subject.html#1573">[ subject ]</a>
+ <a href="author.html#1573">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001574.html b/zarb-ml/mageia-sysadm/2011-January/001574.html
new file mode 100644
index 000000000..47b851650
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001574.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B224%5D%20use%20hostname%20function%20from%20perl%20core%20module%0A%20Sys%3A%3AHostname%20%28%20and%20so%20avoid%201%20useless%20fork%20%29&In-Reply-To=%3C20110106032527.179C5419D8%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001573.html">
+ <LINK REL="Next" HREF="001575.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B224%5D%20use%20hostname%20function%20from%20perl%20core%20module%0A%20Sys%3A%3AHostname%20%28%20and%20so%20avoid%201%20useless%20fork%20%29&In-Reply-To=%3C20110106032527.179C5419D8%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 04:25:27 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001573.html">[Mageia-sysadm] [223] - fix copyright, based on svn log.
+</A></li>
+ <LI>Next message: <A HREF="001575.html">[Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1574">[ date ]</a>
+ <a href="thread.html#1574">[ thread ]</a>
+ <a href="subject.html#1574">[ subject ]</a>
+ <a href="author.html#1574">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 224
+Author: misc
+Date: 2011-01-06 04:25:26 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )
+
+Modified Paths:
+--------------
+ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+
+Modified: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 03:18:34 UTC (rev 223)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm 2011-01-06 03:25:26 UTC (rev 224)
+@@ -19,6 +19,7 @@
+ use base qw/Youri::Repository/;
+ use MDV::Distribconf::Build;
+ use SVN::Client;
++use Sys::Hostname;
+
+ use constant {
+ PACKAGE_CLASS =&gt; 'Youri::Package::URPM',
+@@ -70,8 +71,7 @@
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
+ $year+=1900;
+ $mon++;
+- my $hostname = `hostname`;
+- my ($host) = $hostname =~ /([^.]*)/;
++ my ($host) = hostname =~ /([^.]*)/;
+ sprintf &quot;$year%02d%02d%02d%02d%02d.$user.$host.${$}_&quot;, $mon, $mday, $hour, $min, $sec;
+ }
+
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/bc32c1f4/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001573.html">[Mageia-sysadm] [223] - fix copyright, based on svn log.
+</A></li>
+ <LI>Next message: <A HREF="001575.html">[Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1574">[ date ]</a>
+ <a href="thread.html#1574">[ thread ]</a>
+ <a href="subject.html#1574">[ subject ]</a>
+ <a href="author.html#1574">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001575.html b/zarb-ml/mageia-sysadm/2011-January/001575.html
new file mode 100644
index 000000000..549e6df60
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001575.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Fwd%3A%20Re%3A%20Serveur%20Nfrance%20mlo/mageia&In-Reply-To=%3C4D257F23.7060903%40vilarem.net%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001574.html">
+ <LINK REL="Next" HREF="001576.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia</H1>
+ <B>Ma&#226;t</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Fwd%3A%20Re%3A%20Serveur%20Nfrance%20mlo/mageia&In-Reply-To=%3C4D257F23.7060903%40vilarem.net%3E"
+ TITLE="[Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia">maat-ml at vilarem.net
+ </A><BR>
+ <I>Thu Jan 6 09:36:51 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001574.html">[Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )
+</A></li>
+ <LI>Next message: <A HREF="001576.html">[Mageia-sysadm] Serveur Nfrance mlo/mageia
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1575">[ date ]</a>
+ <a href="thread.html#1575">[ thread ]</a>
+ <a href="subject.html#1575">[ subject ]</a>
+ <a href="author.html#1575">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Fyi
+
+(Sorry for Z order in answers)
+
+Ma&#226;t
+
+
+
+-------- Message original --------
+Sujet: Re: Serveur Nfrance mlo/mageia
+Date : Wed, 5 Jan 2011 19:35:51 -0500
+De : Patrick Dubeau &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">daaxwizeman at gmail.com</A>&gt;
+Pour : Ma&#226;t &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A>&gt;
+
+
+
+Salut Maat,
+
+Je te souhaite aussi une bonne ann&#233;e 2011.
+
+D&#233;sol&#233; de ne pas avoir fait un retour plus rapidement, mais je suis &#224; la bourre solide ces derniers temps.... Bref, voil&#224; l'&#233;tat de situation :
+
+- la solution choisie est l'hyperviseur xen (l'h&#244;te est une opensuse et nous avons voulu demeurer avec une solution int&#233;gr&#233;e)
+- nous avons fait quelques tests, &#231;a semble ok
+- j'ai fait quelques tests sur la cr&#233;ation de machines virtuelles, mais j'ai des soucis de config, mais &#231;a devrait rentrer dans l'ordre
+- tu as gard&#233; copie de ce que tu as mis sur le serveur n'est-ce pas ?
+- encore quelques tests et config &#224; faire, et ce week-end, les machines virtuelles devraient &#234;tre cr&#233;&#233;es
+- xkomodor sera en vacances &#224; partir de ce week-end et me donnera un coup de main pour finaliser le tout
+
+Dans le courant du week-end, je vous donnerai des d&#233;tails concernant l'acc&#232;s &#224; la vm. Je ferai une install basique d'un Mandriva 2010.1 et je vous laisserez la configurer comme vous le voulez bien s&#251;r.
+
+Ce qui demeure &#224; faire :
+
+- un haproxy en mode tcp pour le ssh (et les autre services) et mode http (pour le reverse proxy)
+- une mta qui fera smart host des vms.
+- un cache dns
+
+J'esp&#232;re que l'on pourra tout boucler &#231;a dans la semaine &#224; venir. Sous toutes r&#233;serves, ce pourrait &#234;tre finalis&#233; pour la semaine 3.
+
+Si tu as d'autres interrogations n'h&#233;site pas. Il se pourrait qu'il y ait des d&#233;lais dans ma r&#233;ponse, mais elle viendra.
+
+Amicalement, Patrick alias DaaX.
+
+
+Le 5 janvier 2011 14:45, Ma&#226;t &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A> &lt;mailto:<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A>&gt;&gt; a &#233;crit :
+
+ Salut Daax,
+
+ Tout d'abord les choses importantes :
+
+ Je te souhaite une bonne ann&#233;e 2011, une ann&#233;e de bonne sant&#233;, de joie sans nuages et de r&#233;ussite sur tous les plans.
+
+ Et puis le retour aux choses plus terre-&#224;-terre :
+
+ Je prends contact avec toi pour faire un ptit point d'avancement &#224; propos du serveur... savoir ce qui est fait, ce qui reste &#224; faire, qui est sens&#233; faire toussa...
+
+ Je collecte les diverses infos et je vous publie &#224; tous une synth&#232;se pour qu'on d&#233;marre l'ann&#233;e au clair toussa :)
+
+ Amicalement,
+ Ma&#226;t [ aka Pascal Vilarem ]
+
+
+--
+Patrick (alias DaaX - Webmaster MLO - <A HREF="http://www.mandrivalinux-online.org">http://www.mandrivalinux-online.org</A>)
+
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/95b289bc/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001574.html">[Mageia-sysadm] [224] use hostname function from perl core module Sys::Hostname ( and so avoid 1 useless fork )
+</A></li>
+ <LI>Next message: <A HREF="001576.html">[Mageia-sysadm] Serveur Nfrance mlo/mageia
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1575">[ date ]</a>
+ <a href="thread.html#1575">[ thread ]</a>
+ <a href="subject.html#1575">[ subject ]</a>
+ <a href="author.html#1575">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001576.html b/zarb-ml/mageia-sysadm/2011-January/001576.html
new file mode 100644
index 000000000..130b3293f
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001576.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Serveur Nfrance mlo/mageia
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Serveur%20Nfrance%20mlo/mageia&In-Reply-To=%3CAANLkTimyaEo-xbP83D%3DPGpor_nugxQKjPj8djRwazzL%3D%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001575.html">
+ <LINK REL="Next" HREF="001577.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Serveur Nfrance mlo/mageia</H1>
+ <B>Anne nicolas</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Serveur%20Nfrance%20mlo/mageia&In-Reply-To=%3CAANLkTimyaEo-xbP83D%3DPGpor_nugxQKjPj8djRwazzL%3D%40mail.gmail.com%3E"
+ TITLE="[Mageia-sysadm] Serveur Nfrance mlo/mageia">ennael1 at gmail.com
+ </A><BR>
+ <I>Thu Jan 6 10:49:12 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001575.html">[Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia
+</A></li>
+ <LI>Next message: <A HREF="001577.html">[Mageia-sysadm] Hardware
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1576">[ date ]</a>
+ <a href="thread.html#1576">[ thread ]</a>
+ <a href="subject.html#1576">[ subject ]</a>
+ <a href="author.html#1576">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le 6 janvier 2011 09:36, Ma&#226;t &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A>&gt; a &#233;crit :
+
+&gt;<i> Fyi
+</I>&gt;<i>
+</I>&gt;<i> (Sorry for Z order in answers)
+</I>&gt;<i>
+</I>
+Thanks for theses news
+
+We *really* ned to move forward on this. So this WE is *really* the last
+date we can afford.
+
+
+&gt;<i>
+</I>&gt;<i> Ma&#226;t
+</I>&gt;<i>
+</I>&gt;<i>
+</I>&gt;<i>
+</I>&gt;<i> -------- Message original -------- Sujet: Re: Serveur Nfrance mlo/mageia Date :
+</I>&gt;<i> Wed, 5 Jan 2011 19:35:51 -0500 De : Patrick Dubeau
+</I>&gt;<i> &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">daaxwizeman at gmail.com</A>&gt; &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">daaxwizeman at gmail.com</A>&gt; Pour : Ma&#226;t
+</I>&gt;<i> &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A>&gt; &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A>&gt;
+</I>&gt;<i>
+</I>&gt;<i> Salut Maat,
+</I>&gt;<i>
+</I>&gt;<i> Je te souhaite aussi une bonne ann&#233;e 2011.
+</I>&gt;<i>
+</I>&gt;<i> D&#233;sol&#233; de ne pas avoir fait un retour plus rapidement, mais je suis &#224; la
+</I>&gt;<i> bourre solide ces derniers temps.... Bref, voil&#224; l'&#233;tat de situation :
+</I>&gt;<i>
+</I>&gt;<i> - la solution choisie est l'hyperviseur xen (l'h&#244;te est une opensuse et
+</I>&gt;<i> nous avons voulu demeurer avec une solution int&#233;gr&#233;e)
+</I>&gt;<i> - nous avons fait quelques tests, &#231;a semble ok
+</I>&gt;<i> - j'ai fait quelques tests sur la cr&#233;ation de machines virtuelles, mais
+</I>&gt;<i> j'ai des soucis de config, mais &#231;a devrait rentrer dans l'ordre
+</I>&gt;<i> - tu as gard&#233; copie de ce que tu as mis sur le serveur n'est-ce pas ?
+</I>&gt;<i> - encore quelques tests et config &#224; faire, et ce week-end, les machines
+</I>&gt;<i> virtuelles devraient &#234;tre cr&#233;&#233;es
+</I>&gt;<i> - xkomodor sera en vacances &#224; partir de ce week-end et me donnera un coup
+</I>&gt;<i> de main pour finaliser le tout
+</I>&gt;<i>
+</I>&gt;<i> Dans le courant du week-end, je vous donnerai des d&#233;tails concernant
+</I>&gt;<i> l'acc&#232;s &#224; la vm. Je ferai une install basique d'un Mandriva 2010.1 et je
+</I>&gt;<i> vous laisserez la configurer comme vous le voulez bien s&#251;r.
+</I>&gt;<i>
+</I>&gt;<i> Ce qui demeure &#224; faire :
+</I>&gt;<i>
+</I>&gt;<i> - un haproxy en mode tcp pour le ssh (et les autre services) et mode http
+</I>&gt;<i> (pour le reverse proxy)
+</I>&gt;<i> - une mta qui fera smart host des vms.
+</I>&gt;<i> - un cache dns
+</I>&gt;<i>
+</I>&gt;<i> J'esp&#232;re que l'on pourra tout boucler &#231;a dans la semaine &#224; venir. Sous
+</I>&gt;<i> toutes r&#233;serves, ce pourrait &#234;tre finalis&#233; pour la semaine 3.
+</I>&gt;<i>
+</I>&gt;<i> Si tu as d'autres interrogations n'h&#233;site pas. Il se pourrait qu'il y ait
+</I>&gt;<i> des d&#233;lais dans ma r&#233;ponse, mais elle viendra.
+</I>&gt;<i>
+</I>&gt;<i> Amicalement, Patrick alias DaaX.
+</I>&gt;<i>
+</I>&gt;<i>
+</I>&gt;<i> Le 5 janvier 2011 14:45, Ma&#226;t &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">maat-ml at vilarem.net</A>&gt; a &#233;crit :
+</I>&gt;<i>
+</I>&gt;&gt;<i> Salut Daax,
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> Tout d'abord les choses importantes :
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> Je te souhaite une bonne ann&#233;e 2011, une ann&#233;e de bonne sant&#233;, de joie
+</I>&gt;&gt;<i> sans nuages et de r&#233;ussite sur tous les plans.
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> Et puis le retour aux choses plus terre-&#224;-terre :
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> Je prends contact avec toi pour faire un ptit point d'avancement &#224; propos
+</I>&gt;&gt;<i> du serveur... savoir ce qui est fait, ce qui reste &#224; faire, qui est sens&#233;
+</I>&gt;&gt;<i> faire toussa...
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> Je collecte les diverses infos et je vous publie &#224; tous une synth&#232;se pour
+</I>&gt;&gt;<i> qu'on d&#233;marre l'ann&#233;e au clair toussa :)
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> Amicalement,
+</I>&gt;&gt;<i> Ma&#226;t [ aka Pascal Vilarem ]
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i>
+</I>&gt;<i> --
+</I>&gt;<i> Patrick (alias DaaX - Webmaster MLO - <A HREF="http://www.mandrivalinux-online.org">http://www.mandrivalinux-online.org</A>)
+</I>&gt;<i>
+</I>&gt;<i>
+</I>
+
+--
+Anne
+<A HREF="http://www.mageia.org">http://www.mageia.org</A>
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/c5f173b5/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001575.html">[Mageia-sysadm] Fwd: Re: Serveur Nfrance mlo/mageia
+</A></li>
+ <LI>Next message: <A HREF="001577.html">[Mageia-sysadm] Hardware
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1576">[ date ]</a>
+ <a href="thread.html#1576">[ thread ]</a>
+ <a href="subject.html#1576">[ subject ]</a>
+ <a href="author.html#1576">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001577.html b/zarb-ml/mageia-sysadm/2011-January/001577.html
new file mode 100644
index 000000000..3836a9b2c
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001577.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Hardware
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Hardware&In-Reply-To=%3CAANLkTinnSnxh_oGzqye5Rzp6wARUycEJCU-zrJnx7Yt3%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001576.html">
+ <LINK REL="Next" HREF="001663.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Hardware</H1>
+ <B>Anne nicolas</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Hardware&In-Reply-To=%3CAANLkTinnSnxh_oGzqye5Rzp6wARUycEJCU-zrJnx7Yt3%40mail.gmail.com%3E"
+ TITLE="[Mageia-sysadm] Hardware">ennael1 at gmail.com
+ </A><BR>
+ <I>Thu Jan 6 10:56:13 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001576.html">[Mageia-sysadm] Serveur Nfrance mlo/mageia
+</A></li>
+ <LI>Next message: <A HREF="001663.html">[Mageia-sysadm] Hardware
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1577">[ date ]</a>
+ <a href="thread.html#1577">[ thread ]</a>
+ <a href="subject.html#1577">[ subject ]</a>
+ <a href="author.html#1577">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi there
+
+Maat told me yesterday that a sysadmin on FrSAG ML is saling some
+hardware, 2 big servers (bi-xeon, quad core, 16Go ram). He is ready to
+sale it at a reasonable price. We just have to mail him about this:
+St&#233;phane Cottin &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">stephane.cottin at vixns.com</A>&gt;.
+
+Can anybody contact him to check if this could be interested for Mageia ?
+
+Cheers
+
+--
+Anne
+<A HREF="http://www.mageia.org">http://www.mageia.org</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001576.html">[Mageia-sysadm] Serveur Nfrance mlo/mageia
+</A></li>
+ <LI>Next message: <A HREF="001663.html">[Mageia-sysadm] Hardware
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1577">[ date ]</a>
+ <a href="thread.html#1577">[ thread ]</a>
+ <a href="subject.html#1577">[ subject ]</a>
+ <a href="author.html#1577">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001578.html b/zarb-ml/mageia-sysadm/2011-January/001578.html
new file mode 100644
index 000000000..a3b841318
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001578.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B225%5D%20No%20need%20to%20sudo%2C%0A%09emi%20is%20running%20with%20correct%20user%20already&In-Reply-To=%3C20110106095659.C658D41A25%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001663.html">
+ <LINK REL="Next" HREF="001579.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B225%5D%20No%20need%20to%20sudo%2C%0A%09emi%20is%20running%20with%20correct%20user%20already&In-Reply-To=%3C20110106095659.C658D41A25%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 10:56:59 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001663.html">[Mageia-sysadm] Hardware
+</A></li>
+ <LI>Next message: <A HREF="001579.html">[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1578">[ date ]</a>
+ <a href="thread.html#1578">[ thread ]</a>
+ <a href="subject.html#1578">[ subject ]</a>
+ <a href="author.html#1578">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 225
+Author: pterjan
+Date: 2011-01-06 10:56:59 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+No need to sudo, emi is running with correct user already
+
+Modified Paths:
+--------------
+ build_system/iurt/trunk/emi
+
+Modified: build_system/iurt/trunk/emi
+===================================================================
+--- build_system/iurt/trunk/emi 2011-01-06 03:25:26 UTC (rev 224)
++++ build_system/iurt/trunk/emi 2011-01-06 09:56:59 UTC (rev 225)
+@@ -221,9 +221,8 @@
+
+ $user ||= $config-&gt;{upload_user};
+
++ my $command = &quot;/usr/bin/perl -I/usr/share/mdv-youri-core/lib -I/usr/share/mdv-youri-submit/lib /usr/share/mdv-youri-submit/bin/youri-submit --verbose --config /etc/youri/submit-queue.conf --define user=$user --define prefix=$prefix --define section=$section $target @packages &amp;&gt; $done/$path/$prefix.youri&quot;;
+
+- my $command = &quot;/usr/bin/sudo -H -u $config-&gt;{upload_user} /usr/bin/perl -I/usr/share/mdv-youri-core/lib -I/usr/share/mdv-youri-submit/lib /usr/share/mdv-youri-submit/bin/youri-submit --verbose --config /etc/youri/submit-queue.conf --define user=$user --define prefix=$prefix --define section=$section $target @packages &amp;&gt; $done/$path/$prefix.youri&quot;;
+-
+ plog('DEBUG', &quot;running $command&quot;);
+ if (!system($command)) {
+ plog('INFO', &quot;upload succeeded&quot;);
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/445fa2ae/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001663.html">[Mageia-sysadm] Hardware
+</A></li>
+ <LI>Next message: <A HREF="001579.html">[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1578">[ date ]</a>
+ <a href="thread.html#1578">[ thread ]</a>
+ <a href="subject.html#1578">[ subject ]</a>
+ <a href="author.html#1578">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001579.html b/zarb-ml/mageia-sysadm/2011-January/001579.html
new file mode 100644
index 000000000..c4709e639
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001579.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B225%5D%20No%20need%20to%20sudo%2C%0A%20emi%20is%20running%20with%20correct%20user%20already&In-Reply-To=%3C1294316184.3329.1.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001578.html">
+ <LINK REL="Next" HREF="001581.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B225%5D%20No%20need%20to%20sudo%2C%0A%20emi%20is%20running%20with%20correct%20user%20already&In-Reply-To=%3C1294316184.3329.1.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 13:16:24 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001578.html">[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+</A></li>
+ <LI>Next message: <A HREF="001581.html">[Mageia-sysadm] [677] Adapt configs to Mageia mirror structure
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1579">[ date ]</a>
+ <a href="thread.html#1579">[ thread ]</a>
+ <a href="subject.html#1579">[ subject ]</a>
+ <a href="author.html#1579">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le jeudi 06 janvier 2011 &#224; 10:56 +0100, <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">root at mageia.org</A> a &#233;crit :
+&gt;<i> Revision: 225
+</I>&gt;<i> Author: pterjan
+</I>&gt;<i> Date: 2011-01-06 10:56:59 +0100 (Thu, 06 Jan 2011)
+</I>&gt;<i> Log Message:
+</I>&gt;<i> -----------
+</I>&gt;<i> No need to sudo, emi is running with correct user already
+</I>&gt;<i>
+</I>&gt;<i> Modified Paths:
+</I>&gt;<i> --------------
+</I>&gt;<i> build_system/iurt/trunk/emi
+</I>&gt;<i>
+</I>&gt;<i> Modified: build_system/iurt/trunk/emi
+</I>&gt;<i> ===================================================================
+</I>&gt;<i> --- build_system/iurt/trunk/emi 2011-01-06 03:25:26 UTC (rev 224)
+</I>&gt;<i> +++ build_system/iurt/trunk/emi 2011-01-06 09:56:59 UTC (rev 225)
+</I>&gt;<i> @@ -221,9 +221,8 @@
+</I>&gt;<i>
+</I>&gt;<i> $user ||= $config-&gt;{upload_user};
+</I>&gt;<i>
+</I>&gt;<i> + my $command = &quot;/usr/bin/perl -I/usr/share/mdv-youri-core/lib
+</I>&gt;<i> -I/usr/share/mdv-youri-submit/lib /usr/share/mdv-youri-submit/bin/youri-submit
+</I>
+What about later simply placing the library in the default perl path to
+avoid this ? ( ie, the requirement of adding -I everywhere )
+
+&gt;<i> --verbose --config /etc/youri/submit-queue.conf --define user=$user --define prefix=$prefix
+</I>&gt;<i> --define section=$section $target @packages &amp;&gt; $done/$path/$prefix.youri&quot;;
+</I>&gt;<i>
+</I>--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001578.html">[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+</A></li>
+ <LI>Next message: <A HREF="001581.html">[Mageia-sysadm] [677] Adapt configs to Mageia mirror structure
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1579">[ date ]</a>
+ <a href="thread.html#1579">[ thread ]</a>
+ <a href="subject.html#1579">[ subject ]</a>
+ <a href="author.html#1579">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001580.html b/zarb-ml/mageia-sysadm/2011-January/001580.html
new file mode 100644
index 000000000..166b717b5
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001580.html
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [LONG] new server to name and password handling
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C201101061346.58921.rapsys%40rapsys.eu%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001517.html">
+ <LINK REL="Next" HREF="001649.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [LONG] new server to name and password handling</H1>
+ <B>Rapha&#235;l Gertz</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5BLONG%5D%20new%20server%20to%20name%20and%20password%20handling&In-Reply-To=%3C201101061346.58921.rapsys%40rapsys.eu%3E"
+ TITLE="[Mageia-sysadm] [LONG] new server to name and password handling">rapsys at rapsys.eu
+ </A><BR>
+ <I>Thu Jan 6 13:46:58 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001517.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001649.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1580">[ date ]</a>
+ <a href="thread.html#1580">[ thread ]</a>
+ <a href="subject.html#1580">[ subject ]</a>
+ <a href="author.html#1580">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le mercredi 05 janvier 2011 18:04:21, Michael Scherer a &#233;crit :
+&gt;<i> Le mardi 04 janvier 2011 &#224; 17:31 +0100, Rapha&#235;l Gertz a &#233;crit :
+</I>&gt;<i> &gt; Le mardi 04 janvier 2011 16:45:53, Luca Berra a &#233;crit :
+</I>&gt;<i> &gt; &gt; On Mon, Jan 03, 2011 at 02:00:40AM +0100, Michael Scherer wrote:
+</I>&gt;<i> &gt; &gt; &gt;Online.net, thanks to Raphael Gertz efforts. The specs ( in french, I
+</I>&gt;<i> &gt; &gt; &gt;can translate if Babelfish is not enough ) are here :
+</I>&gt;<i> &gt; &gt; &gt;<A HREF="http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml">http://www.online.net/serveur-dedie/offre-dedibox-pro.xhtml</A>
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; Server will be upgraded tonight (powered off few minutes) with 16GB ram +
+</I>&gt;<i> &gt; idrac entreprise card. (it was planed to be done around 22-23h pm today)
+</I>&gt;<i>
+</I>&gt;<i> Thanks.
+</I>&gt;<i>
+</I>&gt;<i> So the idrac card also requires a password :)
+</I>&gt;<i>
+</I>For the online one there is no need to change the password, the access is
+granted through the online web panel with a php proxy :)
+
+&gt;<i> It is configured ad RAID1 by default, you see only one big hard disk.
+</I>For
+
+&gt;<i> How would that solve the issue of keeping the password ?
+</I>&gt;<i> ( I see this could save us 12 euros per year, but that's enough to pay
+</I>&gt;<i> us 1/3 beer per sysadm in Paris, that's not much )
+</I>Well, it would require only one access to the online console for server,
+domain, etc...
+
+In the futur their will be admin, tech, bill contact feature, so tech
+capability (dns change/server reboot/install/etc) can be delegated to a admin
+only account.
+
+Best regards
+</PRE>
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001517.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI>Next message: <A HREF="001649.html">[Mageia-sysadm] [LONG] new server to name and password handling
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1580">[ date ]</a>
+ <a href="thread.html#1580">[ thread ]</a>
+ <a href="subject.html#1580">[ subject ]</a>
+ <a href="author.html#1580">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001581.html b/zarb-ml/mageia-sysadm/2011-January/001581.html
new file mode 100644
index 000000000..993177f91
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001581.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [677] Adapt configs to Mageia mirror structure
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B677%5D%20Adapt%20configs%20to%20Mageia%20mirror%20structure&In-Reply-To=%3C20110106131801.96BB441A4D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001579.html">
+ <LINK REL="Next" HREF="001582.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [677] Adapt configs to Mageia mirror structure</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B677%5D%20Adapt%20configs%20to%20Mageia%20mirror%20structure&In-Reply-To=%3C20110106131801.96BB441A4D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [677] Adapt configs to Mageia mirror structure">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 14:18:01 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001579.html">[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+</A></li>
+ <LI>Next message: <A HREF="001582.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1581">[ date ]</a>
+ <a href="thread.html#1581">[ thread ]</a>
+ <a href="subject.html#1581">[ subject ]</a>
+ <a href="author.html#1581">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 677
+Author: pterjan
+Date: 2011-01-06 14:18:01 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+Adapt configs to Mageia mirror structure
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/iurt.cauldron.conf
+ puppet/modules/buildsystem/templates/submit-todo.conf
+ puppet/modules/buildsystem/templates/upload.conf
+
+Modified: puppet/modules/buildsystem/templates/iurt.cauldron.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/iurt.cauldron.conf 2011-01-06 03:04:45 UTC (rev 676)
++++ puppet/modules/buildsystem/templates/iurt.cauldron.conf 2011-01-06 13:18:01 UTC (rev 677)
+@@ -1,6 +1,6 @@
+ {
+ supported_arch =&gt; [ 'i586', 'x86_64' ],
+- all_media =&gt; { 'main' =&gt; [ 'release' ], 'contrib' =&gt; [ 'release' ] },
++ all_media =&gt; { 'core' =&gt; [ 'release' ], 'nonfree' =&gt; [ 'release' ], 'tainted' =&gt; [ 'release' ] },
+ upload =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:~/uploads/',
+ upload_queue =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">iurt at pkgsubmit</A>:~/uploads/queue/',
+ unwanted_packages =&gt; '^monotone-',
+
+Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 03:04:45 UTC (rev 676)
++++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 13:18:01 UTC (rev 677)
+@@ -122,7 +122,7 @@
+ options:
+ 1.0:
+ authorized_packages: none_package_authorized
+- authorized_sections: main/testing|main/backports|contrib/testing|contrib/updates|contrib/backports|non-free/testing|non-free/updates|non-free/backports
++ authorized_sections: ^[a-z]+/(updates|testing|backports|backports_testing)$
+ authorized_arches: none
+ mode: freeze
+
+
+Modified: puppet/modules/buildsystem/templates/upload.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/upload.conf 2011-01-06 03:04:45 UTC (rev 676)
++++ puppet/modules/buildsystem/templates/upload.conf 2011-01-06 13:18:01 UTC (rev 677)
+@@ -36,19 +36,33 @@
+ },
+ media =&gt; {
+ default =&gt; {
+- &quot;main/release&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot; ],
+- &quot;main/updates&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot; ],
+- &quot;main/testing&quot; =&gt; [ &quot;main/testing&quot;, &quot;main/updates&quot;, &quot;main/release&quot; ],
+- &quot;main/backports&quot; =&gt; [ &quot;main/backports&quot;, &quot;main/updates&quot;, &quot;main/release&quot; ],
+- &quot;contrib/release&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot; ],
+- &quot;contrib/updates&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot; ],
+- &quot;contrib/testing&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot;, &quot;main/testing&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot;, &quot;contrib/testing&quot; ],
+- &quot;contrib/backports&quot; =&gt; [ &quot;main/backports&quot;, &quot;main/updates&quot;, &quot;main/release&quot;, &quot;contrib/backports&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot; ],
+- # (blino) non-free packages may require contrib packages (gcc3.3-g77 for scilab)
+- &quot;non-free/release&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot;, &quot;non-free/updates&quot;, &quot;non-free/release&quot; ],
+- &quot;non-free/updates&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot;, &quot;non-free/updates&quot;, &quot;non-free/release&quot; ],
+- &quot;non-free/testing&quot; =&gt; [ &quot;main/updates&quot;, &quot;main/release&quot;, &quot;main/testing&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot;, &quot;contrib/testing&quot;, &quot;non-free/updates&quot;, &quot;non-free/release&quot;, &quot;non-free/testing&quot; ],
+- &quot;non-free/backports&quot; =&gt; [ &quot;main/backports&quot;, &quot;main/release&quot;, &quot;main/updates&quot;, &quot;contrib/backports&quot;, &quot;contrib/updates&quot;, &quot;contrib/release&quot;, &quot;non-free/backports&quot;, &quot;non-free/updates&quot;, &quot;non-free/release&quot; ],
++ &quot;core/release&quot; =&gt; [ &quot;core/updates&quot;, &quot;core/release&quot; ],
++ &quot;core/updates&quot; =&gt; [ &quot;core/updates&quot;, &quot;core/release&quot; ],
++ &quot;core/testing&quot; =&gt; [ &quot;core/testing&quot;, &quot;core/updates&quot;, &quot;core/release&quot; ],
++ &quot;core/backports&quot; =&gt; [ &quot;core/backports&quot;, &quot;core/testing&quot;, &quot;core/updates&quot;, &quot;core/release&quot; ],
++ &quot;core/backports_testing&quot; =&gt; [ &quot;core/backports_testing&quot;, &quot;core/backports&quot;, &quot;core/testing&quot;, &quot;core/updates&quot;, &quot;core/release&quot; ],
++ &quot;nonfree/release&quot; =&gt; [ &quot;core/release&quot;, &quot;nonfree/release&quot; ],
++ &quot;nonfree/updates&quot; =&gt; [ &quot;core/updates&quot;, &quot;core/release&quot;, &quot;nonfree/release&quot;, &quot;nonfree/updates&quot; ],
++ &quot;nonfree/testing&quot; =&gt; [ &quot;core/updates&quot;, &quot;core/release&quot;, &quot;core/testing&quot;, &quot;nonfree/release&quot;, &quot;nonfree/updates&quot;, &quot;nonfree/testing&quot; ],
++ &quot;nonfree/backports&quot; =&gt; [ &quot;core/backports&quot;, &quot;core/testing&quot;, &quot;core/updates&quot;, &quot;core/release&quot;,
++ &quot;nonfree/release&quot;, &quot;nonfree/updates&quot;, &quot;nonfree/testing&quot;, &quot;nonfree/backports&quot; ],
++ &quot;nonfree/backports_testing&quot; =&gt; [ &quot;core/backports_testing&quot;, &quot;core/backports&quot;, &quot;core/testing&quot;, &quot;core/updates&quot;, &quot;core/release&quot;,
++ &quot;nonfree/release&quot;, &quot;nonfree/updates&quot;, &quot;nonfree/testing&quot;, &quot;nonfree/backports&quot;, &quot;nonfree/backports_testing&quot; ],
++ &quot;tainted/release&quot; =&gt; [ &quot;core/release&quot;, &quot;nonfree/release&quot;, &quot;tainted/release&quot; ],
++ &quot;tainted/updates&quot; =&gt; [ &quot;core/release&quot;, &quot;nonfree/release&quot;, &quot;tainted/release&quot;,
++ &quot;core/updates&quot;, &quot;nonfree/updates&quot;, &quot;tainted/updates&quot; ],
++ &quot;tainted/testing&quot; =&gt; [ &quot;core/release&quot;, &quot;nonfree/release&quot;, &quot;tainted/release&quot;,
++ &quot;core/updates&quot;, &quot;nonfree/updates&quot;, &quot;tainted/updates&quot;,
++ &quot;core/testing&quot;, &quot;nonfree/testing&quot;, &quot;tainted/testing&quot; ],
++ &quot;tainted/backports&quot; =&gt; [ &quot;core/release&quot;, &quot;nonfree/release&quot;, &quot;tainted/release&quot;,
++ &quot;core/updates&quot;, &quot;nonfree/updates&quot;, &quot;tainted/updates&quot;,
++ &quot;core/testing&quot;, &quot;nonfree/testing&quot;, &quot;tainted/testing&quot;,
++ &quot;core/backports&quot;, &quot;nonfree/backports&quot;, &quot;tainted/backports&quot; ],
++ &quot;tainted/backports_testing&quot; =&gt; [ &quot;core/release&quot;, &quot;nonfree/release&quot;, &quot;tainted/release&quot;,
++ &quot;core/updates&quot;, &quot;nonfree/updates&quot;, &quot;tainted/updates&quot;,
++ &quot;core/testing&quot;, &quot;nonfree/testing&quot;, &quot;tainted/testing&quot;,
++ &quot;core/backports&quot;, &quot;nonfree/backports&quot;, &quot;tainted/backports&quot;,
++ &quot;core/backports_testing&quot;, &quot;nonfree/backports_testing&quot;, &quot;tainted/backports_testing&quot; ],
+ },
+ },
+ admin =&gt; '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-sysadm at mageia.org</A>',
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/6411a4ea/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001579.html">[Mageia-sysadm] [225] No need to sudo, emi is running with correct user already
+</A></li>
+ <LI>Next message: <A HREF="001582.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1581">[ date ]</a>
+ <a href="thread.html#1581">[ thread ]</a>
+ <a href="subject.html#1581">[ subject ]</a>
+ <a href="author.html#1581">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001582.html b/zarb-ml/mageia-sysadm/2011-January/001582.html
new file mode 100644
index 000000000..b370491f4
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001582.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%20address%0A%09for%20now&In-Reply-To=%3C20110106140703.B14F241A57%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001581.html">
+ <LINK REL="Next" HREF="001586.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [678] Do not request @mageia.org packager address for now</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%20address%0A%09for%20now&In-Reply-To=%3C20110106140703.B14F241A57%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [678] Do not request @mageia.org packager address for now">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 15:07:03 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001581.html">[Mageia-sysadm] [677] Adapt configs to Mageia mirror structure
+</A></li>
+ <LI>Next message: <A HREF="001586.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1582">[ date ]</a>
+ <a href="thread.html#1582">[ thread ]</a>
+ <a href="subject.html#1582">[ subject ]</a>
+ <a href="author.html#1582">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 678
+Author: pterjan
+Date: 2011-01-06 15:07:03 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+Do not request @mageia.org packager address for now
+
+Modified Paths:
+--------------
+ puppet/modules/buildsystem/templates/submit-todo.conf
+
+Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+===================================================================
+--- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 13:18:01 UTC (rev 677)
++++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 14:07:03 UTC (rev 678)
+@@ -62,7 +62,7 @@
+ options:
+ tags:
+ release: 'mga\d+'
+- packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
++ # packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+ distribution: '^Mageia'
+ vendor: '^Mageia.Org$'
+
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/da2389dc/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001581.html">[Mageia-sysadm] [677] Adapt configs to Mageia mirror structure
+</A></li>
+ <LI>Next message: <A HREF="001586.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1582">[ date ]</a>
+ <a href="thread.html#1582">[ thread ]</a>
+ <a href="subject.html#1582">[ subject ]</a>
+ <a href="author.html#1582">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001583.html b/zarb-ml/mageia-sysadm/2011-January/001583.html
new file mode 100644
index 000000000..9532ea736
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001583.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110106141109.F147C41A57%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001607.html">
+ <LINK REL="Next" HREF="001584.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm</H1>
+ <B>Emi the upload bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110106141109.F147C41A57%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 15:11:09 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001607.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001584.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1583">[ date ]</a>
+ <a href="thread.html#1583">[ thread ]</a>
+ <a href="subject.html#1583">[ subject ]</a>
+ <a href="author.html#1583">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>The upload of the following packages failed:
+- @156:repsys-1.9.2-1mdv2010.1.src.rpm
+
+Upload log available in <A HREF="http://pkgsubmit.mageia.org/uploads/rejected//cauldron/core/release/20110106140950.pterjan.valstar.14670.youri">http://pkgsubmit.mageia.org/uploads/rejected//cauldron/core/release/20110106140950.pterjan.valstar.14670.youri</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001607.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001584.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1583">[ date ]</a>
+ <a href="thread.html#1583">[ thread ]</a>
+ <a href="subject.html#1583">[ subject ]</a>
+ <a href="author.html#1583">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001584.html b/zarb-ml/mageia-sysadm/2011-January/001584.html
new file mode 100644
index 000000000..1e3339c30
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001584.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110106141325.C404541A58%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001583.html">
+ <LINK REL="Next" HREF="001585.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm</H1>
+ <B>Emi the upload bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Upload%20failed%20for%0A%09%40156%3Arepsys-1.9.2-1mdv2010.1.src.rpm&In-Reply-To=%3C20110106141325.C404541A58%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 15:13:25 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001583.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001585.html">[Mageia-sysadm] more repsys / svn problems...
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1584">[ date ]</a>
+ <a href="thread.html#1584">[ thread ]</a>
+ <a href="subject.html#1584">[ subject ]</a>
+ <a href="author.html#1584">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>The upload of the following packages failed:
+- @156:repsys-1.9.2-1mdv2010.1.src.rpm
+
+Upload log available in <A HREF="http://pkgsubmit.mageia.org/uploads/rejected//cauldron/core/release/20110106141228.pterjan.valstar.15539.youri">http://pkgsubmit.mageia.org/uploads/rejected//cauldron/core/release/20110106141228.pterjan.valstar.15539.youri</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001583.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001585.html">[Mageia-sysadm] more repsys / svn problems...
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1584">[ date ]</a>
+ <a href="thread.html#1584">[ thread ]</a>
+ <a href="subject.html#1584">[ subject ]</a>
+ <a href="author.html#1584">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001585.html b/zarb-ml/mageia-sysadm/2011-January/001585.html
new file mode 100644
index 000000000..df328a029
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001585.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] more repsys / svn problems...
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20more%20repsys%20/%20svn%20problems...&In-Reply-To=%3C4D25CE20.7020607%40iki.fi%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001584.html">
+ <LINK REL="Next" HREF="001587.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] more repsys / svn problems...</H1>
+ <B>Thomas Backlund</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20more%20repsys%20/%20svn%20problems...&In-Reply-To=%3C4D25CE20.7020607%40iki.fi%3E"
+ TITLE="[Mageia-sysadm] more repsys / svn problems...">tmb at iki.fi
+ </A><BR>
+ <I>Thu Jan 6 15:13:52 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001584.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001587.html">[Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1585">[ date ]</a>
+ <a href="thread.html#1585">[ thread ]</a>
+ <a href="subject.html#1585">[ subject ]</a>
+ <a href="author.html#1585">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi,
+
+I found some more problems...
+
+I tried to create main kernel tree with repsys...
+
+If I use &quot;repsys create kernel&quot; it will create the structure
+only in /packages, but nothing in /binrepos
+
+So I tried to add the kernel structure manually in /binrepos
+in order to copy the kernel tarball from kernel-linus that I
+imported earlier (to save space on SVN)
+
+But then I hit permission errors:
+[<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">tmb at tmb</A> binrepos]$ svn status
+A kernel
+A kernel/current
+A kernel/current/SOURCES
+A + kernel/current/SOURCES/linux-2.6.37.tar.bz2
+[<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">tmb at tmb</A> binrepos]$ LC_ALL=C svn commit -m &quot;copy tarball from kernel-linus&quot;
+svn: Commit failed (details follow):
+svn: Authorization failed
+[<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">tmb at tmb</A> binrepos]$
+
+So is this a &quot;limitation&quot; of the binrepos layout, or are we still
+missing some permissions on binrepos ?
+
+--
+Thomas
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001584.html">[Mageia-sysadm] Upload failed for @156:repsys-1.9.2-1mdv2010.1.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001587.html">[Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1585">[ date ]</a>
+ <a href="thread.html#1585">[ thread ]</a>
+ <a href="subject.html#1585">[ subject ]</a>
+ <a href="author.html#1585">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001586.html b/zarb-ml/mageia-sysadm/2011-January/001586.html
new file mode 100644
index 000000000..69b4127af
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001586.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C4D25D062.5010901%40iki.fi%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001582.html">
+ <LINK REL="Next" HREF="001589.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [678] Do not request @mageia.org packager address for now</H1>
+ <B>Thomas Backlund</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C4D25D062.5010901%40iki.fi%3E"
+ TITLE="[Mageia-sysadm] [678] Do not request @mageia.org packager address for now">tmb at iki.fi
+ </A><BR>
+ <I>Thu Jan 6 15:23:30 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001582.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001589.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1586">[ date ]</a>
+ <a href="thread.html#1586">[ thread ]</a>
+ <a href="subject.html#1586">[ subject ]</a>
+ <a href="author.html#1586">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE><A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">root at mageia.org</A> skrev 6.1.2011 16:07:
+&gt;<i> Revision
+</I>&gt;<i> 678
+</I>&gt;<i> Author
+</I>&gt;<i> pterjan
+</I>&gt;<i> Date
+</I>&gt;<i> 2011-01-06 15:07:03 +0100 (Thu, 06 Jan 2011)
+</I>&gt;<i>
+</I>&gt;<i>
+</I>&gt;<i> Log Message
+</I>&gt;<i>
+</I>&gt;<i> Do not request @mageia.org packager address for now
+</I>&gt;<i>
+</I>&gt;<i>
+</I>&gt;<i> Modified Paths
+</I>&gt;<i>
+</I>&gt;<i> * puppet/modules/buildsystem/templates/submit-todo.conf
+</I>&gt;<i> &lt;#puppetmodulesbuildsystemtemplatessubmittodoconf&gt;
+</I>&gt;<i>
+</I>&gt;<i> Modified: puppet/modules/buildsystem/templates/submit-todo.conf
+</I>&gt;<i> ===================================================================
+</I>&gt;<i> --- puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 13:18:01 UTC (rev 677)
+</I>&gt;<i> +++ puppet/modules/buildsystem/templates/submit-todo.conf 2011-01-06 14:07:03 UTC (rev 678)
+</I>&gt;<i> @@ -62,7 +62,7 @@
+</I>&gt;<i> options:
+</I>&gt;<i> tags:
+</I>&gt;<i> release: 'mga\d+'
+</I>
+Shouldn't this be '.mga\d+' ?
+(adding the dot)
+
+&gt;<i> - packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;<i> + # packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>
+What stops us from starting to give out @mageia.org aliases ?
+
+&gt;<i> distribution: '^Mageia'
+</I>&gt;<i> vendor: '^Mageia.Org$'
+</I>&gt;<i>
+</I>
+--
+Thomas
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001582.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001589.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1586">[ date ]</a>
+ <a href="thread.html#1586">[ thread ]</a>
+ <a href="subject.html#1586">[ subject ]</a>
+ <a href="author.html#1586">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001587.html b/zarb-ml/mageia-sysadm/2011-January/001587.html
new file mode 100644
index 000000000..f3a788290
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001587.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B226%5D%20add%20patch%20from%20blino%20to%20enable%20binrepo%20in%0A%09create-srpm&In-Reply-To=%3C20110106143516.D210E41A5D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001585.html">
+ <LINK REL="Next" HREF="001588.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B226%5D%20add%20patch%20from%20blino%20to%20enable%20binrepo%20in%0A%09create-srpm&In-Reply-To=%3C20110106143516.D210E41A5D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 15:35:16 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001585.html">[Mageia-sysadm] more repsys / svn problems...
+</A></li>
+ <LI>Next message: <A HREF="001588.html">[Mageia-sysadm] [227] update repsys.conf for Mageia
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1587">[ date ]</a>
+ <a href="thread.html#1587">[ thread ]</a>
+ <a href="subject.html#1587">[ subject ]</a>
+ <a href="author.html#1587">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 226
+Author: boklm
+Date: 2011-01-06 15:35:16 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+add patch from blino to enable binrepo in create-srpm
+
+Modified Paths:
+--------------
+ build_system/repsys/trunk/create-srpm
+
+Modified: build_system/repsys/trunk/create-srpm
+===================================================================
+--- build_system/repsys/trunk/create-srpm 2011-01-06 09:56:59 UTC (rev 225)
++++ build_system/repsys/trunk/create-srpm 2011-01-06 14:35:16 UTC (rev 226)
+@@ -56,6 +56,8 @@
+ svnlog=1,
+ revname=1,
+ scripts=target.scripts,
++ use_binrepo = True,
++ binrepo_check = False,
+ macros=target.macros)
+ uploadsrpms.extend(targetsrpms)
+ uploadcmd = get_helper(&quot;upload-srpm&quot;)
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/7fda4d9c/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001585.html">[Mageia-sysadm] more repsys / svn problems...
+</A></li>
+ <LI>Next message: <A HREF="001588.html">[Mageia-sysadm] [227] update repsys.conf for Mageia
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1587">[ date ]</a>
+ <a href="thread.html#1587">[ thread ]</a>
+ <a href="subject.html#1587">[ subject ]</a>
+ <a href="author.html#1587">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001588.html b/zarb-ml/mageia-sysadm/2011-January/001588.html
new file mode 100644
index 000000000..30e647630
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001588.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [227] update repsys.conf for Mageia
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B227%5D%20update%20repsys.conf%20for%20Mageia&In-Reply-To=%3C20110106143804.B7D2741A5D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001587.html">
+ <LINK REL="Next" HREF="001590.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [227] update repsys.conf for Mageia</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B227%5D%20update%20repsys.conf%20for%20Mageia&In-Reply-To=%3C20110106143804.B7D2741A5D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [227] update repsys.conf for Mageia">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 15:38:04 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001587.html">[Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm
+</A></li>
+ <LI>Next message: <A HREF="001590.html">[Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1588">[ date ]</a>
+ <a href="thread.html#1588">[ thread ]</a>
+ <a href="subject.html#1588">[ subject ]</a>
+ <a href="author.html#1588">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 227
+Author: boklm
+Date: 2011-01-06 15:38:04 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+update repsys.conf for Mageia
+
+Modified Paths:
+--------------
+ build_system/repsys/trunk/repsys.conf
+
+Modified: build_system/repsys/trunk/repsys.conf
+===================================================================
+--- build_system/repsys/trunk/repsys.conf 2011-01-06 14:35:16 UTC (rev 226)
++++ build_system/repsys/trunk/repsys.conf 2011-01-06 14:38:04 UTC (rev 227)
+@@ -1,18 +1,20 @@
+ # see man 8 repsys for a description on configuration options
+ [global]
+-repository = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/">ssh://svn.mandriva.com/svn/packages/</A>
+-## uncomment it in case you don't have a account in the Mandriva cluster:
+-#mirror = <A HREF="http://svn.mandriva.com/svn/packages/cooker/">http://svn.mandriva.com/svn/packages/cooker/</A>
+-#use-binaries-repository = yes
+-#binaries-repository = svn.mandriva.com:/tarballs/
++repository = svn+<A HREF="ssh://svn.mageia.org/svn/packages/">ssh://svn.mageia.org/svn/packages/</A>
++trunk-dir = cauldron/
+
++## uncomment it in case you don't have a account in the Mageia build system:
++#mirror = <A HREF="http://svn.mageia.org/svn/packages/cauldron/">http://svn.mageia.org/svn/packages/cauldron/</A>
++use-binaries-repository = yes
++binaries-repository = svn+<A HREF="ssh://svn.mageia.org/svn/binrepos">ssh://svn.mageia.org/svn/binrepos</A>
++
+ [log]
+-oldurl = svn+<A HREF="ssh://svn.mandriva.com/svn/packages/misc">ssh://svn.mandriva.com/svn/packages/misc</A>
++oldurl = svn+<A HREF="ssh://svn.mageia.org/svn/packages/misc">ssh://svn.mageia.org/svn/packages/misc</A>
+
+ [helper]
+ create-srpm = /usr/share/repsys/create-srpm
+ upload-srpm = /usr/local/bin/youri.devel
+
+ [submit]
+-host = kenobi.mandriva.com
+-default = Cooker
++host = pkgsubmit.mageia.org
++default = Cauldron
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/24bfca37/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001587.html">[Mageia-sysadm] [226] add patch from blino to enable binrepo in create-srpm
+</A></li>
+ <LI>Next message: <A HREF="001590.html">[Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1588">[ date ]</a>
+ <a href="thread.html#1588">[ thread ]</a>
+ <a href="subject.html#1588">[ subject ]</a>
+ <a href="author.html#1588">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001589.html b/zarb-ml/mageia-sysadm/2011-January/001589.html
new file mode 100644
index 000000000..72e03920b
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001589.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C1294325351.3329.49.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001586.html">
+ <LINK REL="Next" HREF="001597.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [678] Do not request @mageia.org packager address for now</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C1294325351.3329.49.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [678] Do not request @mageia.org packager address for now">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 15:49:11 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001586.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001597.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1589">[ date ]</a>
+ <a href="thread.html#1589">[ thread ]</a>
+ <a href="subject.html#1589">[ subject ]</a>
+ <a href="author.html#1589">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le jeudi 06 janvier 2011 &#224; 16:23 +0200, Thomas Backlund a &#233;crit :
+
+&gt;<i> &gt; - packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;<i> &gt; + # packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;<i>
+</I>&gt;<i> What stops us from starting to give out @mageia.org aliases ?
+</I>
+Mainly decide who get mageia.org alias.
+
+IE, who decide who get alias. Are people who open a account on identity,
+people who get promoted, etc ?
+
+For the rest, the configuration is commented and ready to be deployed
+( after being tested )
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001586.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001597.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1589">[ date ]</a>
+ <a href="thread.html#1589">[ thread ]</a>
+ <a href="subject.html#1589">[ subject ]</a>
+ <a href="author.html#1589">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001590.html b/zarb-ml/mageia-sysadm/2011-January/001590.html
new file mode 100644
index 000000000..13821dbbd
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001590.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B228%5D%20To%20avoid%20confusion%2C%0A%09Mageia%20repsys%20fork%20is%20being%20renamed%20to%20mgarepo&In-Reply-To=%3C20110106145153.D5DF141A5F%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001588.html">
+ <LINK REL="Next" HREF="001591.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B228%5D%20To%20avoid%20confusion%2C%0A%09Mageia%20repsys%20fork%20is%20being%20renamed%20to%20mgarepo&In-Reply-To=%3C20110106145153.D5DF141A5F%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 15:51:53 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001588.html">[Mageia-sysadm] [227] update repsys.conf for Mageia
+</A></li>
+ <LI>Next message: <A HREF="001591.html">[Mageia-sysadm] [229] mgarepo version 1.9.3
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1590">[ date ]</a>
+ <a href="thread.html#1590">[ thread ]</a>
+ <a href="subject.html#1590">[ subject ]</a>
+ <a href="author.html#1590">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 228
+Author: boklm
+Date: 2011-01-06 15:51:53 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+To avoid confusion, Mageia repsys fork is being renamed to mgarepo
+
+Added Paths:
+-----------
+ build_system/mgarepo/
+
+Removed Paths:
+-------------
+ build_system/repsys/
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/0ed1c103/attachment-0001.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001588.html">[Mageia-sysadm] [227] update repsys.conf for Mageia
+</A></li>
+ <LI>Next message: <A HREF="001591.html">[Mageia-sysadm] [229] mgarepo version 1.9.3
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1590">[ date ]</a>
+ <a href="thread.html#1590">[ thread ]</a>
+ <a href="subject.html#1590">[ subject ]</a>
+ <a href="author.html#1590">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001591.html b/zarb-ml/mageia-sysadm/2011-January/001591.html
new file mode 100644
index 000000000..c2a04b48e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001591.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [229] mgarepo version 1.9.3
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B229%5D%20mgarepo%20version%201.9.3&In-Reply-To=%3C20110106150345.C123341A62%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001590.html">
+ <LINK REL="Next" HREF="001592.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [229] mgarepo version 1.9.3</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B229%5D%20mgarepo%20version%201.9.3&In-Reply-To=%3C20110106150345.C123341A62%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [229] mgarepo version 1.9.3">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:03:45 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001590.html">[Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo
+</A></li>
+ <LI>Next message: <A HREF="001592.html">[Mageia-sysadm] [230] mgarepo version 1.9.3
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1591">[ date ]</a>
+ <a href="thread.html#1591">[ thread ]</a>
+ <a href="subject.html#1591">[ subject ]</a>
+ <a href="author.html#1591">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 229
+Author: boklm
+Date: 2011-01-06 16:03:45 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+mgarepo version 1.9.3
+
+Modified Paths:
+--------------
+ build_system/mgarepo/trunk/CHANGES
+ build_system/mgarepo/trunk/repsys
+
+Modified: build_system/mgarepo/trunk/CHANGES
+===================================================================
+--- build_system/mgarepo/trunk/CHANGES 2011-01-06 14:51:53 UTC (rev 228)
++++ build_system/mgarepo/trunk/CHANGES 2011-01-06 15:03:45 UTC (rev 229)
+@@ -1,3 +1,7 @@
++* 1.9.3
++- enable binrepo in create-srpm
++- update repsys.conf for Mageia
++
+ * 1.9.2-binrepo
+ - add .xz files in binrepo
+
+
+Modified: build_system/mgarepo/trunk/repsys
+===================================================================
+--- build_system/mgarepo/trunk/repsys 2011-01-06 14:51:53 UTC (rev 228)
++++ build_system/mgarepo/trunk/repsys 2011-01-06 15:03:45 UTC (rev 229)
+@@ -4,7 +4,7 @@
+ import getopt
+ import sys
+
+-VERSION=&quot;1.9.2-binrepo&quot;
++VERSION=&quot;1.9.3&quot;
+
+ HELP = &quot;&quot;&quot;\
+ Usage: repsys COMMAND [COMMAND ARGUMENTS]
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/64fb4837/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001590.html">[Mageia-sysadm] [228] To avoid confusion, Mageia repsys fork is being renamed to mgarepo
+</A></li>
+ <LI>Next message: <A HREF="001592.html">[Mageia-sysadm] [230] mgarepo version 1.9.3
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1591">[ date ]</a>
+ <a href="thread.html#1591">[ thread ]</a>
+ <a href="subject.html#1591">[ subject ]</a>
+ <a href="author.html#1591">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001592.html b/zarb-ml/mageia-sysadm/2011-January/001592.html
new file mode 100644
index 000000000..1919fc008
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001592.html
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [230] mgarepo version 1.9.3
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B230%5D%20mgarepo%20version%201.9.3&In-Reply-To=%3C20110106150519.E3DB841A63%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001591.html">
+ <LINK REL="Next" HREF="001593.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [230] mgarepo version 1.9.3</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B230%5D%20mgarepo%20version%201.9.3&In-Reply-To=%3C20110106150519.E3DB841A63%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [230] mgarepo version 1.9.3">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:05:19 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001591.html">[Mageia-sysadm] [229] mgarepo version 1.9.3
+</A></li>
+ <LI>Next message: <A HREF="001593.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1592">[ date ]</a>
+ <a href="thread.html#1592">[ thread ]</a>
+ <a href="subject.html#1592">[ subject ]</a>
+ <a href="author.html#1592">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 230
+Author: boklm
+Date: 2011-01-06 16:05:19 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+mgarepo version 1.9.3
+
+Added Paths:
+-----------
+ build_system/mgarepo/tags/1.9.3/
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;/pipermail/mageia-sysadm/attachments/20110106/49a2854b/attachment.html&gt;
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001591.html">[Mageia-sysadm] [229] mgarepo version 1.9.3
+</A></li>
+ <LI>Next message: <A HREF="001593.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1592">[ date ]</a>
+ <a href="thread.html#1592">[ thread ]</a>
+ <a href="subject.html#1592">[ subject ]</a>
+ <a href="author.html#1592">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001593.html b/zarb-ml/mageia-sysadm/2011-January/001593.html
new file mode 100644
index 000000000..62abbc5b0
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001593.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154101.880E341A6B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001592.html">
+ <LINK REL="Next" HREF="001594.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154101.880E341A6B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:41:01 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001592.html">[Mageia-sysadm] [230] mgarepo version 1.9.3
+</A></li>
+ <LI>Next message: <A HREF="001594.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1593">[ date ]</a>
+ <a href="thread.html#1593">[ thread ]</a>
+ <a href="subject.html#1593">[ subject ]</a>
+ <a href="author.html#1593">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154001.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154001.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154001.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154001.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154001.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154001.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001592.html">[Mageia-sysadm] [230] mgarepo version 1.9.3
+</A></li>
+ <LI>Next message: <A HREF="001594.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1593">[ date ]</a>
+ <a href="thread.html#1593">[ thread ]</a>
+ <a href="subject.html#1593">[ subject ]</a>
+ <a href="author.html#1593">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001594.html b/zarb-ml/mageia-sysadm/2011-January/001594.html
new file mode 100644
index 000000000..c71185bea
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001594.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154101.E1D0041A6B%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001593.html">
+ <LINK REL="Next" HREF="001595.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154101.E1D0041A6B%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:41:01 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001593.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001595.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1594">[ date ]</a>
+ <a href="thread.html#1594">[ thread ]</a>
+ <a href="subject.html#1594">[ subject ]</a>
+ <a href="author.html#1594">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154001.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154001.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154002.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154002.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154002.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154002.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154001.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154001.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154001.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154001.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154002.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106153928.pterjan.valstar.26060/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154002.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001593.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001595.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1594">[ date ]</a>
+ <a href="thread.html#1594">[ thread ]</a>
+ <a href="subject.html#1594">[ subject ]</a>
+ <a href="author.html#1594">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001595.html b/zarb-ml/mageia-sysadm/2011-January/001595.html
new file mode 100644
index 000000000..ac9b8647c
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001595.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154501.AD90D41A6D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001594.html">
+ <LINK REL="Next" HREF="001596.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154501.AD90D41A6D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:45:01 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001594.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001596.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1595">[ date ]</a>
+ <a href="thread.html#1595">[ thread ]</a>
+ <a href="subject.html#1595">[ subject ]</a>
+ <a href="author.html#1595">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154401.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154401.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154401.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154401.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154401.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154401.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001594.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001596.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1595">[ date ]</a>
+ <a href="thread.html#1595">[ thread ]</a>
+ <a href="subject.html#1595">[ subject ]</a>
+ <a href="author.html#1595">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001596.html b/zarb-ml/mageia-sysadm/2011-January/001596.html
new file mode 100644
index 000000000..16a2dc6d8
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001596.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154502.1524F41A6D%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001595.html">
+ <LINK REL="Next" HREF="001598.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106154502.1524F41A6D%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:45:02 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001595.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001598.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1596">[ date ]</a>
+ <a href="thread.html#1596">[ thread ]</a>
+ <a href="subject.html#1596">[ subject ]</a>
+ <a href="author.html#1596">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154401.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154401.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154403.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154403.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154401.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154401.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154403.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154403.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154403.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154403.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154401.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154330.pterjan.valstar.26591/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154401.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001595.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001598.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1596">[ date ]</a>
+ <a href="thread.html#1596">[ thread ]</a>
+ <a href="subject.html#1596">[ subject ]</a>
+ <a href="author.html#1596">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001597.html b/zarb-ml/mageia-sysadm/2011-January/001597.html
new file mode 100644
index 000000000..9cf9bd4d1
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001597.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C4D25E223.3080204%40iki.fi%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001589.html">
+ <LINK REL="Next" HREF="001602.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [678] Do not request @mageia.org packager address for now</H1>
+ <B>Thomas Backlund</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C4D25E223.3080204%40iki.fi%3E"
+ TITLE="[Mageia-sysadm] [678] Do not request @mageia.org packager address for now">tmb at iki.fi
+ </A><BR>
+ <I>Thu Jan 6 16:39:15 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001589.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001602.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1597">[ date ]</a>
+ <a href="thread.html#1597">[ thread ]</a>
+ <a href="subject.html#1597">[ subject ]</a>
+ <a href="author.html#1597">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Michael Scherer skrev 6.1.2011 16:49:
+&gt;<i> Le jeudi 06 janvier 2011 &#224; 16:23 +0200, Thomas Backlund a &#233;crit :
+</I>&gt;<i>
+</I>&gt;&gt;&gt;<i> - packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;&gt;&gt;<i> + # packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;&gt;<i>
+</I>&gt;&gt;<i> What stops us from starting to give out @mageia.org aliases ?
+</I>&gt;<i>
+</I>&gt;<i> Mainly decide who get mageia.org alias.
+</I>&gt;<i>
+</I>&gt;<i> IE, who decide who get alias. Are people who open a account on identity,
+</I>&gt;<i> people who get promoted, etc ?
+</I>&gt;<i>
+</I>
+Well, I'd suggest:
+founders should definately use @mageia.org
+marketing should definately use @mageia.org
+bugzilla/triage team should use @mageia.org
+forum admins/moderators should use @mageia.org
+
+packagers should use @mageia.org, that way we can enforce the packager
+above for all packages going through BS
+
+
+For the other contributors that get svn access (translators/web/...)
+they could also have the alias (this could be optional, but preferred).
+
+For those that only register on identity to get on the forums or to
+report a bug, no alias (unless requested and promoted maybe)
+
+&gt;<i> For the rest, the configuration is commented and ready to be deployed
+</I>&gt;<i> ( after being tested )
+</I>&gt;<i>
+</I>
+I'd say to enable this for founders now so we can test it, and on next
+founders meeting we could decide if the above suggestion for the rest is ok.
+
+--
+Thomas
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001589.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001602.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1597">[ date ]</a>
+ <a href="thread.html#1597">[ thread ]</a>
+ <a href="subject.html#1597">[ subject ]</a>
+ <a href="author.html#1597">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001598.html b/zarb-ml/mageia-sysadm/2011-January/001598.html
new file mode 100644
index 000000000..b22e7041c
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001598.html
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%0A%09for%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C4D25E436.2010804%40iki.fi%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001596.html">
+ <LINK REL="Next" HREF="001599.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Thomas Backlund</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%0A%09for%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C4D25E436.2010804%40iki.fi%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">tmb at iki.fi
+ </A><BR>
+ <I>Thu Jan 6 16:48:06 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001596.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001599.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1598">[ date ]</a>
+ <a href="thread.html#1598">[ thread ]</a>
+ <a href="subject.html#1598">[ subject ]</a>
+ <a href="author.html#1598">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Ulri the scheduler bot skrev 6.1.2011 17:45:
+&gt;<i> Build of the following packages failed:
+</I>&gt;<i>
+</I>&gt;<i> - @154:grep-2.7-2mga1.0.src.rpm
+</I>&gt;<i>
+</I>
+It still creates wrong versioning...
+
+The above package should be:
+
+grep-2.7-2.mga1.src.rpm
+
+--
+Thomas
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001596.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001599.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1598">[ date ]</a>
+ <a href="thread.html#1598">[ thread ]</a>
+ <a href="subject.html#1598">[ subject ]</a>
+ <a href="author.html#1598">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001599.html b/zarb-ml/mageia-sysadm/2011-January/001599.html
new file mode 100644
index 000000000..77473a0ad
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001599.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106155001.67AE741A6C%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001598.html">
+ <LINK REL="Next" HREF="001600.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20x86_64%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106155001.67AE741A6C%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:50:01 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001598.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001600.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1599">[ date ]</a>
+ <a href="thread.html#1599">[ thread ]</a>
+ <a href="subject.html#1599">[ subject ]</a>
+ <a href="author.html#1599">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154902.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154902.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154902.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154902.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154902.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154902.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001598.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001600.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1599">[ date ]</a>
+ <a href="thread.html#1599">[ thread ]</a>
+ <a href="subject.html#1599">[ subject ]</a>
+ <a href="author.html#1599">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001600.html b/zarb-ml/mageia-sysadm/2011-January/001600.html
new file mode 100644
index 000000000..5815a469e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001600.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106155001.CB77741A6C%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001599.html">
+ <LINK REL="Next" HREF="001601.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm</H1>
+ <B>Ulri the scheduler bot</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Rebuild%20failed%20on%20i586%20for%0A%09%40154%3Agrep-2.7-2mga1.0.src.rpm&In-Reply-To=%3C20110106155001.CB77741A6C%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm">mageia-sysadm at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 16:50:01 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001599.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001601.html">[Mageia-sysadm] Packages failure
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1600">[ date ]</a>
+ <a href="thread.html#1600">[ thread ]</a>
+ <a href="subject.html#1600">[ subject ]</a>
+ <a href="author.html#1600">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Build of the following packages failed:
+
+- @154:grep-2.7-2mga1.0.src.rpm
+
+Failure details available in <A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log</A>
+Reason:
+@154:grep-2.7-2mdv2010.1.src.rpm: missing_dep
+
+Log files generated:
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154903.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154903.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154902.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-3.0.20110106154902.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154903.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154903.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154902.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154902.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154902.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-1.0.20110106154902.log</A>
+<A HREF="http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154903.log">http://pkgsubmit.mageia.org/uploads/failure/cauldron/core/release/20110106154801.pterjan.valstar.28444/log/grep-2.7-2mdv2010.1/install_deps-2.0.20110106154903.log</A>
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001599.html">[Mageia-sysadm] Rebuild failed on x86_64 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001601.html">[Mageia-sysadm] Packages failure
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1600">[ date ]</a>
+ <a href="thread.html#1600">[ thread ]</a>
+ <a href="subject.html#1600">[ subject ]</a>
+ <a href="author.html#1600">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001601.html b/zarb-ml/mageia-sysadm/2011-January/001601.html
new file mode 100644
index 000000000..7eb092840
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001601.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Packages failure
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Packages%20failure&In-Reply-To=%3CAANLkTikPPsXkoKXdPyvWF4kseLqpiSBDy_ensYaCjTxB%40mail.gmail.com%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001600.html">
+ <LINK REL="Next" HREF="001603.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Packages failure</H1>
+ <B>Pascal Terjan</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Packages%20failure&In-Reply-To=%3CAANLkTikPPsXkoKXdPyvWF4kseLqpiSBDy_ensYaCjTxB%40mail.gmail.com%3E"
+ TITLE="[Mageia-sysadm] Packages failure">pterjan at gmail.com
+ </A><BR>
+ <I>Thu Jan 6 16:57:20 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001600.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001603.html">[Mageia-sysadm] Installing and using mgarepo on 2010.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1601">[ date ]</a>
+ <a href="thread.html#1601">[ thread ]</a>
+ <a href="subject.html#1601">[ subject ]</a>
+ <a href="author.html#1601">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Sorry for the spam, I didn't expect my tests to trigger that emails
+
+They are normal failures until mandriva-release-Free in build chroot
+is replaced so that proper distsuffix is used
+
+By the way, current status is that submit works, packages then get
+built and collected, and final upload currently fail because of the
+distsuffix problem
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001600.html">[Mageia-sysadm] Rebuild failed on i586 for @154:grep-2.7-2mga1.0.src.rpm
+</A></li>
+ <LI>Next message: <A HREF="001603.html">[Mageia-sysadm] Installing and using mgarepo on 2010.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1601">[ date ]</a>
+ <a href="thread.html#1601">[ thread ]</a>
+ <a href="subject.html#1601">[ subject ]</a>
+ <a href="author.html#1601">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001602.html b/zarb-ml/mageia-sysadm/2011-January/001602.html
new file mode 100644
index 000000000..ba93dffe7
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001602.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C1294331328.3329.79.camel%40akroma.ephaone.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001597.html">
+ <LINK REL="Next" HREF="001607.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [678] Do not request @mageia.org packager address for now</H1>
+ <B>Michael Scherer</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B678%5D%20Do%20not%20request%20%40mageia.org%20packager%0A%20address%20for%20now&In-Reply-To=%3C1294331328.3329.79.camel%40akroma.ephaone.org%3E"
+ TITLE="[Mageia-sysadm] [678] Do not request @mageia.org packager address for now">misc at zarb.org
+ </A><BR>
+ <I>Thu Jan 6 17:28:48 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001597.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001607.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1602">[ date ]</a>
+ <a href="thread.html#1602">[ thread ]</a>
+ <a href="subject.html#1602">[ subject ]</a>
+ <a href="author.html#1602">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Le jeudi 06 janvier 2011 &#224; 17:39 +0200, Thomas Backlund a &#233;crit :
+&gt;<i> Michael Scherer skrev 6.1.2011 16:49:
+</I>&gt;<i> &gt; Le jeudi 06 janvier 2011 &#224; 16:23 +0200, Thomas Backlund a &#233;crit :
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt;&gt;&gt; - packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;<i> &gt;&gt;&gt; + # packager: '&lt;\S+@&lt;%= escaped_domain %&gt;&gt;$'
+</I>&gt;<i> &gt;&gt;
+</I>&gt;<i> &gt;&gt; What stops us from starting to give out @mageia.org aliases ?
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; Mainly decide who get mageia.org alias.
+</I>&gt;<i> &gt;
+</I>&gt;<i> &gt; IE, who decide who get alias. Are people who open a account on identity,
+</I>&gt;<i> &gt; people who get promoted, etc ?
+</I>&gt;<i> &gt;
+</I>&gt;<i>
+</I>&gt;<i> Well, I'd suggest:
+</I>&gt;<i> founders should definately use @mageia.org
+</I>&gt;<i> marketing should definately use @mageia.org
+</I>&gt;<i> bugzilla/triage team should use @mageia.org
+</I>&gt;<i> forum admins/moderators should use @mageia.org
+</I>Most of the time, that requires to know who is in the team. Ie that the
+team is created and formalized, at least in ldap side.
+And that's not the case for a lot of them.
+
+&gt;<i> packagers should use @mageia.org, that way we can enforce the packager
+</I>&gt;<i> above for all packages going through BS
+</I>yup.
+On the other hand, since people cannot upload without using the account,
+the email issue is purely cosmetic, and set by the BS.
+
+
+&gt;<i> For the other contributors that get svn access (translators/web/...)
+</I>&gt;<i> they could also have the alias (this could be optional, but preferred).
+</I>
+We do have a long list of
+team :<A HREF="http://mageia.org/wiki/doku.php?id=start">http://mageia.org/wiki/doku.php?id=start</A> :)
+
+&gt;<i> For those that only register on identity to get on the forums or to
+</I>&gt;<i> report a bug, no alias (unless requested and promoted maybe)
+</I>
+well, then, this requires that
+1) each team to be formalized and created, with admission process ( ie,
+most are not, so far, we have sysadmin, ml_moderators, packagers,
+commiters
+
+And it would be nice to have the delegation for team membership in
+catdap work ( so far, it is untested )
+
+&gt;<i> &gt; For the rest, the configuration is commented and ready to be deployed
+</I>&gt;<i> &gt; ( after being tested )
+</I>&gt;<i> &gt;
+</I>&gt;<i>
+</I>&gt;<i> I'd say to enable this for founders now so we can test it, and on next
+</I>&gt;<i> founders meeting we could decide if the above suggestion for the rest is ok.
+</I>
+Then founders must create a account on catdap. I would rather postpone
+this for council/board creation, because not everybody seems active, and
+I rather keep account for active people.
+
+And we need to also discuss on the policy for account expiration. Ie,
+how long do people keep the alias after leaving the project ?
+
+But I think you can add to whoever will do the agenda for next meeting
+to discuss this :)
+
+IMHO, that's a project that would requires someone to manage and follow.
+
+--
+Michael Scherer
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001597.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI>Next message: <A HREF="001607.html">[Mageia-sysadm] [678] Do not request @mageia.org packager address for now
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1602">[ date ]</a>
+ <a href="thread.html#1602">[ thread ]</a>
+ <a href="subject.html#1602">[ subject ]</a>
+ <a href="author.html#1602">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001603.html b/zarb-ml/mageia-sysadm/2011-January/001603.html
new file mode 100644
index 000000000..18348d08e
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001603.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] Installing and using mgarepo on 2010.1
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Installing%20and%20using%20mgarepo%20on%202010.1&In-Reply-To=%3C20110106170506.GK21938%40mars-attacks.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="001601.html">
+ <LINK REL="Next" HREF="001606.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] Installing and using mgarepo on 2010.1</H1>
+ <B>nicolas vigier</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20Installing%20and%20using%20mgarepo%20on%202010.1&In-Reply-To=%3C20110106170506.GK21938%40mars-attacks.org%3E"
+ TITLE="[Mageia-sysadm] Installing and using mgarepo on 2010.1">boklm at mars-attacks.org
+ </A><BR>
+ <I>Thu Jan 6 18:05:06 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="001601.html">[Mageia-sysadm] Packages failure
+</A></li>
+ <LI>Next message: <A HREF="001606.html">[Mageia-sysadm] Installing and using mgarepo on 2010.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1603">[ date ]</a>
+ <a href="thread.html#1603">[ thread ]</a>
+ <a href="subject.html#1603">[ subject ]</a>
+ <a href="author.html#1603">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hello,
+
+mgarepo is the new name for repsys on Mageia. On Mandriva 2010.1 you can
+install it using the following repository :
+<A HREF="http://repository.mageia.org/mageiatools/2010.1/i586/core/release/">http://repository.mageia.org/mageiatools/2010.1/i586/core/release/</A>
+ or
+<A HREF="http://repository.mageia.org/mageiatools/2010.1/x86_64/core/release/">http://repository.mageia.org/mageiatools/2010.1/x86_64/core/release/</A>
+
+To install :
+# urpmi.addmedia mageiatools <A HREF="http://repository.mageia.org/mageiatools/2010.1/i586/core/release/">http://repository.mageia.org/mageiatools/2010.1/i586/core/release/</A>
+# urpmi mgarepo
+
+The command to use is still repsys (for now, maybe it will change later).
+
+To import a new package :
+$ repsys import package.src.rpm
+
+The text files and tarballs are now split between two repositories.
+- The spec files and text files are located in :
+ svn+<A HREF="ssh://svn.mageia.org/svn/packages/cauldron">ssh://svn.mageia.org/svn/packages/cauldron</A>
+- The binary files are in :
+ svn+<A HREF="ssh://svn.mageia.org/svn/binrepos/cauldron">ssh://svn.mageia.org/svn/binrepos/cauldron</A>
+
+Using the command &quot;repsys co&quot; it will checkout files from both
+repositories, and add symlinks between SOURCES and SOURCES-bin files :
+$ repsys co packagename
+
+When you need to add a new binary file, put it in the SOURCES directory
+and use the upload command to upload it to the binary repository :
+$ cd SOURCES
+$ wget <A HREF="http://frites.com/file.tar.bz2">http://frites.com/file.tar.bz2</A>
+$ repsys upload file.tar.bz2
+
+Delete is not working at the moment, but when it is fixed, you should be
+able to use the &quot;repsys del&quot; command.
+
+mdvsys is not supported on Mageia at the moment.
+
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="001601.html">[Mageia-sysadm] Packages failure
+</A></li>
+ <LI>Next message: <A HREF="001606.html">[Mageia-sysadm] Installing and using mgarepo on 2010.1
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1603">[ date ]</a>
+ <a href="thread.html#1603">[ thread ]</a>
+ <a href="subject.html#1603">[ subject ]</a>
+ <a href="author.html#1603">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-sysadm">More information about the Mageia-sysadm
+mailing list</a><br>
+</body></html>
diff --git a/zarb-ml/mageia-sysadm/2011-January/001604.html b/zarb-ml/mageia-sysadm/2011-January/001604.html
new file mode 100644
index 000000000..605f17baf
--- /dev/null
+++ b/zarb-ml/mageia-sysadm/2011-January/001604.html
@@ -0,0 +1,6093 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-sysadm] [231] import rpm-setup version cleaned by blino
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B231%5D%20import%20rpm-setup%20version%20cleaned%20by%20blino&In-Reply-To=%3C20110106173006.471AF41A80%40valstar.mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="002500.html">
+ <LINK REL="Next" HREF="001605.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-sysadm] [231] import rpm-setup version cleaned by blino</H1>
+ <B>root at mageia.org</B>
+ <A HREF="mailto:mageia-sysadm%40mageia.org?Subject=Re%3A%20%5BMageia-sysadm%5D%20%5B231%5D%20import%20rpm-setup%20version%20cleaned%20by%20blino&In-Reply-To=%3C20110106173006.471AF41A80%40valstar.mageia.org%3E"
+ TITLE="[Mageia-sysadm] [231] import rpm-setup version cleaned by blino">root at mageia.org
+ </A><BR>
+ <I>Thu Jan 6 18:30:06 CET 2011</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="002500.html">[Mageia-sysadm] Installing and using mgarepo on 2010.1
+</A></li>
+ <LI>Next message: <A HREF="001605.html">[Mageia-sysadm] Upload failed for @188:mgarepo-1.9.3-1mdv2010.1.src.rpm
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#1604">[ date ]</a>
+ <a href="thread.html#1604">[ thread ]</a>
+ <a href="subject.html#1604">[ subject ]</a>
+ <a href="author.html#1604">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Revision: 231
+Author: boklm
+Date: 2011-01-06 18:30:05 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+import rpm-setup version cleaned by blino
+
+Added Paths:
+-----------
+ rpm/
+ rpm/rpm-setup/
+ rpm/rpm-setup/trunk/
+ rpm/rpm-setup/trunk/.perl_checker
+ rpm/rpm-setup/trunk/AUTHORS
+ rpm/rpm-setup/trunk/COPYING
+ rpm/rpm-setup/trunk/INSTALL
+ rpm/rpm-setup/trunk/Makefile.am
+ rpm/rpm-setup/trunk/NEWS
+ rpm/rpm-setup/trunk/README
+ rpm/rpm-setup/trunk/TODO
+ rpm/rpm-setup/trunk/autogen.sh
+ rpm/rpm-setup/trunk/brp-compress
+ rpm/rpm-setup/trunk/brp-strip
+ rpm/rpm-setup/trunk/brp-strip-comment-note
+ rpm/rpm-setup/trunk/brp-strip-static-archive
+ rpm/rpm-setup/trunk/build.macros.in
+ rpm/rpm-setup/trunk/configure.ac
+ rpm/rpm-setup/trunk/filter.sh
+ rpm/rpm-setup/trunk/find-debuginfo.sh
+ rpm/rpm-setup/trunk/find-lang.pl
+ rpm/rpm-setup/trunk/find-provides.in
+ rpm/rpm-setup/trunk/find-provides.perl.in
+ rpm/rpm-setup/trunk/find-requires.in
+ rpm/rpm-setup/trunk/gem_helper.rb
+ rpm/rpm-setup/trunk/git-repository--after-tarball
+ rpm/rpm-setup/trunk/git-repository--apply-patch
+ rpm/rpm-setup/trunk/http.req
+ rpm/rpm-setup/trunk/kmod.prov
+ rpm/rpm-setup/trunk/macros-perarch.in
+ rpm/rpm-setup/trunk/macros.in
+ rpm/rpm-setup/trunk/magic.prov
+ rpm/rpm-setup/trunk/magic.req
+ rpm/rpm-setup/trunk/make_arch_macrosfiles.sh.in
+ rpm/rpm-setup/trunk/perl.prov
+ rpm/rpm-setup/trunk/perl.req
+ rpm/rpm-setup/trunk/perl.req-from-meta
+ rpm/rpm-setup/trunk/php.prov
+ rpm/rpm-setup/trunk/php.req
+ rpm/rpm-setup/trunk/pkgconfigdeps.sh
+ rpm/rpm-setup/trunk/pythoneggs.py
+ rpm/rpm-setup/trunk/rpm-spec-mode.el
+ rpm/rpm-setup/trunk/rpmeval.c
+ rpm/rpm-setup/trunk/rpmgenplatform.in
+ rpm/rpm-setup/trunk/rpmrc.in
+ rpm/rpm-setup/trunk/rubygems.rb
+ rpm/rpm-setup/trunk/tests/
+ rpm/rpm-setup/trunk/tests/findlang.pl
+ rpm/rpm-setup/trunk/tests/findlang.sh
+ rpm/rpm-setup/trunk/tests/macros.sh
+ rpm/rpm-setup/trunk/tests.sh
+
+Added: rpm/rpm-setup/trunk/.perl_checker
+===================================================================
+--- rpm/rpm-setup/trunk/.perl_checker (rev 0)
++++ rpm/rpm-setup/trunk/.perl_checker 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,2 @@
++File::Find
++Pod::Usage
+
+Added: rpm/rpm-setup/trunk/AUTHORS
+===================================================================
+Added: rpm/rpm-setup/trunk/COPYING
+===================================================================
+Added: rpm/rpm-setup/trunk/INSTALL
+===================================================================
+--- rpm/rpm-setup/trunk/INSTALL (rev 0)
++++ rpm/rpm-setup/trunk/INSTALL 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,6 @@
++Basic instructions to build :
++ aclocal
++ libtoolize
++ automake -a
++ autoconf
++ ./configure
+
+Added: rpm/rpm-setup/trunk/Makefile.am
+===================================================================
+--- rpm/rpm-setup/trunk/Makefile.am (rev 0)
++++ rpm/rpm-setup/trunk/Makefile.am 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,155 @@
++# $Id: Makefile.am 271263 2010-11-01 23:20:42Z peroyvind $
++
++arch_macrosfiles = $(RPMALLARCH:=.macros)
++
++pkg_data =
++
++pkg_gdata = \
++ macros
++
++pkg_sysconf_macros_tmp = \
++ build.macros
++
++pkg_data_in = $(pkg_gdata:=.in)
++
++pkg_sysconf_macros_in = $(pkg_sysconf_macros_tmp:=.in)
++
++pkg_sysconf_macros = $(pkg_sysconf_macros_tmp)
++
++pkg_gconfig = \
++ platform \
++ $(if $(CANONTARGETCPU32), platform32, )
++
++pkg_scripts = \
++ brp-compress \
++ brp-strip \
++ brp-strip-comment-note \
++ brp-strip-static-archive \
++ filter.sh \
++ find-lang.pl \
++ find-debuginfo.sh \
++ gem_helper.rb \
++ git-repository--after-tarball \
++ git-repository--apply-patch \
++ http.req \
++ magic.prov \
++ magic.req \
++ kmod.prov \
++ perl.prov \
++ perl.req \
++ perl.req-from-meta \
++ php.prov \
++ php.req \
++ pkgconfigdeps.sh \
++ pythoneggs.py \
++ rubygems.rb
++
++pkg_gscripts = \
++ find-provides \
++ find-requires \
++ find-provides.perl
++
++pkg_scripts_in = $(pkg_gscripts:=.in)
++
++BUILT_SOURCES = macros-perarch make_arch_macrosfiles.sh rpmgenplatform
++
++pkglibdir = @RPMVENDORDIR@
++
++noinst_PROGRAMS = rpmeval
++
++rpmeval_SOURCES = rpmeval.c
++
++rpmeval_LDFLAGS = -lrpm
++
++noinst_DATA = $(pkg_gconfig)
++
++pkglib_DATA = \
++ $(pkg_data) \
++ $(pkg_gdata)
++ $(pkg_gconfig)
++
++pkglib_SCRIPTS = \
++ $(pkg_scripts) \
++ $(pkg_gscripts)
++
++EXTRA_DIST = \
++ $(pkg_data) \
++ $(pkg_data_in) \
++ $(pkg_sysconf_macros_in) \
++ $(pkg_scripts) \
++ $(pkg_scripts_in) \
++ macros-perarch.in make_arch_macrosfiles.sh.in \
++ rpmgenplatform.in rpmrc.in \
++ rpm-spec-mode.el \
++ tests.sh tests/macros.sh \
++ tests/findlang.pl tests/findlang.sh
++
++edit = sed \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMVENDOR</A>\@,$(RPMVENDOR),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMVENDORDIR</A>\@,$(RPMVENDORDIR),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMCANONVENDOR</A>\@,$(RPMCANONVENDOR),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMLIBDIR</A>\@,$(RPMLIBDIR),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMSYSCONFDIR</A>\@,$(RPMSYSCONFDIR),g'\
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMOS</A>\@,$(RPMOS),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at CANONTARGETCPU</A>\@,$(CANONTARGETCPU),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at CANONTARGETGNU</A>\@,$(CANONTARGETGNU),g' \
++ -e '<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMALLARCH</A>\@,$(RPMALLARCH),g'
++
++%: %.in Makefile
++ $(edit) $&lt; &gt; $@
++
++$(arch_macrosfiles): rpmrc macros-perarch make_arch_macrosfiles.sh
++ arch=`echo $@ | sed 's,\\.macros,,'`; \
++ sh ./make_arch_macrosfiles.sh macros-perarch $$arch &gt; $@
++
++platform: rpmgenplatform Makefile
++ perl rpmgenplatform $(CANONTARGETCPU) &gt; $@
++
++platform32: rpmgenplatform Makefile
++ perl rpmgenplatform $(CANONTARGETCPU32) &gt; $@
++
++install-data-local: $(arch_macrosfiles) $(pkg_gconfig) $(pkg_sysconf_macros_tmp)
++if ONLY_RPMRC
++ echo &quot;not installing per-arch macros which are already in rpmrc and standard rpm per-arch macros&quot;
++else
++ for i in $(RPMALLARCH); do \
++ $(mkinstalldirs) $(DESTDIR)$(RPMVENDORDIR)/platform/$${i}-$(RPMOS); \
++ $(install_sh_DATA) $${i}.macros $(DESTDIR)$(RPMVENDORDIR)/platform/$${i}-$(RPMOS)/macros; \
++ done
++endif
++ [ -d $(DESTDIR)$(RPMSYSCONFDIR)/macros.d ] || $(mkinstalldirs) $(DESTDIR)$(RPMSYSCONFDIR)/macros.d
++ for i in $(pkg_sysconf_macros); do \
++ $(install_sh_DATA) $${i} $(DESTDIR)$(RPMSYSCONFDIR)/macros.d/$${i}; \
++ done
++if RPMPLATFORM
++ for i in $(pkg_gconfig); do \
++ $(install_sh_DATA) $${i} $(DESTDIR)$(RPMSYSCONFDIR)/$${i}; \
++ done
++ $(install_sh_SCRIPT) rpmgenplatform $(DESTDIR)$(bindir)/rpmgenplatform
++endif
++
++.PHONY: ChangeLog test
++
++ChangeLog:
++ @if [ -e &quot;.svn&quot; ]; then \
++ $(MAKE) ChangeLog-svn; \
++ elif [ -e &quot;.git&quot; ]; then \
++ $(MAKE) ChangeLog-git; \
++ else \
++ echo &quot;Unknown SCM (not SVN nor GIT)&quot;;\
++ exit 1; \
++ fi;
++
++ChangeLog-svn:
++ LC_ALL=C svn2cl
++ rm -f *.bak
++
++ChangeLog-git:
++ @git2cl &gt;ChangeLog
++
++test: $(pkg_gdata) $(pkg_gscripts) $(arch_macrosfiles) $(pkg_gconfig)
++ sh tests.sh
++
++CLEANFILES = $(pkg_gdata) $(pkg_gscripts) $(arch_macrosfiles) $(pkg_gconfig)\
++ rpmrc macros-perarch $(pkg_sysconf_macros_tmp) \
++ make_arch_macrosfiles.sh
+
+Added: rpm/rpm-setup/trunk/NEWS
+===================================================================
+--- rpm/rpm-setup/trunk/NEWS (rev 0)
++++ rpm/rpm-setup/trunk/NEWS 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,113 @@
++Version 1.113 - 2 November 2010, by Funda Wang
++- find gstreamer provides
++
++Version 1.112 - 1 November 2010, by Per &#216;yvind Karlsen
++- enable python egg provides/requires.
++
++Version 1.111 - 30 October 2010, by Anssi Hannula
++- generate requires on &quot;python(abi) = x.y&quot; instead of &quot;python &gt;= x.y&quot; for
++ python modules to properly handle the strict dependency
++- remove runtime dependencies from %py_requires as they are now handled
++ automatically
++
++Version 1.110 - 18 October 2010, by Per &#216;yvind Karlsen
++- fix warning from rubygems.rb
++- drop %gem_unpack, equivalent behaviour has been implemented in %setup now
++
++Version 1.109 - 16 October 2010, by Per &#216;yvind Karlsen
++- don't install dependencies for gems when using %gem_install
++- fix build with rpm 5.3
++
++Version 1.108 - 16 October 2010, by Per &#216;yvind Karlsen
++- add gem_helper.rb and it's corresponding macros %gem_unpack, %gem_build &amp;
++ gem_install for simplifying &amp; streamlining ruby gem packaging.
++
++Version 1.107 - 9 September 2010, by Per &#216;yvind Karlsen
++- enable automatic dependency extraction for ruby gems
++
++Version 1.106 - 16 July 2010, by Jerome Quelin
++- extract perl module version when $Full::Package::VERSION is set
++
++Version 1.105 - 14 July 2010, by Jerome Quelin
++- support to extract perl runtime requires from meta spec 2
++
++Version 1.104 - 27 April 2010, by Christophe Fergeau
++- revert previous '-g' addition when stripping shared libraries since it
++ increases shared library sizes by 10 to 20% for no good reason
++
++Version 1.103 - 16 April 2010, by Per &#216;yvind Karlsen
++- strip shared libraries with the '-g' option
++
++Version 1.102 - 8 April 2010, by Michael Scherer
++- do not requires python 2.X branch rpm for python 3.X modules,
++ requires instead python 3.X interpreter
++
++Version 1.101 - 26 March 2010, by Jerome Quelin
++- fix find-requires to call perl.req-from-meta with the correct meta
++ file when there are multiple meta file in the package
++
++Version 1.100 - 14 March 2010, by Jerome Quelin
++- fix find-requires to look for correct meta.yml before calling
++ perl.req-from-meta
++- make perl.prov skip comment lines
++
++Version 1.99 - 9 March 2010, by Per &#216;yvind Karlsen
++- allow for for only stripping files without creating debug package contents by
++ setting DISABLE_DEBUG environment variable.
++
++Version 1.98 - 5 March 2010, by Per &#216;yvind Karlsen
++- Update find-debuginfo.sh from upstream
++- new script: perl.req-from-meta (jquelin)
++
++Version 1.97 - 12 December 2009, by Anssi Hannula
++- fix package build when the debug package is empty (regression introduded in
++ 1.96)
++
++Version 1.96 - 10 December 2009, by Anssi Hannula
++- fix perl.prov to assign versions to provides when the version is declared
++ with 'our' or 'my' keyword, or when it is prepended with code
++ (J&#233;r&#244;me Quelin)
++- replace %sunsparc with %sparc &amp; %sparcx (from rpm5.org, Per &#216;yvind Karlsen)
++- support ELF executables only as a.out has been deprecated since ages
++ ago (fixes objdump 'File format not recognized' errors) (Per &#216;yvind Karlsen)
++- don't try finding debug files in buildroot when there's none
++ (Per &#216;yvind Karlsen)
++
++Version 1.95 - 25 September 2009, by Olivier Blin
++- MIPS and ARM support (from Arnaud Patard):
++ o add mipsel support
++ o introduce CANONTARGETGNU, to be able to use -gnueabi for ARM
++ o add arm support and use -gnueabi instead of -gnu
++
++Version 1.94 - 8 August 2009, by Anssi Hannula
++- update perl_convert_version to keep alphabetic tail in version number
++ (Luca Berra)
++
++Version 1.93 - 28 July 2009, by Christophe Fergeau
++- update perl_convert_version macro (J&#233;r&#244;me Quelin)
++
++Version 1.92 - 9 July 2009, by Christophe Fergeau
++- making sure automatic provides &amp; requires for perl package are using the
++ new macro %perl_convert_version (jquelin)
++- rpm5 fixes (peroyvind)
++
++Version 1.91 - 3 February 2009, by Christophe Fergeau
++- build.macros.in
++ o add new perl_convert_version macro to convert cpan version to rpm version
++- git-repository--after-tarball:
++ o commit the tarball with user &quot;unknown author &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">cooker at mandrivalinux.org</A>&gt;&quot;
++ o commit the tarball using the tarball's modification time
++
++Version 1.90 - 29 January 2009, by Pixel
++
++- call patch with -U (aka --unified-reject-files)
++
++Version 1.89 - 29 January 2009, by Pixel
++
++- when %_with_git_repository is set, define %_after_setup and %_patch to use
++ the new scripts git-repository--after-tarball and git-repository--apply-patch
++
++Version 1.88 - 7 January 2009, by Christophe Fergeau
++
++- fix ugly warning during invocation of php.req
++- RPM5 fixes
+
+Added: rpm/rpm-setup/trunk/README
+===================================================================
+--- rpm/rpm-setup/trunk/README (rev 0)
++++ rpm/rpm-setup/trunk/README 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,37 @@
++rpm-mageia-setup
++$Id: README 22754 2007-02-22 13:03:02Z nanardon $
++
++This package contains configuration and script for the Mageia rpm.
++
++Some file come from .in, this allow to transform path for testing purpose.
++If your file or script contains path, you should make a .in files.
++
++* About macros:
++Only redefine macros in this package if the rpm one does not please to you.
++
++All macros having same body should go into macros.in.
++If the macros body change:
++- add a symbolic value into macros-perarch.in (@foo@)
++- add the value into make_macrosfiles.sh.in
++
++Example:
++%_libdir /use/%_lib =&gt; macros.in
++%_lib lib|lib64 =&gt; macros-perarch.in
++
++* Testing the monster
++
++o First and easy way:
++$ make test
++
++o Live tests:
++
++$ ./configure --with-rpmconfdir=$fakeroot --with-rpmlibdir=/usr/lib/rpm --with-rpmsysconfdir=/etc
++
++This will configure the package for an installation into fakeroot, using rpm files in /usr/lib/rpm.
++$ make
++$ make install
++
++Now we can say to rpm to use fake config:
++rpm --rcfile $fakeroot/mageia/rpmrc other command...
++
++Happy Hacking
+
+Added: rpm/rpm-setup/trunk/TODO
+===================================================================
+--- rpm/rpm-setup/trunk/TODO (rev 0)
++++ rpm/rpm-setup/trunk/TODO 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,3 @@
++- add tests, tests, and tests !
++- rewrite kmod.prov in perl, would make the script clearer
++
+
+Added: rpm/rpm-setup/trunk/autogen.sh
+===================================================================
+--- rpm/rpm-setup/trunk/autogen.sh (rev 0)
++++ rpm/rpm-setup/trunk/autogen.sh 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,5 @@
++#!/bin/sh
++libtoolize --force --copy
++aclocal
++autoconf
++automake -a -c
+
+
+Property changes on: rpm/rpm-setup/trunk/autogen.sh
+___________________________________________________________________
+Added: svn:executable
+ + *
+Added: svn:eol-style
+ + native
+
+Added: rpm/rpm-setup/trunk/brp-compress
+===================================================================
+--- rpm/rpm-setup/trunk/brp-compress (rev 0)
++++ rpm/rpm-setup/trunk/brp-compress 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,58 @@
++#!/bin/sh
++
++# $Id: brp-compress 11488 2005-04-29 03:14:31Z othauvin $
++
++# If using normal root, avoid changing anything.
++if [ -z &quot;$RPM_BUILD_ROOT&quot; -o &quot;$RPM_BUILD_ROOT&quot; = &quot;/&quot; ]; then
++ exit 0
++fi
++
++cd $RPM_BUILD_ROOT
++
++# Compress man pages
++COMPRESS=&quot;bzip2 -9&quot;
++COMPRESS_EXT=.bz2
++
++for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \
++ ./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \
++ ./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \
++ ./usr/share/doc/*/man/man* ./usr/lib/*/man/man*
++do
++ [ -d $d ] || continue
++ for f in `find $d -type f`
++ do
++ [ -f &quot;$f&quot; ] || continue
++ [ &quot;`basename $f`&quot; = &quot;dir&quot; ] &amp;&amp; continue
++
++ case &quot;$f&quot; in
++ *.Z) gunzip $f; b=`echo $f | sed -e 's/\.Z$//'`;;
++ *.gz) gunzip $f; b=`echo $f | sed -e 's/\.gz$//'`;;
++ *.bz2) bunzip2 $f; b=`echo $f | sed -e 's/\.bz2$//'`;;
++ *) b=$f;;
++ esac
++
++ $COMPRESS $b &lt;/dev/null 2&gt;/dev/null || {
++ inode=`ls -i $b | awk '{ print $1 }'`
++ others=`find $d -type f -inum $inode`
++ if [ -n &quot;$others&quot; ]; then
++ for afile in $others ; do
++ [ &quot;$afile&quot; != &quot;$b&quot; ] &amp;&amp; rm -f $afile
++ done
++ $COMPRESS -f $b
++ for afile in $others ; do
++ [ &quot;$afile&quot; != &quot;$b&quot; ] &amp;&amp; ln $b$COMPRESS_EXT $afile$COMPRESS_EXT
++ done
++ else
++ $COMPRESS -f $b
++ fi
++ }
++ done
++
++ for f in `find $d -type l`
++ do
++ l=`ls -l $f | sed -e 's/.* -&gt; //' -e 's/\.gz$//' -e 's/\.bz2$//' -e 's/\.Z$//'`
++ rm -f $f
++ b=`echo $f | sed -e 's/\.gz$//' -e 's/\.bz2$//' -e 's/\.Z$//'`
++ ln -sf $l$COMPRESS_EXT $b$COMPRESS_EXT
++ done
++done
+
+
+Property changes on: rpm/rpm-setup/trunk/brp-compress
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/brp-strip
+===================================================================
+--- rpm/rpm-setup/trunk/brp-strip (rev 0)
++++ rpm/rpm-setup/trunk/brp-strip 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,13 @@
++#!/bin/sh
++# If using normal root, avoid changing anything.
++if [ -z &quot;$RPM_BUILD_ROOT&quot; -o &quot;$RPM_BUILD_ROOT&quot; = &quot;/&quot; ]; then
++ exit 0
++fi
++
++# Strip ELF binaries
++for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
++ grep -v &quot;^${RPM_BUILD_ROOT}/\?usr/lib/debug&quot; | \
++ grep -v ' shared object,' | \
++ sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped/\1/p'`; do
++ strip -g $f || :
++done
+
+
+Property changes on: rpm/rpm-setup/trunk/brp-strip
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/brp-strip-comment-note
+===================================================================
+--- rpm/rpm-setup/trunk/brp-strip-comment-note (rev 0)
++++ rpm/rpm-setup/trunk/brp-strip-comment-note 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,18 @@
++#!/bin/sh
++# If using normal root, avoid changing anything.
++if [ -z &quot;$RPM_BUILD_ROOT&quot; -o &quot;$RPM_BUILD_ROOT&quot; = &quot;/&quot; ]; then
++ exit 0
++fi
++
++# Strip .comment and .note sections (the latter only if it is not allocated)
++# for already stripped elf files in the build root
++for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
++ grep -v &quot;^${RPM_BUILD_ROOT}/\?usr/lib/debug&quot; | \
++ sed -n -e 's/^\(.*\):[ ]*ELF.*, stripped/\1/p'`; do
++ note=&quot;-R .note&quot;
++ if objdump -h $f 2&gt;/dev/null | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
++ grep ALLOC &gt;/dev/null; then
++ note=
++ fi
++ strip -R .comment $note $f || :
++done
+
+
+Property changes on: rpm/rpm-setup/trunk/brp-strip-comment-note
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/brp-strip-static-archive
+===================================================================
+--- rpm/rpm-setup/trunk/brp-strip-static-archive (rev 0)
++++ rpm/rpm-setup/trunk/brp-strip-static-archive 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,13 @@
++#!/bin/sh
++
++if [ -z &quot;$RPM_BUILD_ROOT&quot; -o &quot;$RPM_BUILD_ROOT&quot; = &quot;/&quot; ]; then
++ exit 0
++fi
++
++# Strip static libraries.
++for f in `find $RPM_BUILD_ROOT -type f -a -exec file {} \; | \
++ grep -v &quot;^${RPM_BUILD_ROOT}/\?usr/lib/debug&quot; | \
++ grep 'current ar archive' | \
++ sed -n -e 's/^\(.*\):[ ]*current ar archive/\1/p'`; do
++ strip -g $f
++done
+
+
+Property changes on: rpm/rpm-setup/trunk/brp-strip-static-archive
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/build.macros.in
+===================================================================
+--- rpm/rpm-setup/trunk/build.macros.in (rev 0)
++++ rpm/rpm-setup/trunk/build.macros.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,349 @@
++
++%__gzip /usr/bin/gzip
++
++%_sys_macros_dir @RPMSYSCONFDIR@/macros.d
++%build_sysmacrospath() %{_sys_macros_dir}/%{?1:%{1}}%{?!1:%{name}}.macros
++
++# [Pixel, Dec 2008] deprecated, to remove as soon as rpm 4.6.0 dust settles down
++%defaultbuildroot %{_tmppath}/%{name}-%{version}-%{release}-buildroot
++
++
++# when %_with_git_repository is set, these macros modify the behaviour of &quot;%prep&quot; step:
++%_after_setup %{?_with_git_repository:GIT_URL=&quot;%{?git_url}&quot; GIT_REPOSITORY_CACHE=%{?git_repository_cache} @RPMVENDORDIR@/git-repository--after-tarball}
++%_patch %{?_with_git_repository:PKG_NAME=%{name} @RPMVENDORDIR@/git-repository--apply-patch}%{?!_with_git_repository:%__patch -U}
++
++# used by &quot;git-repository--after-tarball&quot;:
++%git_repository_cache %_topdir/%{name}.git
++
++
++# Various programs used in rpm scripts
++%_update_desktop_database_bin %{_bindir}/update-desktop-database
++%_update_mime_database_bin %{_bindir}/update-mime-database
++%_update_icon_cache_bin %{_bindir}/gtk-update-icon-cache
++%_gconftool_bin %{_bindir}/gconftool-2
++%_scrollkeeper_bin %{_bindir}/scrollkeeper-update
++
++%__service /sbin/service
++%__chkconfig /sbin/chkconfig
++
++#==============================================================================
++# ---- Required rpmrc macros.
++# Macros that used to be initialized as a side effect of rpmrc parsing.
++# These are the default values that can be overridden by other
++# (e.g. per-platform, per-system, per-packager, per-package) macros.
++#
++
++%debug_package_and_restore %{debug_package} \
++%package __restore__\
++Summary: %{summary}\
++Group: %{group}\
++%description __restore__
++
++%ix86 i386 i486 i586 i686 pentium3 pentium4 athlon k6
++
++%sparc sun4 sun4m sun4c sun4d sun4u sparcv9b sparcv9v2 %{sparcx}
++%sparcx sparc sparcv8 sparcv9 sparcv9v sparc64 sparc64v
++
++# Multilibs
++%_multilibpatt (/%{_lib}|/usr/%{_lib}(|/gconv)|/usr/local/%{_lib}|/usr/X11R6/%{_lib}|/opt/%{_lib})/[^/]*\\.([oa]|la|so[0-9.]*)$
++
++%_arch_tag_suffix (%_lib)
++%arch_tagged() %{1}%{_arch_tag_suffix} %{?2:%{2} %{3}%{?!3:%{error:undefined 3rd argument in arch_tagged}}}
++
++# Games macros
++%_gamesdir games
++%_gamesbindir %{_prefix}/%{_gamesdir}
++%_gamesdatadir %{_datadir}/%{_gamesdir}
++
++# Menu directories
++%_menudir %{_prefix}/lib/menu
++%_iconsdir %{_datadir}/icons
++%_miconsdir %{_datadir}/icons/mini
++%_liconsdir %{_datadir}/icons/large
++
++%_xfontdir %_datadir/fonts
++
++%_webconfdir %{_sysconfdir}/httpd/conf
++%_webappconfdir %_webconfdir/webapps.d
++# compatibility
++%webappconfdir %_webappconfdir
++
++#==============================================================================
++# ---- Build configuration macros.
++#
++# Package version macro.
++# The type of package to produce, for compatibility with legacy
++# versions of rpm.
++#
++# Script gets packaged file list on input.
++# Returns list of multiarch files that are not marked as such,
++# i.e. files in $RPM_BUILD_ROOT that have arch-dependent values
++#
++# Note: Disable (by commenting out) for legacy compatibility.
++#%__check_multiarch_files @RPMLIBDIR@/check-multiarch-files %{buildroot}
++
++# Use internal dependency generator rather than external helpers?
++%_use_internal_dependency_generator 0
++
++%__find_provides @RPMVENDORDIR@/filter.sh '%{?_provides_exceptions:%{_provides_exceptions}}%{!?_provides_exceptions: }' '%{?_exclude_files_from_autoprov:%{_exclude_files_from_autoprov}}%{!?_exclude_files_from_autoprov: }' '%{buildroot}' @RPMVENDORDIR@/find-provides
++%__find_requires @RPMVENDORDIR@/filter.sh '%{?_requires_exceptions:%{_requires_exceptions}}%{!?_requires_exceptions: }' '%{?_exclude_files_from_autoreq:%{_exclude_files_from_autoreq}}%{!?_exclude_files_from_autoreq: }' '%{buildroot}' @RPMVENDORDIR@/find-requires %{?buildroot:%{buildroot}} %{?_target_cpu:%{_target_cpu}}
++
++%find_lang @RPMVENDORDIR@/find-lang.pl %{buildroot}
++
++# stuff below has been deprecated by rpm filetriggers [June 2008]
++%update_menus %{nil}
++%clean_menus %{nil}
++%update_desktop_database %{nil}
++%clean_desktop_database %{nil}
++%update_mime_database %{nil}
++%clean_mime_database %{nil}
++%update_scrollkeeper %{nil}
++%clean_scrollkeeper %{nil}
++
++# Update Menu
++%_update_menus_bin %{_bindir}/update-menus
++
++# Update Window Managers session.
++%_fndsession_bin %{_sbindir}/fndSession
++%make_session %{nil}
++%make_dm_session if [ -x %{_fndsession_bin} ]; then %{_fndsession_bin} || true ; fi \
++%{nil}
++
++# For rebuilding gcj-db
++%_rebuildgcjdb_bin %{_bindir}/rebuild-gcj-db
++%update_gcjdb if [ -x %{_rebuildgcjdb_bin} ]; then %{_rebuildgcjdb_bin} || true ; fi \
++%{nil}
++
++%clean_gcjdb if [ -x %{_rebuildgcjdb_bin} ]; then %{_rebuildgcjdb_bin} || true ; fi \
++%{nil}
++
++# Rebuild icon cache
++#
++# following themes are handled through filetriggers:
++%icon_cache_through_filetrigger_hicolor 1
++%icon_cache_through_filetrigger_gnome 1
++%icon_cache_through_filetrigger_oxygen 1
++
++%update_icon_cache() %{expand: %%{!?icon_cache_through_filetrigger_%1:if [ -x %%{_update_icon_cache_bin} ]; then \
++%%{_update_icon_cache_bin} --force --quiet %%{_iconsdir}/%%{1} || true; fi \
++%%{nil}}}
++
++%clean_icon_cache() %{expand: %%{!?icon_cache_through_filetrigger_%1:if [ -x %%{_update_icon_cache_bin} -a -r %%{_iconsdir}/%%{1}/index.theme ]; then \
++%%{_update_icon_cache_bin} --force --quiet %%{_iconsdir}/%%{1} || true ; fi \
++%%{nil}}}
++
++# GConf schemas:
++# installation is handled by filetriggers
++%post_install_gconf_schemas() %{nil}
++# but uninstall still need to be done in %preun:
++%preun_uninstall_gconf_schemas() if [ &quot;$1&quot; = &quot;0&quot; -a -x %{_gconftool_bin} ]; then \
++SCHEMAS=&quot;&quot; \
++for SCHEMA in %{*} ; do \
++ SCHEMAS=&quot;$SCHEMAS %{_sysconfdir}/gconf/schemas/$SCHEMA.schemas&quot; \
++done \
++GCONF_CONFIG_SOURCE=`%{_gconftool_bin} --get-default-source` %{_gconftool_bin} --makefile-uninstall-rule $SCHEMAS &gt; /dev/null || true ; fi \
++%{nil}
++
++# Mageia Linux version
++# - &quot;9.1&quot; =&gt; 910
++# - &quot;10.2.2&quot; =&gt; 1022
++# (user may copy the following line in specfile)
++%mgaversion %(perl -pe '/(\\d+)\\.(\\d)\\.?(\\d)?/; $_=&quot;$1$2&quot;.($3||0)' /etc/release)
++
++%distsuffix mga
++
++%mkrel(c:) %{-c: 0.%{-c*}.}%{1}%{?subrel:.%subrel}%{?distsuffix:%distsuffix}%{?!distsuffix:mga}%{?distro_release:%distro_release}
++
++#==============================================================================
++# ---- Build policy macros.
++#
++#---------------------------------------------------------------------
++# Expanded at end of %install scriptlet.
++#
++
++%__os_install_post \
++ %{?__spec_helper_post}%{?!__spec_helper_post:/usr/share/spec-helper/spec-helper} \
++%{nil}
++
++%__debug_install_post \
++ @RPMVENDORDIR@/find-debuginfo.sh &quot;%{_builddir}/%{?buildsubdir}&quot;\
++%{nil}
++
++
++#==============================================================================
++# ---- specfile macros.
++# Macro(s) here can be used reliably for reproducible builds.
++# (Note: Above is the goal, below are the macros under development)
++#
++
++%old_makeinstall \
++ make \\\
++ prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\
++ exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\
++ bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\
++ sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\
++ sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\
++ datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\
++ includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\
++ libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\
++ libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\
++ localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\
++ sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\
++ mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\
++ infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\
++ install
++
++
++#------------------------------------------------------------------------------
++# Useful python macros
++%pyver %(python -V 2&gt;&amp;1 | cut -f2 -d&quot; &quot; | cut -f1,2 -d&quot;.&quot;)
++
++#------------------------------------------------------------------------------
++# Useful perl macros
++# (initially from Artur Frysiak &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">wiget at t17.ds.pwr.wroc.pl</A>&gt;)
++# (modified by Pixel &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">pixel at mandriva.com</A>&gt;)
++#
++# [...]
++# Group: Development/Perl
++# [...]
++# %build
++# perl Makefile.PL INSTALLDIRS=vendor
++# %make
++# [...]
++# %install
++# rm -rf $RPM_BUILD_ROOT
++# make install PREFIX=&quot;$RPM_BUILD_ROOT/%{prefix}&quot;
++# [...]
++# %files
++# %defattr(644,root,root,755)
++# %{perl_vendorlib}/CGI
++# or
++# %{perl_vendorarch}/DBI
++# %{perl_vendorarch}/auto/DBI
++# %{_mandir}/*/*
++#
++
++
++%perl_convert_version() %(perl -Mversion -le '
++ $x = &quot;%{1}&quot;;
++ $y = $x;
++ $x =~ s/[[:alpha:]]*$//;
++ $y =~ s/^$x//;
++ $x =~ s/\D*$//;
++ $v = version-&gt;new($x)-&gt;normal;
++ $v =~ s/^v//;
++ print &quot;$v$y&quot;;
++')
++
++# kept for compatibility, but should not be used, especially the ugly perl_archlib!
++%perl_sitearch %(eval &quot;`perl -V:installsitearch`&quot;; echo $installsitearch)
++%perl_archlib %(eval &quot;`perl -V:installarchlib`&quot;; echo $installarchlib)
++
++#--------------------------------------------------------------------------------
++# Macro from conectiva
++
++%rename() \
++Obsoletes: %{1} &lt; %{version}-%{release} \
++Provides: %{1} = %{version}-%{release}
++
++# Shorthand for %{defined with_...}
++# macros provided by rpm 4.4, but buggy :(
++%_with() %{expand: %%{?_with_%1:1} %%{!?_with_%1: %%{?_without_%1:0} %%{!?_without_%1: %%{?with_%1:%%{with_%1}} %%{!?with_%1: %%{?without_%1:!%%{without_%1}} %%{!?without_%1: %%{?2:%%2} %%{!?2:1} } } } } }
++%_without() !%{expand: %%{with %1 %{?2:%2}}}
++
++%_package_i18n(g:f:) \
++%%package -n %{?1:%{1}}%{?!1:%{name}}-i18n\
++Summary: Internationalization and locale data for %{?1:%{1}}%{?!1:%{name}}\
++License: %{license}\
++Group: %{?-g:%{-g*}}%{?!-g:%{group}}\
++\
++%%description -n %{?1:%{1}}%{?!1:%{name}}-i18n\
++Internationalization and locale data for %{?1:%{1}}%{?!1:%{name}}\
++\
++%%files -n %{?1:%{1}}%{?!1:%{name}}-i18n %{?-f:%{-f}}%{?!-f:-f %{?1:%{1}}%{?!1:%{name}}.lang}\
++%{nil}
++
++
++#------------------------------------------------------------------------------
++# Python specific macros
++
++# (from rpm 4.4.6)
++%python_sitearch %(%{__python} -c &quot;from distutils.sysconfig import get_python_lib; print get_python_lib(1)&quot;)
++%python_sitelib %(%{__python} -c &quot;from distutils.sysconfig import get_python_lib; print get_python_lib()&quot;)
++%python_version %(%{__python} -c &quot;import sys; print(sys.version[0:3])&quot;)
++
++# More Python specific macro definitions (originally from PLD).
++#
++%py_ver %(python -c &quot;import sys; v=sys.version_info[:2]; print '%%d.%%d'%%v&quot; 2&gt;/dev/null || echo PYTHON-NOT-FOUND)
++%py_prefix %(python -c &quot;import sys; print sys.prefix&quot; 2&gt;/dev/null || echo PYTHON-NOT-FOUND)
++# backward compatibility
++%py_libdir %py_purelibdir
++%py_platlibdir %(python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib(standard_lib=1,plat_specific=1)' 2&gt;/dev/null || echo PYTHON-LIBDIR-NOT-FOUND)
++%py_purelibdir %(python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib(standard_lib=1,plat_specific=0)' 2&gt;/dev/null || echo PYTHON-LIBDIR-NOT-FOUND)
++%py_incdir %(python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_inc()' 2&gt;/dev/null || echo PYTHON-INCLUDEDIR-NOT-FOUND)
++%py_sitedir %py_puresitedir
++%py_platsitedir %(python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib(plat_specific=1)' 2&gt;/dev/null || echo PYTHON-LIBDIR-NOT-FOUND)
++%py_puresitedir %(python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib()' 2&gt;/dev/null || echo PYTHON-LIBDIR-NOT-FOUND)
++
++%py_compile(O) \
++find %1 -name '*.pyc' -exec rm -f {} \\; \
++python -c &quot;import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)&quot; %1 \
++%{-O: \
++find %1 -name '*.pyo' -exec rm -f {} \\; \
++python -O -c &quot;import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)&quot; %1 \
++}
++%py_requires(d) \
++BuildRequires: python %{-d:python-devel}
++
++
++#------------------------------------------------------------------------------
++# Ocaml macro
++#
++
++%ocaml_sitelib %(if [ -x /usr/bin/ocamlc ]; then ocamlc -where;fi)/site-lib
++
++#------------------------------------------------------------------------------
++# Ruby gem macros
++#
++
++%__gem_helper @RPMVENDORDIR@/gem_helper.rb
++
++%gem_build(f:j:) \
++ %__gem_helper build \\\
++ %{-f:-f%{-f*}} \\\
++ %{!-j:%{_smp_mflags}}%{-j:-j%{-j*}}
++
++%gem_install(i:n:C) \
++ DESTDIR=${DESTDIR:-%{buildroot}} \\\
++ %__gem_helper install \\\
++ --env-shebang --rdoc --ri --force --ignore-dependencies \\\
++ %{!-i:--install-dir %{buildroot}%{ruby_gemdir}}%{-i:--install-dir %{-i*}} \\\
++ %{!-n:--bindir %{buildroot}%{_bindir}}%{-n:--bindir%{-n*}} \\\
++ %{!-C:--fix-permissions}
++
++#------------------------------------------------------------------------------
++# Redefine RPM sections to allow jumping over them using &quot;--without &lt;section&gt;&quot;.
++# This an interesting alternative to --short-circuit.
++# The following are mostly equivalent:
++# % rpmbuild -bi --short-circuit foo.spec &amp;&amp; rpmbuild -bb --short-circuit foo.spec
++# % rpmbuild -bb --without build foo.spec
++
++%prep %%prep \
++[ %{_with prep} -eq 1 ] || exit 0 \
++[ %{_with build} -eq 1 ] || exit 0 \
++[ %{_with install} -eq 1 ] || exit 0 \
++%{nil}
++
++%build %%build \
++[ %{_with install} -eq 1 ] || exit 0 \
++[ %{_with build} -eq 1 ] || exit 0 \
++%{nil}
++
++%install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package_and_restore}}}\
++%%install\
++[ %{_with install} -eq 1 ] || exit 0 \
++%{nil}
++
++%check %%check \
++[ %{_with check} -eq 1 ] || exit 0 \
++%{nil}
+
+Added: rpm/rpm-setup/trunk/configure.ac
+===================================================================
+--- rpm/rpm-setup/trunk/configure.ac (rev 0)
++++ rpm/rpm-setup/trunk/configure.ac 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,168 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++# $Id: configure.ac 271266 2010-11-04 10:43:28Z fwang $
++
++AC_PREREQ(2.59)
++AC_INIT(rpm-mageia-setup, 1.114, <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">nanardon at mageia.org</A>)
++AC_CANONICAL_TARGET
++AM_INIT_AUTOMAKE(1.9 -Wno-portability)
++AC_CONFIG_SRCDIR
++
++# Checks for programs.
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_PROG_LIBTOOL
++AC_CONFIG_FILES([
++ Makefile
++ ])
++
++dnl See if we have pkgconfig for rpm, resort to old behavior if not
++PKG_CHECK_MODULES([RPM], [rpm], [
++ AC_DEFINE_UNQUOTED([HAVE_RPM],1,[Define if RPM backend is available])
++ CPPFLAGS=&quot;$RPM_CFLAGS $CPPFLAGS&quot;
++ LDFLAGS=&quot;$RPM_LIBS $LDFLAGS&quot;
++ ], [
++ AC_PATH_PROG(RPM_PATH,rpm,none)
++ if test &quot;$RPM_PATH&quot; = &quot;none&quot;; then
++ AC_MSG_ERROR([RPM executable was not found in your system])
++ else
++ AC_DEFINE_UNQUOTED([HAVE_RPM],1,[Define if RPM backend is available])
++ fi
++ ]
++)
++
++AC_CHECK_LIB([rpmio], [rpmLoadMacroFile])
++AC_HEADER_STDC
++AC_CHECK_HEADERS([string.h rpm/rpmmacro.h rpm/rpmlib.h rpm/rpmio.h rpm/rpmtag.h])
++
++CANONTARGETCPU=${target_cpu}
++CANONTARGETGNU=-gnu
++
++case &quot;${target_cpu}&quot; in
++ *86|athlon|k6|pentium*)
++ RPMALLARCH=&quot;i386 i486 i586 i686 k6 athlon pentium3 pentium4&quot;
++ CANONTARGETCPU=i586
++ ;;
++ x86_64|amd64)
++ RPMALLARCH=&quot;i386 i486 i586 i686 k6 athlon pentium3 pentium4 amd64 x86_64&quot;
++ CANONTARGETCPU=x86_64
++ CANONTARGETCPU32=i586
++ ;;
++ ppc|powerpc)
++ RPMALLARCH=&quot;ppc&quot;
++ CANONTARGETCPU=ppc
++ ;;
++ ppc64|powerpc64)
++ RPMALLARCH=&quot;ppc ppc32 ppc64&quot;
++ CANONTARGETCPU=ppc64
++ ;;
++ sparc|sparcv9)
++ RPMALLARCH=&quot;sparc&quot;
++ CANONTARGETCPU=sparc
++ ;;
++ sparc64)
++ RPMALLARCH=&quot;sparc sparc64&quot;
++ CANONTARGETCPU=sparc64
++ ;;
++ mipsel)
++ RPMALLARCH=&quot;mipsel mips32el mips64el&quot;
++ CANONTARGETCPU=mipsel
++ ;;
++ armv4tl)
++ RPMALLARCH=&quot;arml armv4tl&quot;
++ CANONTARGETCPU=armv4tl
++ CANONTARGETGNU=-gnueabi
++ ;;
++ armv5tl)
++ RPMALLARCH=&quot;arml armv4tl armv5tl&quot;
++ CANONTARGETCPU=armv5tl
++ CANONTARGETGNU=-gnueabi
++ ;;
++ # some armv5te cpu have buggy instruction so better disable
++ # the &quot;e&quot; extension
++ armv5tel)
++ RPMALLARCH=&quot;arml armv4tl armv5tel armv5tl&quot;
++ CANONTARGETCPU=armv5tl
++ CANONTARGETGNU=-gnueabi
++ ;;
++ armv7l)
++ RPMALLARCH=&quot;arml armv4tl armv5tl armv5tel armv7l&quot;
++ CANONTARGETCPU=armv7l
++ CANONTARGETGNU=-gnueabi
++esac
++RPMALLARCH=&quot;${RPMALLARCH} noarch&quot;
++AC_SUBST(RPMALLARCH)
++AC_SUBST(CANONTARGETCPU)
++AC_SUBST(CANONTARGETCPU32)
++AC_SUBST(CANONTARGETGNU)
++
++#
++# get rid of the 4-th tuple, if config.guess returned &quot;linux-gnu&quot; for build_os
++#
++if echo &quot;$build_os&quot; | grep '.*-gnulibc1' &gt; /dev/null ; then
++ build_os=`echo &quot;${build_os}&quot; | sed 's/-gnulibc1$//'`
++fi
++if echo &quot;$build_os&quot; | grep '.*-gnu' &gt; /dev/null ; then
++ build_os=`echo &quot;${build_os}&quot; | sed 's/-gnu$//'`
++fi
++
++changequote(&lt;, &gt;)
++build_os_exact=&quot;${build_os}&quot;
++build_os_major=`echo &quot;${build_os}&quot; | sed 's/\..*$//'`
++build_os_noversion=`echo &quot;${build_os}&quot; | sed 's/[0-9]*\..*$//'`
++changequote([, ])
++
++dnl Find our os
++RPMOS=&quot;$build_os_noversion&quot;
++AC_SUBST(RPMOS)
++
++# Checks for library functions.
++RPMVENDOR=&quot;Mageia&quot;
++AC_ARG_WITH(vendor, [ --with-vendor the vendor of this config ])
++if test $with_vendor; then
++ RPMVENDOR=$with_vendor
++fi
++AC_SUBST(RPMVENDOR)
++
++RPMCANONVENDOR=`echo &quot;${RPMVENDOR}&quot; | tr [A-Z] [a-z]`
++AC_SUBST(RPMCANONVENDOR)
++
++if test X&quot;$prefix&quot; = XNONE ; then
++ usrprefix=&quot;$ac_default_prefix&quot;
++else
++ usrprefix=$prefix
++fi
++
++RPMLIBDIR=&quot;${usrprefix}/lib/rpm&quot;
++AC_ARG_WITH(rpmlibdir, [ --with-rpmlibdir=dir location of rpm config file ])
++if test $with_rpmlibdir; then
++ RPMLIBDIR=$with_rpmlibdir
++fi
++AC_SUBST(RPMLIBDIR)
++
++RPMCONFDIR=${RPMLIBDIR}
++AC_ARG_WITH(rpmconfdir, [ --with-rpmconfdir=dir location of our config ])
++if test $with_rpmconfdir; then
++ RPMCONFDIR=$with_rpmconfdir
++fi
++AC_SUBST(RPMCONFDIR)
++
++RPMVENDORDIR=&quot;${RPMCONFDIR}/${RPMCANONVENDOR}&quot;
++AC_SUBST(RPMVENDORDIR)
++
++RPMSYSCONFDIR=&quot;/etc/rpm&quot;
++AC_ARG_WITH(rpmsysconfdir, [ --with-rpmsysconfdir=dir location of etc ])
++if test $with_rpmsysconfdir; then
++ RPMSYSCONFDIR=$with_rpmsysconfdir
++fi
++AC_SUBST(RPMSYSCONFDIR)
++
++
++AC_ARG_WITH(rpmplatform, [ --with-rpmplatform use /etc/rpm/platform ])
++AM_CONDITIONAL([RPMPLATFORM],[test $with_rpmplatform])
++
++AC_ARG_WITH(only-rpmrc, [ --with-only-rpmrc rpm uses rpmrc ])
++AM_CONDITIONAL([ONLY_RPMRC],[test $with_only_rpmrc])
++
++AC_OUTPUT
+
+Added: rpm/rpm-setup/trunk/filter.sh
+===================================================================
+--- rpm/rpm-setup/trunk/filter.sh (rev 0)
++++ rpm/rpm-setup/trunk/filter.sh 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,36 @@
++#!/bin/sh
++#---------------------------------------------------------------
++# Project : Mageia
++# Module : rpm
++# File : filter.sh
++# Version : $Id: filter.sh 227371 2007-09-08 15:34:39Z anssi $
++# Author : Frederic Lepied
++# Created On : Tue May 13 15:45:17 2003
++# Purpose : filter using grep and first argument the
++# command passed as the rest of the command line
++#---------------------------------------------------------------
++
++GREP_ARG=&quot;$1&quot;
++FILE_GREP_ARG=&quot;$2&quot;
++BUILDROOT=&quot;$3&quot;
++PROG=&quot;$4&quot;
++shift 4
++
++# use ' ' to signify no arg as rpm filter empty strings from
++# command line :(
++if [ &quot;$FILE_GREP_ARG&quot; != ' ' ]; then
++ # get rid of double and trailing slashes
++ BUILDROOT=&quot;$(echo &quot;$BUILDROOT&quot; | perl -pe 's,/+,/,g;s,/$,,')&quot;
++ perl -pe &quot;s,^$BUILDROOT,,&quot; | grep -v &quot;$FILE_GREP_ARG&quot; | perl -pe &quot;s,^,$BUILDROOT,&quot;
++else
++ cat
++fi | \
++$PROG &quot;$@&quot; | \
++if [ &quot;$GREP_ARG&quot; != ' ' ]; then
++ grep -v &quot;$GREP_ARG&quot;
++else
++ cat
++fi
++exit 0
++
++# filter.sh ends here
+
+
+Property changes on: rpm/rpm-setup/trunk/filter.sh
+___________________________________________________________________
+Added: svn:executable
+ + *
+Added: svn:eol-style
+ + native
+
+Added: rpm/rpm-setup/trunk/find-debuginfo.sh
+===================================================================
+--- rpm/rpm-setup/trunk/find-debuginfo.sh (rev 0)
++++ rpm/rpm-setup/trunk/find-debuginfo.sh 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,353 @@
++#!/bin/bash
++#find-debuginfo.sh - automagically generate debug info and file list
++#for inclusion in an rpm spec file.
++#
++# Usage: find-debuginfo.sh [--strict-build-id] [-g]
++# [-o debugfiles.list]
++# [[-l filelist]... [-p 'pattern'] -o debuginfo.list]
++# [builddir]
++#
++# The -g flag says to use strip -g instead of full strip on DSOs.
++# The --strict-build-id flag says to exit with failure status if
++# any ELF binary processed fails to contain a build-id note.
++#
++# A single -o switch before any -l or -p switches simply renames
++# the primary output file from debugfiles.list to something else.
++# A -o switch that follows a -p switch or some -l switches produces
++# an additional output file with the debuginfo for the files in
++# the -l filelist file, or whose names match the -p pattern.
++# The -p argument is an grep -E -style regexp matching the a file name,
++# and must not use anchors (^ or $).
++#
++# All file names in switches are relative to builddir (. if not given).
++#
++
++debugedit=/usr/lib/rpm/debugedit
++if [ ! -x $debugedit ]; then
++ # rpm5 since 5.2 has moved these binaries to a separate 'bin' subdirectory
++ if [ -x /usr/lib/rpm/bin/debugedit ]; then
++ debugedit=/usr/lib/rpm/bin/debugedit
++ fi
++fi
++
++# With -g arg, pass it to strip on libraries.
++strip_g=false
++
++# Barf on missing build IDs.
++strict=false
++
++BUILDDIR=.
++out=debugfiles.list
++nout=0
++while [ $# -gt 0 ]; do
++ case &quot;$1&quot; in
++ --strict-build-id)
++ strict=true
++ ;;
++ -g)
++ strip_g=true
++ ;;
++ -o)
++ if [ -z &quot;${lists[$nout]}&quot; -a -z &quot;${ptns[$nout]}&quot; ]; then
++ out=$2
++ else
++ outs[$nout]=$2
++ ((nout++))
++ fi
++ shift
++ ;;
++ -l)
++ lists[$nout]=&quot;${lists[$nout]} $2&quot;
++ shift
++ ;;
++ -p)
++ ptns[$nout]=$2
++ shift
++ ;;
++ *)
++ BUILDDIR=$1
++ shift
++ break
++ ;;
++ esac
++ shift
++done
++
++i=0
++while ((i &lt; nout)); do
++ outs[$i]=&quot;$BUILDDIR/${outs[$i]}&quot;
++ l=''
++ for f in ${lists[$i]}; do
++ l=&quot;$l $BUILDDIR/$f&quot;
++ done
++ lists[$i]=$l
++ ((++i))
++done
++
++LISTFILE=&quot;$BUILDDIR/$out&quot;
++SOURCEFILE=&quot;$BUILDDIR/debugsources.list&quot;
++LINKSFILE=&quot;$BUILDDIR/debuglinks.list&quot;
++
++&gt; &quot;$SOURCEFILE&quot;
++&gt; &quot;$LISTFILE&quot;
++&gt; &quot;$LINKSFILE&quot;
++
++debugdir=&quot;${RPM_BUILD_ROOT}/usr/lib/debug&quot;
++
++strip_to_debug()
++{
++ local g=
++ $strip_g &amp;&amp; case &quot;$(file -bi &quot;$2&quot;)&quot; in
++ application/x-sharedlib*) g=-g ;;
++ esac
++ eu-strip --remove-comment $g $([ -n &quot;$DISABLE_DEBUG&quot; ] || echo -f &quot;$1&quot;) &quot;$2&quot; || exit
++ [ -n &quot;$DISABLE_DEBUG&quot; ] || chmod 444 &quot;$1&quot; || exit
++}
++
++# Make a relative symlink to $1 called $3$2
++shopt -s extglob
++link_relative()
++{
++ local t=&quot;$1&quot; f=&quot;$2&quot; pfx=&quot;$3&quot;
++ local fn=&quot;${f#/}&quot; tn=&quot;${t#/}&quot;
++ local fd td d
++
++ while fd=&quot;${fn%%/*}&quot;; td=&quot;${tn%%/*}&quot;; [ &quot;$fd&quot; = &quot;$td&quot; ]; do
++ fn=&quot;${fn#*/}&quot;
++ tn=&quot;${tn#*/}&quot;
++ done
++
++ d=&quot;${fn%/*}&quot;
++ if [ &quot;$d&quot; != &quot;$fn&quot; ]; then
++ d=&quot;${d//+([!\/])/..}&quot;
++ tn=&quot;${d}/${tn}&quot;
++ fi
++
++ mkdir -p &quot;$(dirname &quot;$pfx$f&quot;)&quot; &amp;&amp; ln -snf &quot;$tn&quot; &quot;$pfx$f&quot;
++}
++
++# Make a symlink in /usr/lib/debug/$2 to $1
++debug_link()
++{
++ local l=&quot;/usr/lib/debug$2&quot;
++ local t=&quot;$1&quot;
++ echo &gt;&gt; &quot;$LINKSFILE&quot; &quot;$l $t&quot;
++ link_relative &quot;$t&quot; &quot;$l&quot; &quot;$RPM_BUILD_ROOT&quot;
++}
++
++# Make a build-id symlink for id $1 with suffix $3 to file $2.
++make_id_link()
++{
++ local id=&quot;$1&quot; file=&quot;$2&quot;
++ local idfile=&quot;.build-id/${id:0:2}/${id:2}&quot;
++ [ $# -eq 3 ] &amp;&amp; idfile=&quot;${idfile}$3&quot;
++ local root_idfile=&quot;$RPM_BUILD_ROOT/usr/lib/debug/$idfile&quot;
++
++ if [ ! -L &quot;$root_idfile&quot; ]; then
++ debug_link &quot;$file&quot; &quot;/$idfile&quot;
++ return
++ fi
++
++ [ $# -eq 3 ] &amp;&amp; return 0
++
++ local other=$(readlink -m &quot;$root_idfile&quot;)
++ other=${other#$RPM_BUILD_ROOT}
++ if cmp -s &quot;$root_idfile&quot; &quot;$RPM_BUILD_ROOT$file&quot; ||
++ eu-elfcmp -q &quot;$root_idfile&quot; &quot;$RPM_BUILD_ROOT$file&quot; 2&gt; /dev/null; then
++ # Two copies. Maybe one has to be setuid or something.
++ echo &gt;&amp;2 &quot;*** WARNING: identical binaries are copied, not linked:&quot;
++ echo &gt;&amp;2 &quot; $file&quot;
++ echo &gt;&amp;2 &quot; and $other&quot;
++ else
++ # This is pathological, break the build.
++ echo &gt;&amp;2 &quot;*** ERROR: same build ID in nonidentical files!&quot;
++ echo &gt;&amp;2 &quot; $file&quot;
++ echo &gt;&amp;2 &quot; and $other&quot;
++ exit 2
++ fi
++}
++
++get_debugfn()
++{
++ dn=$(dirname &quot;${1#$RPM_BUILD_ROOT}&quot;)
++ bn=$(basename &quot;$1&quot; .debug).debug
++
++ debugdn=${debugdir}${dn}
++ debugfn=${debugdn}/${bn}
++}
++
++set -o pipefail
++
++strict_error=ERROR
++$strict || strict_error=WARNING
++
++[[ -n &quot;$EXCLUDE_FROM_STRIP&quot; ]] &amp;&amp; \
++EXCLUDE_REGEXP=`perl -e 'print &quot;(&quot;, join(&quot;|&quot;, @ARGV), &quot;)&quot;' $EXCLUDE_FROM_STRIP`
++
++echo $EXCLUDE_REGEXP
++# Strip ELF binaries
++find &quot;$RPM_BUILD_ROOT&quot; ! -path &quot;${debugdir}/*.debug&quot; -type f \
++ \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \
++ -print |
++file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' |
++xargs --no-run-if-empty stat -c '%h %D_%i %n' |
++while read nlinks inum f; do
++ [[ -n &quot;$EXCLUDE_REGEXP&quot; ]] &amp;&amp; grep -E -q &quot;$EXCLUDE_REGEXP&quot; &lt;&lt;&lt; &quot;$f&quot; &amp;&amp; \
++ continue
++ [ -n &quot;$DISABLE_DEBUG&quot; ] &amp;&amp; strip_to_debug &quot;&quot; &quot;$f&quot; &amp;&amp; continue
++
++ get_debugfn &quot;$f&quot;
++ [ -f &quot;${debugfn}&quot; ] &amp;&amp; continue
++
++ # If this file has multiple links, keep track and make
++ # the corresponding .debug files all links to one file too.
++ if [ $nlinks -gt 1 ]; then
++ eval linked=\$linked_$inum
++ if [ -n &quot;$linked&quot; ]; then
++ link=$debugfn
++ get_debugfn &quot;$linked&quot;
++ echo &quot;hard linked $link to $debugfn&quot;
++ ln -nf &quot;$debugfn&quot; &quot;$link&quot;
++ continue
++ else
++ eval linked_$inum=\$f
++ echo &quot;file $f has $[$nlinks - 1] other hard links&quot;
++ fi
++ fi
++
++ echo &quot;extracting debug info from $f&quot;
++ id=$($debugedit -b &quot;$RPM_BUILD_DIR&quot; -d /usr/src/debug \
++ -i -l &quot;$SOURCEFILE&quot; &quot;$f&quot;) || exit
++ if [ -z &quot;$id&quot; ]; then
++ echo &gt;&amp;2 &quot;*** ${strict_error}: No build ID note found in $f&quot;
++ $strict &amp;&amp; exit 2
++ fi
++
++ # A binary already copied into /usr/lib/debug doesn't get stripped,
++ # just has its file names collected and adjusted.
++ case &quot;$dn&quot; in
++ /usr/lib/debug/*)
++ [ -z &quot;$id&quot; ] || make_id_link &quot;$id&quot; &quot;$dn/$(basename $f)&quot;
++ continue ;;
++ esac
++
++ mkdir -p &quot;${debugdn}&quot;
++ if test -w &quot;$f&quot;; then
++ strip_to_debug &quot;${debugfn}&quot; &quot;$f&quot;
++ else
++ chmod u+w &quot;$f&quot;
++ strip_to_debug &quot;${debugfn}&quot; &quot;$f&quot;
++ chmod u-w &quot;$f&quot;
++ fi
++
++ if [ -n &quot;$id&quot; ]; then
++ make_id_link &quot;$id&quot; &quot;$dn/$(basename $f)&quot;
++ make_id_link &quot;$id&quot; &quot;/usr/lib/debug$dn/$bn&quot; .debug
++ fi
++done || exit
++
++# For each symlink whose target has a .debug file,
++# make a .debug symlink to that file.
++find $RPM_BUILD_ROOT ! -path &quot;${debugdir}/*&quot; -type l -print |
++while read f
++do
++ t=$(readlink -m &quot;$f&quot;).debug
++ f=${f#$RPM_BUILD_ROOT}
++ t=${t#$RPM_BUILD_ROOT}
++ if [ -f &quot;$debugdir$t&quot; ]; then
++ echo &quot;symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug&quot;
++ debug_link &quot;/usr/lib/debug$t&quot; &quot;${f}.debug&quot;
++ fi
++done
++
++if [ -s &quot;$SOURCEFILE&quot; ]; then
++ mkdir -p &quot;${RPM_BUILD_ROOT}/usr/src/debug&quot;
++ LC_ALL=C sort -z -u &quot;$SOURCEFILE&quot; | grep -E -v -z '(&lt;internal&gt;|&lt;built-in&gt;)$' |
++ (cd &quot;$RPM_BUILD_DIR&quot;; cpio -pd0mL &quot;${RPM_BUILD_ROOT}/usr/src/debug&quot;)
++ # stupid cpio creates new directories in mode 0700, fixup
++ find &quot;${RPM_BUILD_ROOT}/usr/src/debug&quot; -type d -print0 |
++ xargs --no-run-if-empty -0 chmod a+rx
++fi
++
++if [ -d &quot;${RPM_BUILD_ROOT}/usr/lib&quot; -o -d &quot;${RPM_BUILD_ROOT}/usr/src&quot; ]; then
++ ((nout &gt; 0)) ||
++ test ! -d &quot;${RPM_BUILD_ROOT}/usr/lib/debug&quot; ||
++ (cd &quot;${RPM_BUILD_ROOT}/usr/lib&quot;; find debug -type d) |
++ sed 's,^,%dir /usr/lib/,' &gt;&gt; &quot;$LISTFILE&quot;
++
++ (cd &quot;${RPM_BUILD_ROOT}/usr&quot;
++ test ! -d lib/debug || find lib/debug ! -type d
++ test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1
++ ) | sed 's,^,/usr/,' &gt;&gt; &quot;$LISTFILE&quot;
++fi
++
++# Append to $1 only the lines from stdin not already in the file.
++append_uniq()
++{
++ grep -F -f &quot;$1&quot; -x -v &gt;&gt; &quot;$1&quot;
++}
++
++# Helper to generate list of corresponding .debug files from a file list.
++filelist_debugfiles()
++{
++ local extra=&quot;$1&quot;
++ shift
++ sed 's/^%[a-z0-9_][a-z0-9_]*([^)]*) *//
++s/^%[a-z0-9_][a-z0-9_]* *//
++/^$/d
++'&quot;$extra&quot; &quot;$@&quot;
++}
++
++# Write an output debuginfo file list based on given input file lists.
++filtered_list()
++{
++ local out=&quot;$1&quot;
++ shift
++ test $# -gt 0 || return
++ grep -F -f &lt;(filelist_debugfiles 's,^.*$,/usr/lib/debug&amp;.debug,' &quot;$@&quot;) \
++ -x $LISTFILE &gt;&gt; $out
++ sed -n -f &lt;(filelist_debugfiles 's/[\\.*+#]/\\&amp;/g
++h
++s,^.*$,s# &amp;$##p,p
++g
++s,^.*$,s# /usr/lib/debug&amp;.debug$##p,p
++' &quot;$@&quot;) &quot;$LINKSFILE&quot; | append_uniq &quot;$out&quot;
++}
++
++# Write an output debuginfo file list based on an grep -E -style regexp.
++pattern_list()
++{
++ local out=&quot;$1&quot; ptn=&quot;$2&quot;
++ test -n &quot;$ptn&quot; || return
++ grep -E -x -e &quot;$ptn&quot; &quot;$LISTFILE&quot; &gt;&gt; &quot;$out&quot;
++ sed -n -r &quot;\#^$ptn #s/ .*\$//p&quot; &quot;$LINKSFILE&quot; | append_uniq &quot;$out&quot;
++}
++
++#
++# When given multiple -o switches, split up the output as directed.
++#
++i=0
++while ((i &lt; nout)); do
++ &gt; ${outs[$i]}
++ filtered_list ${outs[$i]} ${lists[$i]}
++ pattern_list ${outs[$i]} &quot;${ptns[$i]}&quot;
++ grep -Fvx -f ${outs[$i]} &quot;$LISTFILE&quot; &gt; &quot;${LISTFILE}.new&quot;
++ mv &quot;${LISTFILE}.new&quot; &quot;$LISTFILE&quot;
++ ((++i))
++done
++if ((nout &gt; 0)); then
++ # Now add the right %dir lines to each output list.
++ (cd &quot;${RPM_BUILD_ROOT}&quot;; find usr/lib/debug -type d) |
++ sed 's#^.*$#\\@^/&amp;/@{h;s@^.*$@%dir /&amp;@p;g;}#' |
++ LC_ALL=C sort -ur &gt; &quot;${LISTFILE}.dirs.sed&quot;
++ i=0
++ while ((i &lt; nout)); do
++ sed -n -f &quot;${LISTFILE}.dirs.sed&quot; &quot;${outs[$i]}&quot; | sort -u &gt; &quot;${outs[$i]}.new&quot;
++ cat &quot;${outs[$i]}&quot; &gt;&gt; &quot;${outs[$i]}.new&quot;
++ mv -f &quot;${outs[$i]}.new&quot; &quot;${outs[$i]}&quot;
++ ((++i))
++ done
++ sed -n -f &quot;${LISTFILE}.dirs.sed&quot; &quot;${LISTFILE}&quot; | sort -u &gt; &quot;${LISTFILE}.new&quot;
++ cat &quot;$LISTFILE&quot; &gt;&gt; &quot;${LISTFILE}.new&quot;
++ mv &quot;${LISTFILE}.new&quot; &quot;$LISTFILE&quot;
++fi
+
+
+Property changes on: rpm/rpm-setup/trunk/find-debuginfo.sh
+___________________________________________________________________
+Added: svn:executable
+ + *
+Added: svn:eol-style
+ + native
+
+Added: rpm/rpm-setup/trunk/find-lang.pl
+===================================================================
+--- rpm/rpm-setup/trunk/find-lang.pl (rev 0)
++++ rpm/rpm-setup/trunk/find-lang.pl 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,147 @@
++#!/usr/bin/perl
++
++# $Id: find-lang.pl 243013 2008-06-23 13:01:50Z pixel $
++
++use strict;
++use warnings;
++use File::Find;
++use Getopt::Long;
++use Pod::Usage;
++
++GetOptions(
++ 'all-name' =&gt; \my $allname,
++ 'with-gnome' =&gt; \my $withgnome,
++ 'with-kde' =&gt; \my $withkde,
++ 'with-html' =&gt; \my $withhtml,
++ 'without-mo' =&gt; \my $withoutmo,
++ 'with-man' =&gt; \my $withman,
++ 'debug' =&gt; \my $debug,
++) or pod2usage();
++
++my ($buildroot, @searchname) = @ARGV;
++$buildroot or die &quot;No buildroot given\n&quot;;
++$buildroot =~ s:/+$::; # removing trailing /
++my ($pkgname) = @searchname or die &quot;Main name to find missing\n&quot;;
++
++sub debug {
++ $debug or return;
++ my ($msg, @val) = @_;
++ printf(&quot;DEBUG: $msg\n&quot;, @val);
++}
++
++my %finallist; # filename =&gt; attr, easy way to perform uniq
++
++File::Find::find(
++ sub {
++ my $file = substr($File::Find::name, length($buildroot));
++ -f $File::Find::name or -l $File::Find::name or return;
++ debug(&quot;next file is %s&quot;, $file);
++ my $langfile = $file;
++ if ($file =~ m:^((.*/share/locale)/([^/@]+)[^/]*).*/([^/]+)\.mo:) {
++ if ($withoutmo) {
++ return;
++ }
++ my ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
++ if (pkg_match($pkg)) {
++ own_file($file, $lang);
++ }
++ } elsif ($file =~ m:^((.*/gnome/help)/([^/]+)/([^/]+)).*:) {
++ if (!$withgnome) {
++ return;
++ }
++ my ($pkg, $lang, $parent, $langfile) = ($3, $4, $2, $1);
++ if (pkg_match($pkg)) {
++ parent_to_own($langfile, $file, $lang);
++ }
++ } elsif ($file =~ m:^((.*/doc/kde)/HTML/([^/@]+)[^/]*)/([^/]+)/.*:) {
++ if (!$withkde) {
++ return;
++ }
++ my ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
++ if (pkg_match($pkg)) {
++ parent_to_own($langfile, $file, $lang);
++ }
++ } elsif ($file =~ m:^((.*/doc)/HTML/([^/@]+)[^/]*)/([^/_]+).*:) {
++ if (!$withhtml) {
++ return;
++ }
++ my ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
++ if (pkg_match($pkg)) {
++ parent_to_own($langfile, $file, $lang);
++ }
++ } elsif ($file =~ m:^((/+usr/share/man)/([^/@\.]+)[^/]*)/man[^/]+/([^/.]+)\.\d[^/]*:) {
++ if (!$withman) {
++ return;
++ }
++ my ($pkg, $lang, $parent, $langfile) = ($4, $3, undef, $1);
++ $file =~ s/\.[^\.]+$//;
++ $file .= '.*';
++ if (pkg_match($pkg)) {
++ parent_to_own($langfile, $file, $lang);
++ }
++ } else {
++ return;
++ }
++ },
++ $buildroot || '/'
++);
++
++open(my $hlang, '&gt;', &quot;$pkgname.lang&quot;) or die &quot;canno't open $pkgname.lang\n&quot;;
++
++foreach my $f (sort keys %finallist) {
++ my ($lang, @otherlang) = keys %{ $finallist{$f}{'lang'} || {}};
++ my $l = sprintf(&quot;%s%s%s&quot;,
++ $finallist{$f}{'dir'} ? '%dir ' : '',
++ @otherlang == 0 &amp;&amp; $lang &amp;&amp; $lang ne 'C'
++ ? &quot;%lang($lang) &quot;
++ : '', # skip if multiple lang, 'C' or dir
++ $f
++ );
++ debug('OUT: %s', $l);
++ print $hlang &quot;$l\n&quot;;
++
++}
++
++close($hlang);
++
++exit(0);
++
++sub pkg_match {
++ my ($pkg) = @_;
++ if ($allname) { return 1 };
++ if (grep { $_ eq $pkg } @searchname) {
++ return 1;
++ }
++ return;
++}
++
++sub own_file {
++ my ($file, $lang) = @_;
++ $finallist{$file}{'lang'}{$lang} = 1;
++}
++
++sub parent_to_own {
++ my ($parent, $file, $lang) = @_;
++ debug(&quot;parent_to_own: $parent, $file, $lang&quot;);
++ if ($allname) {
++ #my @subdir = grep { $_ } split('/', substr($file, length($parent)));
++ #$parent .= '/' . shift(@subdir);
++ $finallist{$parent}{'lang'}{$lang} = 1;
++ debug(&quot;Parent %s will be %s&quot;, $parent, $lang);
++ } else {
++ my @subdir = grep { $_ } split('/', substr($file, length($parent)));
++ pop(@subdir);
++ $finallist{$parent}{dir} = 1;
++ $finallist{$parent}{'lang'}{$lang} = 1;
++ debug(&quot;Parent %s will be %s&quot;, $parent, $lang);
++ while (my $part = shift(@subdir)) {
++ $parent .= &quot;/$part&quot;;
++ $finallist{$parent}{dir} = 1;
++ $finallist{$parent}{'lang'}{$lang} = 1;
++ debug(&quot;Parent %s will be %s&quot;, $parent, $lang);
++ }
++ own_file($file, $lang);
++ debug(&quot;Parent %s will be %s&quot;, $file, $lang);
++
++ }
++}
+
+Added: rpm/rpm-setup/trunk/find-provides.in
+===================================================================
+--- rpm/rpm-setup/trunk/find-provides.in (rev 0)
++++ rpm/rpm-setup/trunk/find-provides.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,117 @@
++#!/bin/bash
++
++# This script reads filenames from STDIN and outputs any relevant provides
++# information that needs to be included in the package.
++
++filelist=`sed &quot;s/['\&quot;]/\\\&amp;/g&quot;`
++
++solist=$(echo &quot;$filelist&quot; | egrep -v &quot;^/lib/ld\.so|/usr/lib(64)?/gcj/&quot; | egrep '(/usr(/X11R6)?)?/lib(64)?/.*\.so' | \
++ xargs file -L 2&gt;/dev/null | grep &quot;ELF.*shared object&quot; | cut -d: -f1)
++pythonlist=
++tcllist=
++rubygemlist=$(echo &quot;$filelist&quot;| egrep &quot;\.gemspec$&quot;)
++
++#
++# --- Alpha does not mark 64bit dependencies
++case `uname -m` in
++ alpha*) mark64=&quot;&quot; ;;
++ *) mark64=&quot;()(64bit)&quot; ;;
++esac
++
++#
++# --- Library sonames and weak symbol versions (from glibc).
++for f in $solist; do
++ soname=$(objdump -p $f 2&gt;/dev/null | awk '/SONAME/ {print $2}')
++
++ lib64=`if file -L $f 2&gt;/dev/null | \
++ grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;$mark64&quot;; fi`
++ if [ &quot;$soname&quot; != &quot;&quot; ]; then
++ if [ ! -L $f ]; then
++ echo $soname$lib64
++ objdump -p $f 2&gt;/dev/null | awk '
++ BEGIN { START=0 ; }
++ /Version definitions:/ { START=1; }
++ /^[0-9]/ &amp;&amp; (START==1) { print $4; }
++ /^$/ { START=0; }
++ ' | \
++ grep -v $soname | \
++ while read symbol ; do
++ echo &quot;$soname($symbol)`echo $lib64 | sed 's/()//'`&quot;
++ done
++ fi
++ else
++ echo ${f##*/}$lib64
++ fi
++done | sort -u
++
++#
++# --- Perl modules.
++[ -x @RPMVENDORDIR@/perl.prov ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/perl.prov | grep 'perl([[:upper:]]' | sort -u
++
++#
++# --- Python modules.
++[ -x @RPMVENDORDIR@/pythoneggs.py -a -n &quot;$filelist&quot; ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/pythoneggs.py --provides | sort -u
++
++#
++# --- Tcl modules.
++[ -x @RPMVENDORDIR@/tcl.prov -a -n &quot;$tcllist&quot; ] &amp;&amp;
++ echo &quot;$tcllist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/tcl.prov | sort -u
++
++#
++# --- Php modules.
++[ -x @RPMVENDORDIR@/php.prov ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/php.prov | sort -u
++
++#
++# --- Kernel modules.
++[ -x @RPMVENDORDIR@/kmod.prov ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/kmod.prov | sort -u
++
++#
++# --- Pkgconfig deps
++[ -x @RPMVENDORDIR@/pkgconfigdeps.sh ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/pkgconfigdeps.sh -P | sort -u
++
++if [ -n &quot;$LIBTOOLDEP&quot; ]; then
++#
++# --- libtooldep deps
++[ -x @RPMLIBDIR@/libtooldeps.sh ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMLIBDIR@/libtooldeps.sh -P | sort -u
++
++fi
++
++#
++# --- Ruby gems
++[ -x @RPMVENDORDIR@/rubygems.rb -a -n &quot;$rubygemlist&quot; ] &amp;&amp;
++ echo $rubygemlist | tr '[:blank:]' \\n | @RPMVENDORDIR@/rubygems.rb --provides | sort -u
++
++#
++# --- .so files.
++for i in `echo $filelist | tr '[:blank:]' &quot;\n&quot; | egrep '(/usr(/X11R6)?)?/lib(|64)(/gcc(-lib)?/.+)?/[^/]+\.so$'`; do
++ objd=`objdump -p ${i} | grep SONAME`
++ [ -h ${i} -a -n &quot;${objd}&quot; ] &amp;&amp; \
++ lib64=`if file -L $i 2&gt;/dev/null | grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;(64bit)&quot;; fi` &amp;&amp; \
++ echo ${objd} | perl -p -e &quot;s/.*SONAME\s+(\S+)\.so.*/devel(\1$lib64)/g&quot;
++done | sort -u
++
++#
++# --- mono provides
++if [ -x /usr/bin/mono-find-provides ]; then
++echo $filelist | tr '[:blank:]' '\n' | /usr/bin/mono-find-provides
++fi
++
++
++#
++# --- haskell provides
++if [ -x /usr/bin/haskell-find-provides ]; then
++echo $filelist | tr '[:blank:]' '\n' | /usr/bin/haskell-find-provides
++fi
++
++#
++# --- gstreamer modules.
++[ -x @RPMVENDORDIR@/gstreamer.prov ] &amp;&amp;
++ echo &quot;$solist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/gstreamer.prov | sort -u
++
++exit 0
+
+
+Property changes on: rpm/rpm-setup/trunk/find-provides.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/find-provides.perl.in
+===================================================================
+--- rpm/rpm-setup/trunk/find-provides.perl.in (rev 0)
++++ rpm/rpm-setup/trunk/find-provides.perl.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,4 @@
++#!/bin/sh
++
++exec @RPMVENDORDIR@/find-provides
++
+
+
+Property changes on: rpm/rpm-setup/trunk/find-provides.perl.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/find-requires.in
+===================================================================
+--- rpm/rpm-setup/trunk/find-requires.in (rev 0)
++++ rpm/rpm-setup/trunk/find-requires.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,289 @@
++#!/bin/bash
++
++#
++# Auto-generate requirements for ELF executables and library
++# sonames, script interpreters, and perl modules.
++#
++
++ulimit -c 0
++
++#
++# --- Set needed to 0 for traditional find-requires behavior.
++needed=1
++if [ X&quot;$3&quot; = Xldd ]; then
++ needed=0
++elif [ X&quot;$3&quot; = Xobjdump ]; then
++ needed=1
++fi
++
++# --- Mageia specific part
++case &quot;$LD_PRELOAD&quot; in
++ *libfakeroot*)
++ unset LD_PRELOAD
++ ;;
++esac
++
++RPM_BUILD_ROOT=$1
++RPM_ARCH=$2
++
++if [ -n &quot;$RPM_BUILD_ROOT&quot; ]; then
++ lib_path_64=$RPM_BUILD_ROOT/usr/X11R6/lib64:$RPM_BUILD_ROOT/usr/lib64:$RPM_BUILD_ROOT/lib64
++ lib_path_32=$RPM_BUILD_ROOT/usr/X11R6/lib:$RPM_BUILD_ROOT/usr/lib:$RPM_BUILD_ROOT/lib
++ LD_LIBRARY_PATH=$lib_path_64:$lib_path_32
++ export LD_LIBRARY_PATH
++fi
++
++
++#
++# --- Grab the file manifest and classify files.
++#filelist=`sed &quot;s/['\&quot;]/\\\&amp;/g&quot;`
++filelist=`sed &quot;s/[]['\&quot;*?{}]/\\\\\&amp;/g&quot;`
++exelist=`echo &quot;$filelist&quot; | xargs -r file | egrep -v &quot;:.* (commands|script) &quot; | \
++ grep &quot;:.*ELF.*executable&quot; | cut -d: -f1`
++scriptlist=`echo &quot;$filelist&quot; | grep -v /usr/doc | grep -v /usr/share/doc | xargs -r file | \
++ egrep &quot;:.* (commands|script) &quot; | cut -d: -f1`
++liblist=`echo &quot;$filelist&quot; | egrep -v &quot;/usr/lib(64)?/gcj/&quot; | xargs -r file | \
++ grep &quot;:.*shared object&quot; | cut -d : -f1`
++ocamllist=`echo &quot;$filelist&quot; | xargs -r file | \
++ grep &quot;:.*Objective caml interface file&quot; | cut -d : -f1`
++phplist=`echo &quot;$filelist&quot; | grep -v /usr/doc | grep -v /usr/share/doc | egrep &quot;\.php$&quot;`
++
++interplist=
++perllist=
++pythonlist=
++tcllist=
++rubygemlist=`echo &quot;$filelist&quot;| egrep &quot;\.gemspec$&quot;`
++
++uniqdeplist=
++
++#
++# --- Alpha does not mark 64bit dependencies
++case `uname -m` in
++ alpha*) mark64=&quot;&quot; ;;
++ *) mark64=&quot;()(64bit)&quot; ;;
++esac
++
++if [ &quot;$needed&quot; -eq 0 ]; then
++#
++# --- Executable dependency sonames.
++ for f in $exelist; do
++ [ -r $f -a -x $f ] || continue
++ lib64=`if file -L $f 2&gt;/dev/null | \
++ grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;$mark64&quot;; fi`
++ ldd $f | awk '/=&gt;/ {
++ if ($1 !~ /libNoVersion.so/ &amp;&amp; $1 !~ /4[um]lib.so/) {
++ gsub(/'\''&quot;/,&quot;\\&amp;&quot;,$1);
++ printf &quot;%s'$lib64'\n&quot;, $1
++ }
++ }'
++ done | xargs -r -n 1 basename | sort -u | grep -v 'libsafe|libfakeroot'
++
++#
++# --- Library dependency sonames.
++ for f in $liblist; do
++ [ -r $f ] || continue
++ lib64=`if file -L $f 2&gt;/dev/null | \
++ grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;$mark64&quot;; fi`
++ ldd $f | awk '/=&gt;/ {
++ if ($1 !~ /libNoVersion.so/ &amp;&amp; $1 !~ /4[um]lib.so/) {
++ gsub(/'\''&quot;/,&quot;\\&amp;&quot;,$1);
++ printf &quot;%s'$lib64'\n&quot;, $1
++ }
++ }'
++ done | xargs -r -n 1 basename | sort -u | grep -v 'libsafe|libfakeroot'
++fi
++
++#
++# --- Perl or python deps
++perlepoch=`rpm -q --qf '%|EPOCH?{[%{EPOCH}]:}|' perl-base`
++if [ $? != 0 ]; then
++ unset perlepoch
++fi
++
++tmpdeplist=
++for f in $filelist; do
++ dep=&quot;`echo $f | sed -n -e &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s at .</A>*/usr/lib/perl5/\(vendor_perl/\|site_perl/\|\)\([.0-9]\{1,\}\).*\\$@perl-base &gt;= $perlepoch\<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">2 at p</A>&quot;`&quot;
++ if [[ -n $dep &amp;&amp; -z `echo $uniqdeplist $tmpdeplist|grep &quot;$dep&quot;` ]]; then
++ tmpdeplist+=&quot;$dep\n&quot;
++ fi
++done
++echo -n -e $tmpdeplist | sort -u
++uniqdeplist+=&quot;$tmpdeplist&quot;
++
++
++#
++# --- Script interpreters.
++for f in $scriptlist; do
++ [ -r $f -a -x $f ] || continue
++ interp=`head -n 1 $f | grep '^#!' | sed -e 's/^\#\![ ]*//' | cut -d&quot; &quot; -f1`
++ interplist=&quot;$interplist $interp&quot;
++ case $interp in
++ */perl) perllist=&quot;$perllist $f&quot; ;;
++ esac
++done
++if [ -n &quot;$interplist&quot; ]; then
++ tmpdeplist=
++ for i in `echo &quot;$interplist&quot; | tr '[:blank:]' \\\n `; do
++ dep=`rpm -qf $i --qf '%{name}\n'` &amp;&amp; i=$dep
++ if [[ -z `echo $uniqdeplist $tmpdeplist|grep &quot;$i&quot;` ]]; then
++ tmpdeplist+=&quot;$i\n&quot;
++ fi
++ done
++ echo -n -e $tmpdeplist | sort -u | grep -v 'libsafe|libfakeroot'
++ uniqdeplist=&quot;$tmpdeplist&quot;
++fi
++
++#
++# --- Add perl module files to perllist.
++for f in $filelist; do
++ [ -r $f -a &quot;${f%.pm}&quot; != &quot;${f}&quot; ] &amp;&amp; perllist=&quot;$perllist $f&quot;
++done
++
++#
++# --- Weak symbol versions (from glibc).
++[ -n &quot;$mark64&quot; ] &amp;&amp; mark64=&quot;(64bit)&quot;
++for f in $liblist $exelist ; do
++ [ -r $f ] || continue
++ lib64=`if file -L $f 2&gt;/dev/null | \
++ grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;$mark64&quot;; fi`
++ objdump -p $f | awk 'BEGIN { START=0; LIBNAME=&quot;&quot;; needed='$needed'; }
++ /^$/ { START=0; }
++ /^Dynamic Section:$/ { START=1; }
++ (START==1) &amp;&amp; /NEEDED/ {
++ if (needed) {
++ if (&quot;'$lib64'&quot; != &quot;&quot;) {
++ sub(/$/, &quot;()'$lib64'&quot;, $2) ;
++ }
++ print $2 ;
++ }
++ }
++ (START==1) &amp;&amp; /GNU_HASH/ {
++ print &quot;rtld(GNU_HASH)&quot;;
++ }
++ /^Version References:$/ { START=2; }
++ (START==2) &amp;&amp; /required from/ {
++ sub(/:/, &quot;&quot;, $3);
++ LIBNAME=$3;
++ }
++ (START==2) &amp;&amp; (LIBNAME!=&quot;&quot;) &amp;&amp; ($4!=&quot;&quot;) &amp;&amp; (($4~/^GLIBC_*/) || ($4~/^GCC_*/)) {
++ print LIBNAME &quot;(&quot; $4 &quot;)'$lib64'&quot;;
++ }
++ '
++done | sort -u | grep -v 'libsafe|libfakeroot'
++
++# --- OCaml dependency
++if [ -x /usr/bin/ocamlc -a -n &quot;$ocamllist&quot; ]; then
++ version=`ocamlc -v | grep version | awk '{print $6}' | sed -e 's/+/./'`
++ echo &quot;ocaml = $version&quot;
++fi
++
++#
++# --- Perl modules.
++perlmeta=$( echo $filelist | tr '[:blank:]' \\n | egrep 'doc/[^/]+/META.(yml|json)$' | head -1 )
++if [ -n &quot;$perlmeta&quot; ]
++then
++ [ -x @RPMVENDORDIR@/perl.req-from-meta ] &amp;&amp; \
++ @RPMVENDORDIR@/perl.req-from-meta $perlmeta
++else
++ [ -x @RPMVENDORDIR@/perl.req -a -n &quot;$perllist&quot; ] &amp;&amp; \
++ echo $perllist | tr '[:blank:]' \\n | @RPMVENDORDIR@/perl.req | grep 'perl([[:upper:]]' | egrep -v '^perl\((Be|FreeBSD|HPUX|Mac|MSDOS|MVS|OS2|Riscos|SGI|Solaris|VMS|Win32|WinNT)::' | sort -u
++fi
++
++#
++# --- If libperl.so exists and if XS modules are found, depend on perlapi-&lt;version&gt; and libperl.so
++if [ -n &quot;$perllist&quot; ]; then
++ if perl -V:useshrplib | grep -q true ; then
++ if echo $perllist | grep -q `perl -MConfig -e 'print $Config{archname}'` ; then
++ version=`perl -MConfig -e 'print $Config{version}'`
++ echo perlapi-$version
++
++ f=`perl -MConfig -e 'print $Config{archlib}'`/CORE/libperl.so
++ lib64=`if file -L $f 2&gt;/dev/null | \
++ grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;()$mark64&quot;; fi`
++ echo libperl.so$lib64
++ fi
++ fi
++fi
++
++#
++# --- Python modules.
++[ -x @RPMVENDORDIR@/pythoneggs.py -a -n &quot;$filelist&quot; ] &amp;&amp; \
++ echo $filelist | tr '[:blank:]' \\n | @RPMVENDORDIR@/pythoneggs.py --requires | sort -u
++
++#
++# --- Tcl modules.
++[ -x @RPMVENDORDIR@/tcl.req -a -n &quot;$tcllist&quot; ] &amp;&amp; \
++ echo $tcllist | tr '[:blank:]' \\n | @RPMVENDORDIR@/tcl.req | sort -u
++
++#
++# --- Php modules.
++[ -x @RPMVENDORDIR@/php.req -a -n &quot;$phplist&quot; ] &amp;&amp; \
++ echo $phplist | tr '[:blank:]' \\n | @RPMVENDORDIR@/php.req | sort -u
++
++#
++# --- Pkgconfig deps
++[ -x @RPMVENDORDIR@/pkgconfigdeps.sh ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMVENDORDIR@/pkgconfigdeps.sh -R | sort -u
++
++
++if [ -n &quot;$LIBTOOLDEP&quot; ]; then
++#
++# --- libtooldep deps
++[ -x @RPMLIBDIR@/libtooldeps.sh ] &amp;&amp;
++ echo &quot;$filelist&quot; | tr '[:blank:]' \\n | @RPMLIBDIR@/libtooldeps.sh -R | sort -u
++
++fi
++
++#
++# --- Ruby gems
++[ -x @RPMVENDORDIR@/rubygems.rb -a -n &quot;$rubygemlist&quot; ] &amp;&amp;
++ echo $rubygemlist | tr '[:blank:]' \\n | @RPMVENDORDIR@/rubygems.rb --requires | sort -u
++
++#
++# --- .so files.
++for i in `echo $filelist | tr '[:blank:]' &quot;\n&quot; | egrep &quot;(/usr(/X11R6)?)?/lib(|64)/[^/]+\.so$&quot;`; do
++ objd=`objdump -p ${i} | grep SONAME`
++ lib64=`if file -L $i 2&gt;/dev/null | grep &quot;ELF 64-bit&quot; &gt;/dev/null; then echo &quot;(64bit)&quot;; fi` &amp;&amp; \
++ if [ -h ${i} -a -n &quot;${objd}&quot; ]; then
++ if [ &quot;$needed&quot; -eq 0 ]; then
++ ldd ${i} \
++ | grep -v &quot;statically linked&quot; \
++ | grep -v &quot;/\(lib\|lib64\)/\(ld\|ld64\|ld-linux.*\)\.so&quot; \
++ | perl -p -e &quot;s/\s+(\S+)\.so.*/devel(\1$lib64)/g&quot;
++ else
++ objdump -p $i | grep -v &quot;\(ld\|ld64\|ld-linux.*\)\.so&quot; \
++ | awk 'BEGIN { START=0; }
++ /^$/ { START=0; }
++ /^Dynamic Section:$/ { START=1; }
++ (START==1) &amp;&amp; /NEEDED/ {
++ sub(/^/, &quot;devel(&quot;, $2) ;
++ sub(/\.so.*$/, &quot;'$lib64')&quot;, $2) ;
++ print $2 ;
++ }
++ '
++ fi
++ fi
++done | egrep -v 'devel\(linux-gate|linux-vdso32|linux-vdso64|lib(c|pthread|rt)(\(64bit\))?\)' | sort -u
++
++#
++# --- pkgconfig
++echo $filelist | tr '[:blank:]' '\n' | egrep -q '/usr/(share|lib(64)?)/pkgconfig/.*\.pc' &amp;&amp; echo pkgconfig
++
++#
++# --- multiarch-utils
++echo $filelist | tr '[:blank:]' '\n' | grep -q '/multiarch-.*-linux/' &amp;&amp; echo multiarch-utils
++
++#
++# --- mono requires
++if [ -x /usr/bin/mono-find-requires ]; then
++echo $filelist | tr '[:blank:]' '\n' | /usr/bin/mono-find-requires
++fi
++
++#
++# haskell requires
++if [ -x /usr/bin/haskell-find-requires ]; then
++echo $filelist | tr '[:blank:]' '\n' | /usr/bin/haskell-find-requires
++fi
++
++
++exit 0
+
+
+Property changes on: rpm/rpm-setup/trunk/find-requires.in
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/gem_helper.rb
+===================================================================
+--- rpm/rpm-setup/trunk/gem_helper.rb (rev 0)
++++ rpm/rpm-setup/trunk/gem_helper.rb 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,173 @@
++#!/usr/bin/env ruby
++#--
++# Copyright 2010 Per &#216;yvind Karlsen &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">peroyvind at mandriva.org</A>&gt;
++# This program is free software. It may be redistributed and/or modified under
++# the terms of the LGPL version 2.1 (or later).
++#++
++
++require 'optparse'
++
++if ARGV[0] == &quot;build&quot; or ARGV[0] == &quot;install&quot;
++ require 'yaml'
++ require 'zlib'
++
++ filter = nil
++ opts = nil
++ keepcache = false
++ fixperms = false
++ gemdir = nil
++ dry_run = false
++ files = []
++ argv = ARGV[1..-1]
++ # Push this into some environment variables as the modified classes doesn't
++ # seem to be able to access our global variables.. &lt;/lameworkaround&gt;
++ ENV['GEM_MODE'] = ARGV[0]
++ if ARGV[0] == &quot;build&quot;
++ opts = OptionParser.new(&quot;#{$0} &lt;--filter PATTERN&gt;&quot;)
++ opts.on(&quot;-f&quot;, &quot;--filter PATTERN&quot;, &quot;Filter pattern to use for gem files&quot;) do |val|
++ filter = val
++ end
++ opts.on(&quot;-j&quot;, &quot;--jobs JOBS&quot;, &quot;Number of jobs to run simultaneously.&quot;) do |val|
++ ENV['jobs'] = &quot;-j&quot;+val
++ end
++ opts.on(&quot;--dry-run&quot;, &quot;Only show the files the gem will include&quot;) do
++ ARGV.delete(&quot;--dry-run&quot;)
++ dry_run = true
++ end
++ elsif ARGV[0] == &quot;install&quot;
++ opts = OptionParser.new(&quot;#{$0} &lt;--keep-cache&gt;&quot;)
++ opts.on(&quot;--keep-cache&quot;, &quot;Don't delete gem copy from cache&quot;) do
++ ARGV.delete(&quot;--keep-cache&quot;)
++ keepcache = true
++ end
++ opts.on(&quot;--fix-permissions&quot;, &quot;Force standard permissions for files installed&quot;) do
++ ARGV.delete(&quot;--fix-permissions&quot;)
++ fixperms = true
++ end
++ opts.on(&quot;-i&quot;, &quot;--install-dir GEMDIR&quot;, &quot;Gem repository directory&quot;) do |val|
++ gemdir = val
++ end
++ end
++ while argv.length &gt; 0
++ begin
++ opts.parse!(argv)
++ rescue OptionParser::InvalidOption =&gt; e
++ e.recover(argv)
++ end
++ argv.delete_at(0)
++ end
++
++ file_data = Zlib::GzipReader.open(&quot;metadata.gz&quot;)
++ header = YAML::load(file_data)
++ file_data.close()
++ body = header.instance_variable_get :@ivars
++
++ require 'rubygems'
++ spec = Gem::Specification.from_yaml(YAML.dump(header))
++
++ if ARGV[0] == &quot;install&quot;
++ system(&quot;gem %s %s.gem&quot; % [ARGV.join(' '), spec.full_name])
++ if !keepcache
++ require 'fileutils'
++ FileUtils.rm_rf(&quot;%s/cache&quot; % gemdir)
++ end
++ if fixperms
++ chmod = &quot;chmod u+r,u+w,g-w,g+r,o+r -R %s&quot; % gemdir
++ print &quot;\nFixing permissions:\n\n%s\n&quot; % chmod
++ system(&quot;%s&quot; % chmod)
++ print &quot;\n&quot;
++ end
++ end
++
++ if body['extensions'].size &gt; 0
++ require 'rubygems/ext'
++ module Gem::Ext
++ class Builder
++ def self.make(dest_path, results)
++ make_program = ENV['make']
++ unless make_program then
++ make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
++ end
++ cmd = make_program
++ if ENV['GEM_MODE'] == &quot;build&quot;
++ cmd += &quot; %s&quot; % ENV['jobs']
++ elsif ENV['GEM_MODE'] == &quot;install&quot;
++ cmd += &quot; DESTDIR='%s' install&quot; % ENV['DESTDIR']
++ end
++ results &lt;&lt; cmd
++ results &lt;&lt; `#{cmd} #{redirector}`
++
++ raise Gem::ExtensionBuildError, &quot;make failed:\n\n#{results}&quot; unless
++ $?.success?
++ end
++ end
++ end
++
++ require 'rubygems/installer'
++ module Gem
++ class Installer
++ def initialize(spec, options={})
++ @gem_dir = Dir.pwd
++ @spec = spec
++ end
++ end
++ class ConfigFile
++ def really_verbose
++ true
++ end
++ end
++ end
++
++ unless dry_run
++ Gem::Installer.new(spec).build_extensions
++ else
++ for ext in body['extensions']
++ files.push(ext[0..ext.rindex(&quot;/&quot;)-1]+&quot;.so&quot;)
++ end
++ end
++
++ body['extensions'].clear()
++ end
++ if ARGV[0] == &quot;build&quot;
++ body['test_files'].clear()
++
++ # We don't want ext/ in require_paths, it will only contain content for
++ # building extensions which needs to be installed in sitearchdir anyways..
++ idx = 0
++ for i in 0..body['require_paths'].size()-1
++ if body['require_paths'][idx].match(&quot;^ext(/|$)&quot;)
++ body['require_paths'].delete_at(idx)
++ else
++ idx += 1
++ end
++ end
++
++ # We'll get rid of all the files we don't really need to install
++ idx = 0
++ for i in 0..body['files'].size()-1
++ if filter and body['files'][idx].match(filter)
++ match = true
++ else
++ match = false
++ for path in body['require_paths']
++ if body['files'][idx].match(&quot;^%s/&quot; % path)
++ match = true
++ end
++ end
++ end
++ if !match
++ body['files'].delete_at(idx)
++ else
++ idx += 1
++ end
++ end
++
++ spec = Gem::Specification.from_yaml(YAML.dump(header))
++ unless dry_run
++ Gem::Builder.new(spec).build
++ else
++ files.concat(spec.files)
++ print &quot;%s\n&quot; % files.join(&quot;\n&quot;)
++ end
++ end
++end
+
+
+Property changes on: rpm/rpm-setup/trunk/gem_helper.rb
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/git-repository--after-tarball
+===================================================================
+--- rpm/rpm-setup/trunk/git-repository--after-tarball (rev 0)
++++ rpm/rpm-setup/trunk/git-repository--after-tarball 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,70 @@
++#!/bin/sh -ex
++
++# usage: git-repository--after-tarball [&lt;tarballs&gt;]
++# with optional environment variables:
++# - GIT_URL=&quot;<A HREF="git://xxx/foo.git">git://xxx/foo.git</A> [branch]&quot;
++# - GIT_REPOSITORY_CACHE=/zzz/foo.git
++#
++# the GIT_REPOSITORY_CACHE can be used with or without GIT_URL
++# - if GIT_URL is given, GIT_REPOSITORY_CACHE will be a &quot;bare&quot; clone of GIT_URL
++# - otherwise, GIT_REPOSITORY_CACHE can be created using:
++# % git clone --bare BUILD/foo-1 $GIT_REPOSITORY_CACHE
++# where foo-1 is the previous version
++
++
++tarballs=&quot;$*&quot;
++
++
++git_clone_in_cwd() {
++ URL=$1
++ [ -n &quot;$2&quot; ] &amp;&amp; BRANCH=&quot;origin/$2&quot;
++
++ git clone $URL .git-tmp
++
++ cd .git-tmp
++ git checkout $BRANCH
++ cd ..
++
++ mv .git-tmp/.git .
++ rm -r .git-tmp
++}
++
++our_git_clone() {
++ URL=$1
++ HEAD=$2
++
++ if [ -n &quot;$GIT_REPOSITORY_CACHE&quot; ]; then
++ if [ -d &quot;$GIT_REPOSITORY_CACHE&quot; ]; then
++ cd &quot;$GIT_REPOSITORY_CACHE&quot;
++ git fetch $GIT_URL
++ cd -
++ else
++ git clone --bare $URL &quot;$GIT_REPOSITORY_CACHE&quot;
++ fi
++ git_clone_in_cwd &quot;$GIT_REPOSITORY_CACHE&quot; $HEAD
++ else
++ git_clone_in_cwd $URL $HEAD
++ fi
++}
++
++set_GIT_AUTHOR_DATE() {
++ # taking date of first tarball, sorry for the other tarballs ;)
++ tarball=$1
++ export GIT_AUTHOR_DATE=`stat -c '%y' &quot;$RPM_SOURCE_DIR/$tarball&quot;`
++}
++
++if [ ! -e .git ]; then
++ if [ -n &quot;$GIT_URL&quot; ]; then
++ our_git_clone $GIT_URL
++ elif [ -n &quot;$GIT_REPOSITORY_CACHE&quot; -a -d &quot;$GIT_REPOSITORY_CACHE&quot; ]; then
++ git_clone_in_cwd &quot;$GIT_REPOSITORY_CACHE&quot; vanilla
++ else
++ git init
++ fi
++fi
++git add .
++set_GIT_AUTHOR_DATE $tarballs
++git commit -q -a --author=&quot;unknown author &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-dev at mageia.org</A>&gt;&quot; -m &quot;imported $tarballs&quot;
++git branch -f vanilla
++git branch -f patches-applied
++git checkout patches-applied
+
+
+Property changes on: rpm/rpm-setup/trunk/git-repository--after-tarball
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/git-repository--apply-patch
+===================================================================
+--- rpm/rpm-setup/trunk/git-repository--apply-patch (rev 0)
++++ rpm/rpm-setup/trunk/git-repository--apply-patch 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,158 @@
++#!/usr/bin/perl
++
++# this script can be used instead of &quot;/usr/bin/patch [options] -i xxx.patch&quot;
++
++
++use strict;
++use warnings;
++
++my @argv = @ARGV;
++my $verbose;
++
++my @patches;
++while ($argv[-1] =~ /\.(patch|diff)$/) {
++ unshift @patches, pop @argv;
++}
++
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">+ at patches</A> or die &quot;git-repository--apply-patch can not work with compressed patches\n&quot;; # happens when the patch is passed through stdin
++
++my @opts;
++while (@argv) {
++ my $s = shift @argv;
++ if ($s eq '-b') {
++ # we don't want .xxx files
++ } elsif ($s eq '--suffix') {
++ # we don't want .xxx files
++ shift @argv;
++ } elsif ($s eq '-i') {
++ # ignore &quot;-i&quot;
++ } else {
++ push @opts, $s;
++ }
++}
++
++# we really don't want .orig when using git (even when there are hunks)
++push @opts, '--no-backup-if-mismatch';
++
++foreach my $patch_file (@patches) {
++ my @header = get_patch_header($patch_file);
++
++ if (grep { /^Subject:/ } @header) {
++ my $patch_file_ = fix_git_patch($patch_file);
++ system_(&quot;git am &quot; . ($patch_file_ || $patch_file));
++ $patch_file_ and unlink $patch_file_;
++ } else {
++ system_(&quot;patch @opts -i $patch_file&quot;);
++
++ my ($patch_name) = $patch_file =~ m!([^/]*)\.(patch|diff)$!;
++
++ system_('git add .');
++ git_commit(commit_line_from_patch_name($patch_name) .
++ (@header ? &quot;\n\n&quot; . join('', cleanup_patch_header(@header)) : ''),
++ # use the date of the patch for the commit:
++ (stat($patch_file))[9] . &quot; +0000&quot;);
++ }
++}
++
++sub system_ {
++ my ($cmd) = @_;
++ print &quot;$cmd\n&quot; if $verbose;
++ system($cmd) == 0 or die &quot;$cmd failed\n&quot;;
++}
++
++sub git_commit {
++ my ($msg, $date) = @_;
++
++ $ENV{GIT_AUTHOR_DATE} = $date;
++ open(my $F, '| git commit -q --author=&quot;unknown author &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">mageia-dev at mageia.org</A>&gt;&quot; --file=-');
++ print $F $msg;
++ close $F or die &quot;git commit failed\n&quot;;
++}
++
++sub commit_line_from_patch_name {
++ my ($name) = @_;
++
++ # remove prefix (eg: &quot;libtool-1.5.26-xxx&quot; =&gt; &quot;xxx&quot;)
++ my $re_name = qr([a-z][\w+]*([_-][a-z][\w+]*)*)i;
++ my $re_rc = qr((rc\d*|RC\d+|beta\d*|pre\d*|p\d+|test));
++ my $re_special_version = qr([a-z]([._-]$re_rc?)?|[._-]?$re_rc?|[a-z]);
++ $name =~ s/^ $re_name [._-] \d+ (\.\d+)+ $re_special_version [._-]//x;
++
++ if (my $pkg_name = $ENV{PKG_NAME}) {
++ $name =~ s/^\Q$pkg_name\E[_-]//;
++ }
++
++ # replace &quot;-&quot; (resp. &quot;_&quot;) with spaces if there is no spaces nor &quot;_&quot; (resp. &quot;-&quot;)
++ if ($name !~ /[\s_]/ &amp;&amp; $name !~ /--/) {
++ $name =~ s/-/ /g;
++ } elsif ($name !~ /[\s-]/ &amp;&amp; $name !~ /__/) {
++ $name =~ s/_/ /g;
++ }
++ $name;
++}
++
++sub get_patch_header {
++ my ($file) = @_;
++ open(my $F, '&lt;', $file) or die &quot;can not open $file: $!\n&quot;;
++
++ my @header;
++ while (my $s = &lt;$F&gt;) {
++ last if $s =~ /^--- /;
++ push @header, $s;
++ }
++ pop @header while @header &amp;&amp; $header[-1] !~ /^\s*$/;
++
++ @header;
++}
++
++sub cleanup_patch_header {
++ my (@header) = @_;
++
++ my @r;
++ foreach (@header) {
++ s/^##\s// or last;
++ push @r, $_;
++ }
++ @r == @header and return @r;
++
++ @header;
++}
++
++# &quot;git format-patch&quot; and &quot;git am&quot; do not agree how to handle commit logs when
++# the first line is not separated from the rest.
++# eg:
++#
++# &gt; Subject: [PATCH 01/34] Delay NSS initialization until actually used
++# &gt; - since NSS is allergic (ie becomes non-functional) after forking, delay
++# &gt; it's initialization until really needed, ie lazy init in rpmDigestInit()
++#
++# workarounding by transforming header to:
++#
++# &gt; Subject: [PATCH 01/34] Delay NSS initialization until actually used
++# &gt;
++# &gt; - since NSS is allergic (ie becomes non-functional) after forking, delay
++# &gt; it's initialization until really needed, ie lazy init in rpmDigestInit()
++sub fix_git_patch {
++ my ($file) = @_;
++ open(my $F, '&lt;', $file) or die &quot;can not open $file: $!\n&quot;;
++
++ my ($last_line, @l);
++ while (my $s = &lt;$F&gt;) {
++ push @l, $s;
++
++ if ($s !~ /^\S+:\s/ &amp;&amp; $last_line &amp;&amp; $last_line =~ /^Subject:/) {
++ # argh, we are in the header, but the value is weird
++ # applying the fix
++ $l[-1] = &quot;\n&quot; . $l[-1];
++ push @l, &lt;$F&gt;;
++ output(&quot;$file.tmp&quot;, @l);
++ return &quot;$file.tmp&quot;;
++ } elsif ($s =~ /^\s*$/ || $s =~ /^--- /) {
++ last;
++ }
++ $last_line = $s;
++ }
++ undef;
++}
++
++sub output { my $f = shift; open(my $F, '&gt;', $f) or die &quot;output in file $f failed: $!\n&quot;; print $F $_ foreach @_; 1 }
+
+
+Property changes on: rpm/rpm-setup/trunk/git-repository--apply-patch
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/http.req
+===================================================================
+--- rpm/rpm-setup/trunk/http.req (rev 0)
++++ rpm/rpm-setup/trunk/http.req 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,165 @@
++#!/usr/bin/perl
++
++# This file can find requirements of html and jhtml files (cgi, gif,
++# java dependencies). It is a bit of a hack but it turns out to work
++# well. We track only dependencies between Relative URLs, absolute
++# URL's are assumed to be extenernal to the RPM system. We do not
++# parse the HTML but look through the set of strings (text surrounded
++# by quotes) for something which looks like a reference. This avoids
++# writing a full HTML parsers and tends to work really well. In this
++# manner we can track dependencies for: href, src, action and other
++# HTML tags which have not been invented yet.
++
++
++# The reference:
++#
++# href=&quot;<A HREF="http://www.perl.org/images/arrow.gif">http://www.perl.org/images/arrow.gif</A>&quot;
++#
++# does not create a dependency but the reference
++#
++# href=&quot;images/arrow.gif&quot;
++#
++# will create a dependency.
++
++# Additionally this program will find the requirements for sun jhtml
++# (html with embedded java) since jhtml is deprecated so is this part
++# of the code.
++
++# These references create dependencies:
++
++# &lt;form action=&quot;signup.jhtml&quot; method=&quot;POST&quot;&gt;
++#
++# &lt;img src=&quot;images/spacer.gif&quot; width=1&gt;
++#
++# &lt;A HREF=&quot;signup.jhtml&quot;&gt;
++#
++# adWidget.writeAd(out, &quot;login.html&quot;, &quot;expired&quot;);
++#
++# response.sendRedirect(&quot;<A HREF="http://">http://</A>&quot;+request.getServerName()+&quot;/mailcom/login.jhtml&quot;);
++
++
++# Notice how we look for strings WITH the proper ending. This is
++# because the java sometimes has really strange double quoting
++# conventions. Look at how splitting out the strings in this
++# fragment would get you the wrong text.
++
++# &lt;img src=&quot;`c.getImage(&quot;bhunterlogo.gif&quot;)`&quot; width=217 &gt;
++
++# Ignore non relative references since these dependencies can not be
++# met. (ie, no package you install will ever provide
++# '<A HREF="http://www.yahoo.com">http://www.yahoo.com</A>').
++
++# I use basename since I have seen too many http references which
++# begin with '../' and I can not figure out where the document root
++# is for the webserver this would just kill the dependnecy tracking
++# mechanism.
++
++
++
++use File::Basename;
++
++# this is the pattern of extensions to call requirements
++
++$DEPS_PAT = '\.((cgi)|(ps)|(pdf)|(png)|(jpg)|(gif)|(tiff)|(tif)|(xbm)|(html)|(htm)|(shtml)|(jhtml))'; #'
++
++if (&quot;@ARGV&quot;) {
++ foreach (@ARGV) {
++ process_file($_);
++ }
++} else {
++
++ # notice we are passed a list of filenames NOT as common in unix the
++ # contents of the file.
++
++ foreach (&lt;&gt;) {
++ process_file($_);
++ }
++}
++
++
++
++foreach $key (sort keys %seen) {
++ print &quot;$key\n&quot;;
++}
++
++
++sub process_file {
++
++ my ($file) = @_;
++ chomp $file;
++
++ open(FILE, &quot;&lt;$file&quot;)||
++ die(&quot;$0: Could not open file: '$file' : $!\n&quot;);
++
++ # we have to suck in the whole file at once because too many people
++ # split lines around &lt;java&gt;&lt;/java&gt; tags.
++
++ my (@file) = &lt;FILE&gt;;
++
++ $_= &quot;@file&quot;;
++
++ # ignore line based comments ( careful although it has two slashes
++ # '<A HREF="http://www.yahoo.com">http://www.yahoo.com</A>' is not a comment! )
++
++ s!^\s*//.*$!!mg;
++ s!//\s.*$!!mg;
++ s!\s//.*$!!mg;
++
++ # ignore multi-line comments
++ # (use non greedy operators)
++
++ s!/\*.*?\*/!!g;
++ s/&lt;!--.*?--&gt;//g;
++
++ # Ignore non relative references since these dependencies can not be
++ # met. (ie, no package you install will ever provide
++ # '<A HREF="http://www.yahoo.com">http://www.yahoo.com</A>').
++
++ # I use basename since I have seen too many http references which
++ # begin with '../' and I can not figure out where the document root
++ # is for the webserver this would just kill the dependnecy tracking
++ # mechanism.
++
++
++ # Notice how we look for strings WITH the proper ending. This is
++ # because the java sometimes has really strange double quoting
++ # conventions. Look at how splitting out the strings in this
++ # fragment would get you the wrong text.
++
++ # &lt;img src=&quot;`c.getImage(&quot;bhunterlogo.gif&quot;)`&quot; width=217 &gt;
++
++ while ( m{\&quot;([^\&quot;]+$DEPS_PAT)\&quot;}g ) {
++ my $string = $1;
++ chomp $string;
++ if ( $string !~ m!<A HREF="http://!">http://!</A> ) {
++ $string = basename($string);
++ $string =~ s!\s+!!g;
++ $seen{&quot;http(${string})&quot;} = 1;
++ }
++ }
++
++ {
++
++ # This section is only for use with (Sun) jhtml dependencies, and
++ # since jhtml is deprecated so is this code.
++
++ # java imports in jhtml (may have stars for leaf class)
++ # these may span several lines
++
++ while ( m!&lt;java type=((import)|(extends))&gt;\s*([^&lt;]+)\s*&lt;!g ) {
++ my $java_list = $4;
++ $java_list =~ s/;/ /g;
++ $java_list =~ s/\n+/ /g;
++ $java_list =~ s/\s+/ /g;
++ foreach $java_class ( split(/\s+/, $java_list) ) {
++ $seen{&quot;java(${java_class})&quot;} = 1;
++ }
++ }
++
++ }
++
++ close(FILE)||
++ die(&quot;$0: Could not close file: '$file' : $!\n&quot;);
++
++ return ;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/http.req
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/kmod.prov
+===================================================================
+--- rpm/rpm-setup/trunk/kmod.prov (rev 0)
++++ rpm/rpm-setup/trunk/kmod.prov 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,26 @@
++#!/bin/sh
++
++provideslist=`sed &quot;s/['\&quot;]/\\\&amp;/g&quot;`
++modulelist=$(echo &quot;$provideslist&quot; | egrep '^.*(/lib/modules/|/var/lib/dkms/).*\.ko(\.gz)?$')
++echo $modulelist | xargs -r /sbin/modinfo | \
++ perl -lne '
++$name = $1 if m!^filename:\s*(?:.*/)?([^/]+)\.k?o!;
++$ver = $1 if /^version:\s*[a-zA-Z]{0,6}\-?(\d+[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*-?[a-zA-Z]{0,6}\d?).*/;
++if (/^vermagic:/) {
++ print &quot;kmod\($name\)&quot; . ($ver ? &quot; = $ver&quot; : &quot;&quot;) if $name;
++ undef $name; undef $ver;
++}
++'
++dkmslist=$(echo &quot;$provideslist&quot; | egrep '(/var/lib/dkms-binary/[^/]+/[^/]+|/usr/src)/[^/]+/dkms.conf$')
++[ -n &quot;$dkmslist&quot; ] &amp;&amp; for d in $dkmslist; do
++ VERSION=`sed -rne 's/^PACKAGE_VERSION=&quot;?([^&quot;]+)&quot;?$/\1/;T;p' $d`
++ [ -z &quot;$VERSION&quot; ] &amp;&amp; continue
++ PACKAGE_NAME=`sed -rne 's/^PACKAGE_NAME=&quot;?([^&quot;]+)&quot;?$/\1/;T;p' $d`
++ MODULES=`sed -rne 's/^DEST_MODULE_NAME\[[0-9]+\]=&quot;?([^&quot;]+)&quot;?$/\1/;T;p' $d`
++ [ -z &quot;$MODULES&quot; ] &amp;&amp; MODULES=`sed -rne 's/^BUILT_MODULE_NAME\[[0-9]+\]=&quot;?([^&quot;]+)&quot;?$/\1/;T;p' $d`
++ # default on PACKAGE_NAME if no BUILT_MODULE_NAME is specified
++ [ -z &quot;$MODULES&quot; ] &amp;&amp; MODULES=$PACKAGE_NAME
++ echo &quot;$MODULES&quot; | sed -re &quot;s/\\\$PACKAGE_NAME/$PACKAGE_NAME/&quot; | while read m; do
++ echo &quot;kmod($m) = $VERSION&quot;
++ done
++done
+
+
+Property changes on: rpm/rpm-setup/trunk/kmod.prov
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/macros-perarch.in
+===================================================================
+--- rpm/rpm-setup/trunk/macros-perarch.in (rev 0)
++++ rpm/rpm-setup/trunk/macros-perarch.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,22 @@
++# Per-platform rpm configuration file.
++# $Id: macros-perarch.in 233523 2008-01-28 17:41:27Z pixel $
++
++#==============================================================================
++# ---- per-platform macros.
++#
++%_arch @RPMARCH@
++%_os @RPMOS@
++%optflags @RPMOPTFLAGS@
++
++#==============================================================================
++# ---- configure macros.
++#
++%_lib @LIB@
++
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">+ at MULTILIBSTART</A>@
++#---------------------------------------------------------------------
++# Multilibs
++%_multilibno @MULTILIBNO@
++%_multilibpatt (/%{_lib}|/usr/%{_lib}(|/gconv)|/usr/local/%{_lib}|/usr/X11R6/%{_lib}|/opt/%{_lib})/[^/]*\\.([oa]|la|so[0-9.]*)$
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">+ at MULTILIBEND</A>@
++
+
+Added: rpm/rpm-setup/trunk/macros.in
+===================================================================
+--- rpm/rpm-setup/trunk/macros.in (rev 0)
++++ rpm/rpm-setup/trunk/macros.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,56 @@
++# @RPMVENDORDIR@/macros:
++# Main Mangeia rpm configuration
++# Only modified macros goes here
++#
++# $Id: macros.in 260920 2009-09-25 10:10:18Z blino $
++#
++# This is a global RPM configuration file. All changes made here will
++# be lost when the rpm package is upgraded. Any per-system configuration
++# should be added to /etc/rpm/macros, while per-user configuration should
++# be added to ~/.rpmmacros.
++
++%_host_vendor @RPMCANONVENDOR@
++%_real_vendor @RPMCANONVENDOR@
++
++%_vendor @RPMVENDOR@
++
++%_gnu @CANONTARGETGNU@
++%_target_platform %{_target_cpu}-%{_real_vendor}-%{_target_os}%{?_gnu}
++
++%_host %{_host_cpu}-%{_real_vendor}-%{_host_os}
++
++%_changelog_truncate 3 years ago
++
++# use LZMA to compress binary packages:
++%_binary_payload w5.lzdio
++
++#==============================================================================
++# ---- GPG/PGP/PGP5 signature macros.
++# Macro(s) to hold the arguments passed to GPG/PGP for package
++# signing and verification.
++#
++
++# We disable the gpg key automatic querying
++%_hkp_keyserver_query %nil
++
++
++# Verify digest/signature flags for various rpm modes:
++# 0x30300 (_RPMVSF_NODIGESTS) --nohdrchk if set, don't check digest(s)
++# 0xc0c00 (_RPMVSF_NOSIGNATURES) --nosignature if set, don't check signature(s)
++# 0xf0000 (_RPMVSF_NOPAYLOAD) --nolegacy if set, check header+payload (if possible)
++# 0x00f00 (_RPMVSF_NOHEADER) --nohdrchk if set, don't check rpmdb headers
++%_vsflags_query 0xc0c00
++
++
++# Open all indices before doing chroot(2).
++#
++%_openall_before_chroot 1
++
++%_repackage_all_erasures 0
++
++%_query_all_fmt %%{name}-%%{version}-%%{release}
++
++%_rpmlock_path %{_dbpath}/__db.000
++
++# activate filetriggers (cf <A HREF="http://wiki.mandriva.com/en/Rpm_filetriggers">http://wiki.mandriva.com/en/Rpm_filetriggers</A>)
++%_filetriggers_dir /var/lib/rpm/filetriggers
+
+Added: rpm/rpm-setup/trunk/magic.prov
+===================================================================
+--- rpm/rpm-setup/trunk/magic.prov (rev 0)
++++ rpm/rpm-setup/trunk/magic.prov 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,167 @@
++#!/usr/bin/perl
++
++use File::Basename;
++use Getopt::Long;
++
++# this dependency analysis program is the only one which need to know
++# the RPM buildroot to do its work.
++
++# Figuring out what files are really executables via magic numbers is
++# hard. Not only is every '#!' an executable of some type (with a
++# potentially infinite supply of interpreters) but there are thousands
++# of valid binary magic numbers for old OS's and old CPU types.
++
++# Permissions do not always help discriminate binaries from the rest
++# of the files, on Solaris the shared libraries are marked as
++# 'executable'.
++
++# -rwxr-xr-x 1 bin bin 1013248 Jul 1 1998 /lib/libc.so.1
++
++# I would like to let the 'file' command take care of the magic
++# numbers for us. Alas! under linux file prints different kind of
++# messages for each interpreter, there is no common word 'script' to
++# look for.
++
++# ' perl commands text'
++# ' Bourne shell script text'
++# ' a /usr/bin/wish -f script text'
++
++# WORSE on solaris there are entries which say:
++
++# ' current ar archive, not a dynamic executable or shared object'
++
++# how do I grep for 'executable' when people put a 'not executable' in
++# there? I trim off everything after the first comma (if there is
++# one) and if the result has the string 'executable' in it then it may
++# be one.
++
++
++# so we must also do some magic number processing ourselves, and be
++# satisfied with 'good enough'.
++
++# I look for files which have atleast one of the executable bits set
++# and are either labled 'executable' by the file command (see above
++# restriction) OR have a '#!' as their first two characters.
++
++
++$is_mode_executable=oct(111);
++
++# set a known path
++
++$ENV{'PATH'}= (
++ ':/usr/bin'.
++ ':/bin'.
++ '');
++
++# taint perl requires we clean up these bad environmental variables.
++
++delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
++
++$BUILDROOT = '';
++%option_linkage = (
++ &quot;buildroot&quot; =&gt; \$BUILDROOT,
++ );
++
++if( !GetOptions (\%option_linkage, &quot;buildroot=s&quot;) ) {
++ die(&quot;Illegal options in \@ARGV: '@ARGV'\n&quot;);
++
++}
++
++if ($BUILDROOT == '/') {
++ $BUILDROOT = '';
++}
++
++if (&quot;@ARGV&quot;) {
++ foreach (@ARGV) {
++ process_file($_);
++ }
++} else {
++
++ # notice we are passed a list of filenames NOT as common in unix the
++ # contents of the file.
++
++ foreach (&lt;&gt;) {
++ process_file($_);
++ }
++}
++
++
++foreach $module (sort keys %provides) {
++ print &quot;executable($module)\n&quot;;
++}
++
++exit 0;
++
++
++
++
++sub is_file_script {
++
++ my ($file) = @_;
++ chomp $file;
++
++ my $out = 0;
++ open(FILE, &quot;&lt;$file&quot;)||
++ die(&quot;$0: Could not open file: '$file' : $!\n&quot;);
++
++ my $rc = sysread(FILE,$line,2);
++
++ if ( ($rc &gt; 1) &amp;&amp; ($line =~ m/^\#\!/) ) {
++ $out = 1;
++ }
++
++ close(FILE) ||
++ die(&quot;$0: Could not close file: '$file' : $!\n&quot;);
++
++ return $out;
++}
++
++
++
++sub is_file_binary_executable {
++ my ($file) = @_;
++
++ $file_out=`file $file`;
++ # trim off any extra descriptions.
++ $file_out =~ s/\,.*$//;
++
++ my $out = 0;
++ if ($file_out =~ m/executable/ ) {
++ $out = 1;
++ }
++ return $out;
++}
++
++
++sub process_file {
++ my ($file) = @_;
++ chomp $file;
++
++ my $prov_name = $file;
++ $prov_name =~ s!^$BUILDROOT!!;
++
++ # If its a link find the file it points to. Dead links do not
++ # provide anything.
++
++ while (-l $file) {
++ my $newfile = readlink($file);
++ if ($newfile !~ m!^/!) {
++ $newfile = dirname($file).'/'.$newfile;
++ } else {
++ $newfile = $BUILDROOT.$newfile;
++ }
++ $file = $newfile;
++ }
++
++ (-f $file) || return ;
++ ( (stat($file))[2] &amp; $is_mode_executable ) || return ;
++
++ is_file_script($file) ||
++ is_file_binary_executable($file) ||
++ return ;
++
++ $provides{$prov_name}=1;
++ $provides{basename($prov_name)}=1;
++
++ return ;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/magic.prov
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/magic.req
+===================================================================
+--- rpm/rpm-setup/trunk/magic.req (rev 0)
++++ rpm/rpm-setup/trunk/magic.req 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,143 @@
++#!/usr/bin/perl
++
++# Given a list of filenames on the command line or on stdin this
++# script returns the interpreter that is required to run the
++# filenames. Usually this is extracted from the #! line of the file
++# but we also handle the various 'exec' tricks that people use to
++# start the interpreter via an intermediate shell.
++
++# Also we want to convert:
++# /usr/local/bin/perl5.00404
++# /usr/local/bin/tclsh8.0
++# into dependencies with RPM version numbers.
++
++
++
++
++
++# These have all been seen on our system or are &quot;recommended&quot; in
++# various man pages.
++
++# Examples:
++
++# #!/bin/sh
++# # the next line restarts using wish \
++# exec wish &quot;$0&quot; &quot;$@&quot;
++
++
++# #!/bin/sh -- # -*- perl -*- -p
++# eval 'exec /usr/bin/perl -wS $0 ${1+&quot;$@&quot;}'
++# if $running_under_some_shell;
++
++
++# #!/bin/sh -- # -*- perl -*- -p
++# eval '(exit $?0)' &amp;&amp; eval 'exec /usr/bin/perl -wS $0 ${1+&quot;$@&quot;}'
++
++
++# #!/bin/sh -- # -*- perl -*- -p
++# &amp; eval 'exec /usr/bin/perl -wS $0 $argv:q'
++# if $running_under_some_shell;
++
++
++# #! /usr/bin/env python
++
++
++use File::Basename;
++
++if (&quot;@ARGV&quot;) {
++ foreach (@ARGV) {
++ process_file($_);
++ }
++} else {
++
++ # notice we are passed a list of filenames NOT as common in unix the
++ # contents of the file.
++
++ foreach (&lt;&gt;) {
++ process_file($_);
++ }
++}
++
++
++foreach $prog (sort keys %require) {
++
++
++ # ignore variable interpolation and any program whose name is made
++ # up only of non word characters ('&lt;', '&amp;&amp;', etc).
++
++ ( ( $prog != /\$/ ) || ( $prog =~ /^\W+$/ ) ) &amp;&amp;
++ next;
++
++ # filenames of the form './miniperl' will be reported in canonical
++ # manner 'miniperl'
++
++ $prog =~ s!^\./!!;
++
++ if ( $prog !~ /\$/ ) {
++ print &quot;exectuable($prog)\n&quot;;
++ }
++
++ $prog=basename($prog);
++
++ if ( $prog !~ /\$/ ) {
++ print &quot;exectuable($prog)\n&quot;;
++
++ # get the correct version dependencies for magic numbers like:
++ # /usr/local/bin/perl5.00404
++ # /usr/local/bin/tclsh8.0
++ # these are always PACKAGE versions since typical executables do not
++ # have versions
++
++ my $version = &quot;&quot;;
++ if ($module =~ s/([.0-9]+)$//) {
++ $version = &quot;$1&quot;;
++ print &quot;$prog&gt;=$version\n&quot;;
++ }
++
++ }
++
++}
++
++exit 0;
++
++
++sub process_file {
++
++ my ($file) = @_;
++ chomp $file;
++
++ my ($version, $magic) = ();
++
++ (-f $file) || return ;
++
++ open(FILE, &quot;&lt;$file&quot;)||
++ die(&quot;$0: Could not open file: '$file' : $!\n&quot;);
++
++ my $rc = sysread(FILE,$line,1000);
++
++ $rc =~ s/\#.*\n//g;
++
++ # Ignore all parameter substitution.
++ # I have no hope of parsing something like:
++ # exec ${SHELL:-/bin/sh}
++ $rc =~ s/\$\{.*\}//g;
++ $rc =~ s/echo\s+.*[\n;]//g;
++
++ if ( ($rc &gt; 1) &amp;&amp; ($line =~ m/^\#\!\s*/) ) {
++
++ if ($line =~ m/\b(exec|env)\s+([\'\&quot;\`\\]+)?([^ \t\n\r]+)/) {
++ $require{$3} = 1;
++ }
++
++ # strip off extra lines and any arguments
++ if ($line =~ m/^\#\!\s*([^ \t\n\r]+)/) {
++ $require{$1} = 1;
++ }
++
++ }
++
++ close(FILE) ||
++ die(&quot;$0: Could not close file: '$file' : $!\n&quot;);
++
++ return ;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/magic.req
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/make_arch_macrosfiles.sh.in
+===================================================================
+--- rpm/rpm-setup/trunk/make_arch_macrosfiles.sh.in (rev 0)
++++ rpm/rpm-setup/trunk/make_arch_macrosfiles.sh.in 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,74 @@
++#!/bin/sh
++
++# $Id: make_arch_macrosfiles.sh.in 233560 2008-01-29 15:58:29Z pixel $
++
++MINPUT=&quot;$1&quot;
++ARCH=&quot;$2&quot;
++
++LIB=lib
++OS=@RPMOS@
++OPTFLAGS=`perl -ane &quot;m/^optflags:\s*${ARCH}\b\s*(.*)/ and print \\$1&quot; &lt; rpmrc`
++MULTILIBNO=
++
++case $ARCH in
++ i*86|k6|athlon|pentium*)
++ MULTILIBNO=1
++ CANONARCH=i386
++ ;;
++ amd64|x86_64)
++ MULTILIBNO=2
++ CANONARCH=x86_64
++ LIB=lib64
++ ;;
++ sparc|sparcv9)
++ MULTILIBNO=1
++ CANONARCH=sparc
++ ;;
++ sparc64)
++ MULTILIBNO=2
++ CANONARCH=sparc64
++ LIB=lib64
++ ;;
++ ppc|powerpc|ppc32)
++ MULTILIBNO=1
++ CANONARCH=ppc
++ ;;
++ ppc64|powerpc64)
++ MULTILIBNO=2
++ CANONARCH=ppc64
++ LIB=lib64
++ ;;
++ alpha)
++ CANONARCH=alpha
++ ;;
++ s390)
++ CANONARCH=s390-linux
++ MULTILIBNO=1
++ ;;
++ s390x)
++ CANONARCH=s390x
++ LIB=lib64;
++ MULTILIBNO=2 ;;
++ *)
++ CANONARCH=$ARCH
++ LIB=lib
++ ;;
++esac
++
++if [ -n &quot;$MULTILIBNO&quot; ]; then
++ MULTILIBSED='-e /^@MULTILIB/d -e <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at MULTILIBNO</A>@,'$MULTILIBNO,
++else
++ MULTILIBSED='-e /^@MULTILIBSTART@/,/^@MULTILIBEND@/d'
++fi
++
++if [ -n &quot;$OPTFLAGS&quot; ]; then
++ OPTFLAGSSED=&quot;s/@RPMOPTFLAGS@/${OPTFLAGS}/g&quot;
++else
++ OPTFLAGSSED='s,^%optflags.*,,'
++fi
++
++cat &quot;$MINPUT&quot; | sed \
++ -e &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at RPMARCH</A>@,$CANONARCH,g&quot; \
++ -e &quot;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">s, at LIB</A>@,$LIB,g&quot; \
++ -e &quot;$OPTFLAGSSED&quot; \
++ $MULTILIBSED
+
+Added: rpm/rpm-setup/trunk/perl.prov
+===================================================================
+--- rpm/rpm-setup/trunk/perl.prov (rev 0)
++++ rpm/rpm-setup/trunk/perl.prov 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,187 @@
++#!/usr/bin/perl
++
++# RPM (and it's source code) is covered under two separate licenses.
++
++# The entire code base may be distributed under the terms of the GNU
++# General Public License (GPL), which appears immediately below.
++# Alternatively, all of the source code in the lib subdirectory of the
++# RPM source code distribution as well as any code derived from that
++# code may instead be distributed under the GNU Library General Public
++# License (LGPL), at the choice of the distributor. The complete text
++# of the LGPL appears at the bottom of this file.
++
++# This alternative is allowed to enable applications to be linked
++# against the RPM library (commonly called librpm) without forcing
++# such applications to be distributed under the GPL.
++
++# Any questions regarding the licensing of RPM should be addressed to
++# Erik Troan &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">ewt at redhat.com</A>&gt;.
++
++# a simple script to print the proper name for perl libraries.
++
++# To save development time I do not parse the perl grammmar but
++# instead just lex it looking for what I want. I take special care to
++# ignore comments and pod's.
++
++# it would be much better if perl could tell us the proper name of a
++# given script.
++
++# The filenames to scan are either passed on the command line or if
++# that is empty they are passed via stdin.
++
++# If there are lines in the file which match the pattern
++# (m/^\s*\$VERSION\s*=\s+/)
++# then these are taken to be the version numbers of the modules.
++# Special care is taken with a few known idioms for specifying version
++# numbers of files under rcs/cvs control.
++
++# If there are strings in the file which match the pattern
++# m/^\s*\$RPM_Provides\s*=\s*[&quot;'](.*)['&quot;]/i
++# then these are treated as additional names which are provided by the
++# file and are printed as well.
++
++# I plan to rewrite this in C so that perl is not required by RPM at
++# build time.
++
++# by Ken Estes Mail.com <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">kestes at staff.mail.com</A>
++
++if (&quot;@ARGV&quot;) {
++ foreach (@ARGV) {
++ next if !/\.pm$/;
++ process_file($_);
++ }
++} else {
++
++ # notice we are passed a list of filenames NOT as common in unix the
++ # contents of the file.
++
++ foreach (&lt;&gt;) {
++ chomp $_;
++ next if !/\.pm$/;
++ process_file($_) if -f $_;
++ }
++}
++
++
++foreach $module (sort keys %require) {
++ if (length($require{$module}) == 0) {
++ print &quot;perl($module)\n&quot;;
++ } else {
++
++ # I am not using rpm3.0 so I do not want spaces arround my
++ # operators. Also I will need to change the processing of the
++ # $RPM_* variable when I upgrade.
++
++ my $v = qx{ rpm --eval '%perl_convert_version $require{$module}' };
++ print &quot;perl($module) = $v\n&quot;;
++ }
++}
++
++exit 0;
++
++
++
++sub process_file {
++
++ my ($file) = @_;
++
++ open(FILE, &quot;&lt;$file&quot;) || return;
++
++ my ($package, $version, $incomment, $inover) = ();
++
++ while (&lt;FILE&gt;) {
++
++ # skip the documentation
++
++ # we should not need to have item in this if statement (it
++ # properly belongs in the over/back section) but people do not
++ # read the perldoc.
++
++ if (m/^=(head1|head2|pod|item)/) {
++ $incomment = 1;
++ }
++
++ if (m/^=(cut)/) {
++ $incomment = 0;
++ $inover = 0;
++ }
++
++ if (m/^=(over)/) {
++ $inover = 1;
++ }
++
++ if (m/^=(back)/) {
++ $inover = 0;
++ }
++
++ if ($incomment || $inover || m/^\s*#/) {
++ next;
++ }
++
++ # skip the data section
++ if (m/^__(DATA|END)__$/) {
++ last;
++ }
++
++ # not everyone puts the package name of the file as the first
++ # package name so we report all namespaces as if they were
++ # provided packages (really ugly).
++
++ if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*;/) {
++ # some internal packages, like DB, might be temporarily redefined inside a module.
++ if (!($package &amp;&amp; $1 eq 'DB')) {
++ $package=$1;
++ undef $version;
++ $require{$package}=undef;
++ }
++ }
++
++ # after we found the package name take the first assignment to
++ # $VERSION as the version number. Exporter requires that the
++ # variable be called VERSION so we are safe.
++
++ # here are examples of VERSION lines from the perl distribution
++
++ #FindBin.pm:$VERSION = $VERSION = sprintf(&quot;%d.%02d&quot;, q$Revision: 270245 $ =~ /(\d+)\.(\d+)/);
++ #ExtUtils/Install.pm:$VERSION = substr q$Revision: 270245 $, 10;
++ #CGI/Apache.pm:$VERSION = (qw$Revision: 270245 $)[1];
++ #DynaLoader.pm:$VERSION = $VERSION = &quot;1.03&quot;; # avoid typo warning
++ #$Locale::Maketext::Simple::VERSION = '0.21';
++
++ if (
++ ($package) &amp;&amp;
++ (m/^(.*;)?\s*((my|our)\s+)?\$(${package}::)?VERSION\s*=\s+/)
++ ) {
++
++ # first see if the version string contains the string
++ # '$Revision' this often causes bizzare strings and is the most
++ # common method of non static numbering.
++
++ if (m/(\$Revision: (\d+[.0-9]+))/) {
++ $version= $2;
++ } elsif (m/[\'\&quot;]?(\d+[.0-9]+)[\'\&quot;]?/) {
++
++ # look for a static number hard coded in the script
++
++ $version= $1;
++ }
++ $require{$package}=$version;
++ }
++
++ # Each keyword can appear multiple times. Don't
++ # bother with datastructures to store these strings,
++ # if we need to print it print it now.
++
++ if ( m/^\s*\$RPM_Provides\s*=\s*[&quot;'](.*)['&quot;]/i) {
++ foreach $_ (split(/\s+/, $1)) {
++ print &quot;$_\n&quot;;
++ }
++ }
++
++ }
++
++ close(FILE) ||
++ die(&quot;$0: Could not close file: '$file' : $!\n&quot;);
++
++ return ;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/perl.prov
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/perl.req
+===================================================================
+--- rpm/rpm-setup/trunk/perl.req (rev 0)
++++ rpm/rpm-setup/trunk/perl.req 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,245 @@
++#!/usr/bin/perl
++
++# RPM (and it's source code) is covered under two separate licenses.
++
++# The entire code base may be distributed under the terms of the GNU
++# General Public License (GPL), which appears immediately below.
++# Alternatively, all of the source code in the lib subdirectory of the
++# RPM source code distribution as well as any code derived from that
++# code may instead be distributed under the GNU Library General Public
++# License (LGPL), at the choice of the distributor. The complete text
++# of the LGPL appears at the bottom of this file.
++
++# This alternatively is allowed to enable applications to be linked
++# against the RPM library (commonly called librpm) without forcing
++# such applications to be distributed under the GPL.
++
++# Any questions regarding the licensing of RPM should be addressed to
++# Erik Troan &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">ewt at redhat.com</A>&gt;.
++
++# a simple makedepends like script for perl.
++
++# To save development time I do not parse the perl grammmar but
++# instead just lex it looking for what I want. I take special care to
++# ignore comments and pod's.
++
++# It would be much better if perl could tell us the dependencies of a
++# given script.
++
++# The filenames to scan are either passed on the command line or if
++# that is empty they are passed via stdin.
++
++# If there are strings in the file which match the pattern
++# m/^\s*\$RPM_Requires\s*=\s*[&quot;'](.*)['&quot;]/i
++# then these are treated as additional names which are required by the
++# file and are printed as well.
++
++# I plan to rewrite this in C so that perl is not required by RPM at
++# build time.
++
++# by Ken Estes Mail.com <A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">kestes at staff.mail.com</A>
++
++if (&quot;@ARGV&quot;) {
++ foreach (@ARGV) {
++ process_file($_);
++ }
++} else {
++
++ # notice we are passed a list of filenames NOT as common in unix the
++ # contents of the file.
++
++ foreach (&lt;&gt;) {
++ chomp $_;
++ process_file($_) if -f $_;
++ }
++}
++
++
++foreach $module (sort keys %require) {
++ if (length($require{$module}) == 0) {
++ print &quot;perl($module)\n&quot;;
++ } else {
++
++ # I am not using rpm3.0 so I do not want spaces arround my
++ # operators. Also I will need to change the processing of the
++ # $RPM_* variable when I upgrade.
++
++ my $v = qx{ rpm --eval '%perl_convert_version $require{$module}' };
++ print &quot;perl($module) &gt;= $v\n&quot;;
++ }
++}
++
++exit 0;
++
++
++
++sub process_file {
++
++ my ($file) = @_;
++
++ open(FILE, &quot;&lt;$file&quot;) || return;
++
++ while (&lt;FILE&gt;) {
++
++ # skip the &quot;= &lt;&lt;&quot; block
++
++ if ( ( m/^\s*\$(.*)\s*=\s*&lt;&lt;\s*[&quot;'](.*)['&quot;]/i) ||
++ ( m/^\s*\$(.*)\s*=\s*&lt;&lt;\s*(.*);/i) ) {
++ $tag = $2;
++ while (&lt;FILE&gt;) {
++ ( $_ =~ /^$tag/) &amp;&amp; last;
++ }
++ }
++
++ # skip the documentation
++
++ # we should not need to have item in this if statement (it
++ # properly belongs in the over/back section) but people do not
++ # read the perldoc.
++
++ if ( (m/^=(head1|head2|pod|item)/) .. (m/^=(cut)/) ) {
++ next;
++ }
++
++ if ( (m/^=(over)/) .. (m/^=(back)/) ) {
++ next;
++ }
++
++ # skip the data section
++ if (m/^__(DATA|END)__$/) {
++ last;
++ }
++
++ # Each keyword can appear multiple times. Don't
++ # bother with datastructures to store these strings,
++ # if we need to print it print it now.
++
++ if ( m/^\s*\$RPM_Requires\s*=\s*[&quot;'](.*)['&quot;]/i) {
++ foreach $_ (split(/\s+/, $1)) {
++ print &quot;$_\n&quot;;
++ }
++ }
++
++ if (
++
++# ouch could be in a eval, perhaps we do not want these since we catch
++# an exception they must not be required
++
++# eval { require Term::ReadLine } or die $@;
++# eval &quot;require Term::Rendezvous;&quot; or die $@;
++# eval { require Carp } if defined $^S; # If error/warning during compilation,
++
++
++ (m/^(\s*) # we hope the inclusion starts the line
++ (require|use)\s+(?!\{) # do not want 'do {' loops
++ # quotes around name are always legal
++ [\'\&quot;]?([^\;\ \'\&quot;\t]*)[\'\&quot;]?[\t\;\ ]
++ # the syntax for 'use' allows version requirements
++ \s*([.0-9]*)
++ /x)
++ ) {
++ my ($whitespace, $statement, $module, $version) = ($1, $2, $3,$4);
++ my $usebase;
++
++ # we only consider require statements that are flush against
++ # the left edge. any other require statements give too many
++ # false positives, as they are usually inside of an if statement
++ # as a fallback module or a rarely used option
++
++ ($whitespace ne &quot;&quot; &amp;&amp; $statement eq &quot;require&quot;) &amp;&amp; next;
++
++ # if there is some interpolation of variables just skip this
++ # dependency, we do not want
++ # do &quot;$ENV{LOGDIR}/$rcfile&quot;;
++
++ ($module =~ m/\$/) &amp;&amp; next;
++
++ # skip if the phrase was &quot;use of&quot; -- shows up in gimp-perl, et al
++ next if $module eq 'of';
++
++ # if the module ends in a comma we probaly caught some
++ # documentation of the form 'check stuff,\n do stuff, clean
++ # stuff.' there are several of these in the perl distribution
++
++ ($module =~ m/[,&gt;]$/) &amp;&amp; next;
++
++ # if the module name starts in a dot it is not a module name.
++ # Is this necessary? Please give me an example if you turn this
++ # back on.
++
++ # ($module =~ m/^\./) &amp;&amp; next;
++
++ # if the module ends with .pm strip it to leave only basename.
++ # starts with /, which means its an absolute path to a file
++ if ($module =~ m(^/)) {
++ print &quot;$module\n&quot;;
++ next;
++ }
++
++ # as seen in some perl scripts
++ # use base qw(App::CLI Class::Accessor::Chained::Fast App::CLI::Command);
++ if ($module eq 'base') {
++ $require{$module} = $version;
++ $line{$module} = $current_line;
++ ($module = $_) =~ s/use\s*base\s*//;
++ $module =~ s/qw\((.*)\)\s*;/$1/;
++ $module =~ s/qw(.)(.*)\1\s*;/$2/;
++ $module =~ s/\s*;$//;
++ $module =~ s/#.*//;
++ $usebase = 1;
++ }
++ # sometimes people do use POSIX qw(foo), or use POSIX(qw(foo)) etc
++ # we can strip qw.*$, as well as (.*$:
++ $module =~ s/qw.*$//;
++ $module =~ s/\(.*$//;
++
++ $module =~ s/\.pm$//;
++
++ # some perl programmers write 'require URI/URL;' when
++ # they mean 'require URI::URL;'
++
++ $module =~ s/\//::/;
++
++ # trim off trailing parenthesis if any. Sometimes people pass
++ # the module an empty list.
++
++ $module =~ s/\(\s*\)$//;
++
++ # if module is a number then both require and use interpret that
++ # to mean that a particular version of perl is specified. Don't
++ # add a dependency, though, since the rpm will already require
++ # perl-base at the build version (via find-requires)
++ next if $module =~ /^v?\d/;
++
++ # ph files do not use the package name inside the file.
++ # perlmodlib documentation says:
++ # the .ph files made by h2ph will probably end up as
++ # extension modules made by h2xs.
++ # so do not spend much effort on these.
++
++ # there is no easy way to find out if a file named systeminfo.ph
++ # will be included with the name sys/systeminfo.ph so only use the
++ # basename of *.ph files
++
++ ($module =~ m/\.ph$/) &amp;&amp; next;
++
++ # if the module was loaded trough base, we need to split the list
++ if ($usebase) {
++ my $current_line = $_;
++ foreach (split(/\s+/, $module)) {
++ next unless $_;
++ $require{$_} = $version;
++ $line{$_} = $current_line;
++ }
++ } else {
++ $require{$module}=$version;
++ $line{$module}=$current_line;
++ }
++ }
++ }
++
++ close(FILE) ||
++ die(&quot;$0: Could not close file: '$file' : $!\n&quot;);
++
++ return ;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/perl.req
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/perl.req-from-meta
+===================================================================
+--- rpm/rpm-setup/trunk/perl.req-from-meta (rev 0)
++++ rpm/rpm-setup/trunk/perl.req-from-meta 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,56 @@
++#!/usr/bin/perl
++
++use strict;
++use warnings;
++
++use JSON qw{ from_json };
++use YAML qw{ Load };
++
++# slurp the file
++my $path = shift;
++open my $fh, '&lt;', $path or die &quot;can't open $path: $!&quot;;
++my $data = do { local $/; &lt;$fh&gt; };
++close $fh;
++
++# parse meta - either yaml or json
++my $meta = $path =~ /\.yml$/
++ ? Load( $data )
++ : from_json( $data );
++
++# dump the requires with their version
++my $requires = $meta-&gt;{&quot;meta-spec&quot;}{version} &gt;= 2
++ ? $meta-&gt;{prereqs}{runtime}{requires}
++ : $meta-&gt;{requires};
++foreach my $module ( sort keys %$requires ) {
++ next if $module eq 'perl'; # minimum perl version
++ my $version = $requires-&gt;{$module};
++ if ( $version == 0 ) {
++ print &quot;perl($module)\n&quot;;
++ } else {
++ my $v = qx{ rpm --eval '%perl_convert_version $version' };
++ print &quot;perl($module) &gt;= $v&quot;;
++ }
++}
++
++exit;
++
++=head1 NAME
++
++perl.req-from-meta - extract requires from meta file
++
++=head1 SYNOPSIS
++
++ $ perl.req-from-meta /path/to/META.yml
++ $ perl.req-from-meta /path/to/META.json
++
++=head1 DESCRIPTION
++
++This script will extract Perl requirements from the distribution meta
++file. For each such requires, it'll convert the minimum version to
++follow Mageia perl versioning (using C&lt;%perl_convert_version&gt;), and
++print them as:
++
++ perl(Foo::Bar)
++ perl(App::Frobnizer) &gt;= 1.23.456
++
++Minimum perl version are skipped.
+
+
+Property changes on: rpm/rpm-setup/trunk/perl.req-from-meta
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/php.prov
+===================================================================
+--- rpm/rpm-setup/trunk/php.prov (rev 0)
++++ rpm/rpm-setup/trunk/php.prov 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,20 @@
++#!/usr/bin/perl
++#####################################################################
++# #
++# Check system dependences between php-pear modules #
++# #
++# Pawe\xB3 Go\xB3aszewski &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">blues at ds.pg.gda.pl</A>&gt; #
++# Micha\xB3 Moskal &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">malekith at pld-linux.org</A>&gt; #
++# ------------------------------------------------------------------#
++# TODO: #
++#####################################################################
++
++$pear = &quot;/usr/share/pear&quot;;
++
++foreach (@ARGV ? @ARGV : &lt;&gt;) {
++ chomp;
++ $f = $_;
++ next unless ($f =~ /$pear.*\.php$/);
++ $f =~ s/.*$pear\///;
++ print &quot;pear($f)\n&quot;;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/php.prov
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/php.req
+===================================================================
+--- rpm/rpm-setup/trunk/php.req (rev 0)
++++ rpm/rpm-setup/trunk/php.req 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,81 @@
++#!/usr/bin/perl
++#####################################################################
++# #
++# Check system dependences between php-pear modules #
++# #
++# Pawe\xB3 Go\xB3aszewski &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">blues at ds.pg.gda.pl</A>&gt; #
++# Micha\xB3 Moskal &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">malekith at pld-linux.org</A>&gt; #
++# ------------------------------------------------------------------#
++# TODO: #
++# - extension_loaded - dependencies. #
++# - some clean-up... #
++#####################################################################
++
++$pear = &quot;/usr/share/pear&quot;;
++
+<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">+ at files</A> = ();
++%req = ();
++
++foreach (@ARGV ? $ARGV : &lt;&gt; ) {
++ chomp;
++ $f = $_;
++ push @files, $f;
++ open(F, &quot;&lt; $f&quot;) or die;
++
++ if ($f =~ /$pear/) {
++ $file_dir = $f;
++ $file_dir =~ s|.*$pear/||;
++ $file_dir =~ s|/[^/]*$||;
++ } else {
++ $file_dir = undef;
++ }
++
++ while (&lt;F&gt;) {
++ # skip comments
++ next if (/^\s*(#|\/\/|\*|\/\*)/);
++ while (/(\W|^)(require|include)(_once)?
++ \s* \(? \s* (&quot;([^&quot;]*)&quot;|'([^']*)')
++ \s* \)? \s* ;/xg) {
++
++ if ($5 ne &quot;&quot;) {
++ $x = $5;
++ } elsif ($6 ne &quot;&quot;) {
++ $x = $6;
++ } else {
++ next;
++ }
++ do $x =~ s/\/\.?\//\//g while $x =~ /\/\.?\//;
++ do $x =~ s/(\/|^)[^\/]*[^.]\/\.\.\//\1/g while $x =~ /(\/|^)[^\/]*[^.]\/\.\.\//;
++ next if ($x =~ m|^\.\.?/| or $x =~ /\$/);
++ next unless ($x =~ /\.php$/);
++ $req{$x} = 1;
++ }
++
++ next unless (defined $file_dir);
++
++ while (/(\W|^)(require|include)(_once)?
++ \s* \(? \s* dirname \s* \( \s* __FILE__ \s* \) \s* \. \s*
++ (&quot;([^&quot;]*)&quot;|'([^']*)')
++ \s* \)? \s* ;/xg) {
++ if ($5 ne &quot;&quot;) {
++ $x = $5;
++ } elsif ($6 ne &quot;&quot;) {
++ $x = $6;
++ } else {
++ next;
++ }
++
++ next unless ($x =~ /\.php$/);
++
++ $x = &quot;$file_dir/$x&quot;;
++ do $x =~ s/\/\.?\//\//g while $x =~ /\/\.?\//;
++ do $x =~ s/(\/|^)[^\/]*[^.]\/\.\.\//\1/g while $x =~ /(\/|^)[^\/]*[^.]\/\.\.\//;
++ $req{$x} = 1;
++ }
++ }
++}
++
++f: for $f (keys %req) {
++ for $g (@files) { next f if ($g =~ /\Q$f\E$/); }
++ print &quot;pear($f)\n&quot;;
++}
+
+
+Property changes on: rpm/rpm-setup/trunk/php.req
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/pkgconfigdeps.sh
+===================================================================
+--- rpm/rpm-setup/trunk/pkgconfigdeps.sh (rev 0)
++++ rpm/rpm-setup/trunk/pkgconfigdeps.sh 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,46 @@
++#!/bin/bash
++
++pkgconfig=/usr/bin/pkg-config
++test -x $pkgconfig || {
++ cat &gt; /dev/null
++ exit 0
++}
++
++[ $# -ge 1 ] || {
++ cat &gt; /dev/null
++ exit 0
++}
++
++case $1 in
++-P|--provides)
++ while read filename ; do
++ case &quot;${filename}&quot; in
++ *.pc)
++ # Assume that this file doesn't contain useful information.
++ pcfiles=${pcfiles}&quot; ${filename}&quot;
++ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$(dirname ${filename})
++ ;;
++ esac
++ done
++ # Query the dependencies of the package.
++ PKG_CONFIG_PATH=$PKG_CONFIG_PATH $pkgconfig --print-provides $pcfiles 2&gt; /dev/null | while read n r v ; do
++ # We have a dependency. Make a note that we need the pkgconfig
++ # tool for this package.
++ echo &quot;pkgconfig($n)&quot; &quot;$r&quot; &quot;$v&quot;
++ done
++ # The dependency on the pkgconfig package itself.
++ ;;
++-R|--requires)
++ while read filename ; do
++ case &quot;${filename}&quot; in
++ *.pc)
++ pcfiles=${pcfiles}&quot; ${filename}&quot;
++ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$(dirname ${filename})
++ esac
++ done
++ PKG_CONFIG_PATH=$PKG_CONFIG_PATH $pkgconfig --print-requires ${pcfiles} 2&gt; /dev/null | while read n r v ; do
++ echo &quot;pkgconfig($n)&quot; &quot;$r&quot; &quot;$v&quot;
++ done
++ ;;
++esac
++exit 0
+
+
+Property changes on: rpm/rpm-setup/trunk/pkgconfigdeps.sh
+___________________________________________________________________
+Added: svn:executable
+ + *
+Added: svn:eol-style
+ + native
+
+Added: rpm/rpm-setup/trunk/pythoneggs.py
+===================================================================
+--- rpm/rpm-setup/trunk/pythoneggs.py (rev 0)
++++ rpm/rpm-setup/trunk/pythoneggs.py 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,180 @@
++#!/usr/bin/env python
++# -*- coding: utf-8 -*-
++#
++# Copyright 2010 Per &#216;yvind Karlsen &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">peroyvind at mandriva.org</A>&gt;
++#
++# This program is free software. It may be redistributed and/or modified under
++# the terms of the LGPL version 2.1 (or later).
++#
++# RPM5 python (egg) dependency generator.
++#
++
++from getopt import getopt
++from os.path import basename, dirname, isdir, sep, splitext
++from sys import argv, stdin, version
++from pkg_resources import Distribution, FileMetadata, PathMetadata
++from distutils.sysconfig import get_python_lib
++
++
++opts, args = getopt(argv[1:], 'hPRSCOE',
++ ['help', 'provides', 'requires', 'suggests', 'conflicts', 'obsoletes', 'extras'])
++
++Provides = False
++Requires = False
++Suggests = False
++Conflicts = False
++Obsoletes = False
++Extras = False
++
++for o, a in opts:
++ if o in ('-h', '--help'):
++ print '-h, --help\tPrint help'
++ print '-P, --provides\tPrint Provides'
++ print '-R, --requires\tPrint Requires'
++ print '-S, --suggests\tPrint Suggests'
++ print '-C, --conflicts\tPrint Conflicts'
++ print '-O, --obsoletes\tPrint Obsoletes (unused)'
++ print '-E, --extras\tPrint Extras '
++ exit(1)
++ elif o in ('-P', '--provides'):
++ Provides = True
++ elif o in ('-R', '--requires'):
++ Requires = True
++ elif o in ('-S', '--suggests'):
++ Suggests = True
++ elif o in ('-C', '--conflicts'):
++ Conflicts = True
++ elif o in ('-O', '--obsoletes'):
++ Obsoletes = True
++ elif o in ('-E', '--extras'):
++ Extras = True
++
++if Requires:
++ py_abi = True
++else:
++ py_abi = False
++py_deps = {}
++if args:
++ files = args
++else:
++ files = stdin.readlines()
++for f in files:
++ f = f.strip()
++ lower = f.lower()
++ name = 'python(abi)'
++ # add dependency based on path, versioned if within versioned python directory
++ if py_abi and (lower.endswith('.py') or lower.endswith('.pyc') or lower.endswith('.pyo')):
++ if not name in py_deps:
++ py_deps[name] = []
++ purelib = get_python_lib(standard_lib=1, plat_specific=0).split(version[:3])[0]
++ platlib = get_python_lib(standard_lib=1, plat_specific=1).split(version[:3])[0]
++ for lib in (purelib, platlib):
++ if lib in f:
++ spec = ('==',f.split(lib)[1].split(sep)[0])
++ if not spec in py_deps[name]:
++ py_deps[name].append(spec)
++ # Determine provide, requires, conflicts &amp; suggests based on egg metadata
++ if lower.endswith('.egg') or \
++ lower.endswith('.egg-info') or \
++ lower.endswith('.egg-link'):
++ dist_name = basename(f)
++ if isdir(f):
++ path_item = dirname(f)
++ metadata = PathMetadata(path_item, f)
++ else:
++ path_item = f
++ metadata = FileMetadata(f)
++ dist = Distribution.from_location(path_item, dist_name, metadata)
++ if Provides:
++ # If egg metadata says package name is python, we provide python(abi)
++ if dist.key == 'python':
++ name = 'python(abi)'
++ if not name in py_deps:
++ py_deps[name] = []
++ py_deps[name].append(('==', dist.py_version))
++ name = 'pythonegg(%s)' % dist.project_name
++ if not name in py_deps:
++ py_deps[name] = []
++ if dist.version:
++ spec = ('==', dist.version)
++ if not spec in py_deps[name]:
++ py_deps[name].append(spec)
++ if Requires or (Suggests and dist.extras):
++ name = 'python(abi)'
++ # If egg metadata says package name is python, we don't add dependency on python(abi)
++ if dist.key == 'python':
++ py_abi = False
++ if name in py_deps:
++ py_deps.pop(name)
++ elif py_abi and dist.py_version:
++ if not name in py_deps:
++ py_deps[name] = []
++ spec = ('==', dist.py_version)
++ if not spec in py_deps[name]:
++ py_deps[name].append(spec)
++ deps = dist.requires()
++ if Suggests:
++ depsextras = dist.requires(extras=dist.extras)
++ if not Requires:
++ for dep in reversed(depsextras):
++ if dep in deps:
++ depsextras.remove(dep)
++ deps = depsextras
++ # add requires/suggests based on egg metadata
++ for dep in deps:
++ name = 'pythonegg(%s)' % dep.project_name
++ for spec in dep.specs:
++ if spec[0] != '!=':
++ if not name in py_deps:
++ py_deps[name] = []
++ if not spec in py_deps[name]:
++ py_deps[name].append(spec)
++ if not dep.specs:
++ py_deps[name] = []
++ # Unused, for automatic sub-package generation based on 'extras' from egg metadata
++ # TODO: implement in rpm later, or...?
++ if Extras:
++ deps = dist.requires()
++ extras = dist.extras
++ print extras
++ for extra in extras:
++ print '%%package\textras-%s' % extra
++ print 'Summary:\t%s extra for %s python egg' % (extra, dist.project_name)
++ print 'Group:\t\tDevelopment/Python'
++ depsextras = dist.requires(extras=[extra])
++ for dep in reversed(depsextras):
++ if dep in deps:
++ depsextras.remove(dep)
++ deps = depsextras
++ for dep in deps:
++ for spec in dep.specs:
++ if spec[0] == '!=':
++ print 'Conflicts:\t%s %s %s' % (dep.project_name, '==', spec[1])
++ else:
++ print 'Requires:\t%s %s %s' % (dep.project_name, spec[0], spec[1])
++ print '%%description\t%s' % extra
++ print '%s extra for %s python egg' % (extra, dist.project_name)
++ print '%%files\t\textras-%s\n' % extra
++ if Conflicts:
++ # Should we really add conflicts for extras?
++ # Creating a meta package per extra with suggests on, which has
++ # the requires/conflicts in stead might be a better solution...
++ for dep in dist.requires(extras=dist.extras):
++ name = dep.project_name
++ for spec in dep.specs:
++ if spec[0] == '!=':
++ if not name in py_deps:
++ py_deps[name] = []
++ spec = ('==', spec[1])
++ if not spec in py_deps[name]:
++ py_deps[name].append(spec)
++names = py_deps.keys()
++names.sort()
++for name in names:
++ if py_deps[name]:
++ # Print out versioned provides, requires, suggests, conflicts
++ for spec in py_deps[name]:
++ print '%s %s %s' % (name, spec[0], spec[1])
++ else:
++ # Print out unversioned provides, requires, suggests, conflicts
++ print name
+
+
+Property changes on: rpm/rpm-setup/trunk/pythoneggs.py
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+Added: rpm/rpm-setup/trunk/rpm-spec-mode.el
+===================================================================
+--- rpm/rpm-setup/trunk/rpm-spec-mode.el (rev 0)
++++ rpm/rpm-setup/trunk/rpm-spec-mode.el 2011-01-06 17:30:05 UTC (rev 231)
+@@ -0,0 +1,1366 @@
++;;; rpm-spec-mode.el --- RPM spec file editing commands for Emacs/XEmacs
++
++;; $Id: rpm-spec-mode.el 232641 2007-12-20 09:58:22Z pixel $
++
++;; Copyright (C) 1997-2002 Stig Bj\xF8rlykke, &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">stigb at tihlde.org</A>&gt;
++
++;; Author: Stig Bj\xF8rlykke, &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">stigb at tihlde.org</A>&gt;
++;; Keywords: unix, languages
++;; Version: 0.12
++
++;; This file is part of XEmacs.
++
++;; XEmacs 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, or (at your option)
++;; any later version.
++
++;; XEmacs 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 XEmacs; see the file COPYING. If not, write to the
++;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
++;; MA 02111-1307, USA.
++
++;;; Synched up with: not in GNU Emacs.
++
++;;; Thanx to:
++
++;; Tore Olsen &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">toreo at tihlde.org</A>&gt; for some general fixes.
++;; Steve Sanbeg &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">sanbeg at dset.com</A>&gt; for navigation functions and
++;; some Emacs fixes.
++;; Tim Powers &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">timp at redhat.com</A>&gt; and Trond Eivind Glomsr\xF8d
++;; &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">teg at redhat.com</A>&gt; for Red Hat adaptions and some fixes.
++;; Chmouel Boudjnah &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-sysadm">chmouel at mandrakesoft.com</A>&gt; for Mandrake fixes.
++
++;;; ToDo:
++
++;; - rewrite function names.
++;; - autofill changelog entries.
++;; - customize rpm-tags-list and rpm-group-tags-list.
++;; - get values from `rpm --showrc'.
++;; - ssh/rsh for compile.
++;; - finish integrating the new navigation functions in with existing stuff.
++;; - use a single prefix consistently (internal)
++
++;;; Commentary:
++
++;; This mode is used for editing spec files used for building RPM packages.
++;;
++;; Most recent version is available from:
++;; &lt;URL:<A HREF="http://www.tihlde.org/~stigb/rpm-spec-mode.el">http://www.tihlde.org/~stigb/rpm-spec-mode.el</A>&gt;
++;;
++;; Put this in your .emacs file to enable autoloading of rpm-spec-mode,
++;; and auto-recognition of &quot;.spec&quot; files:
++;;
++;; (autoload 'rpm-spec-mode &quot;rpm-spec-mode.el&quot; &quot;RPM spec mode.&quot; t)
++;; (setq auto-mode-alist (append '((&quot;\\.spec&quot; . rpm-spec-mode))
++;; auto-mode-alist))
++;;------------------------------------------------------------
++;;
++
++;;; Code:
++(require 'cl)
++
++(defconst rpm-spec-mode-version &quot;0.12&quot; &quot;Version of `rpm-spec-mode'.&quot;)
++
++;Fix for GNU/Emacs
++(if (not(featurep 'xemacs))
++ (fset 'define-obsolete-variable-alias 'make-obsolete))
++
++(defgroup rpm-spec nil
++ &quot;RPM spec mode with Emacs/XEmacs enhancements.&quot;
++ :prefix &quot;rpm-spec-&quot;
++ :group 'languages)
++
++(defcustom rpm-spec-build-command &quot;rpmbuild&quot;
++ &quot;Command for building a RPM package.&quot;
++ :type 'string
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-add-attr nil
++ &quot;Add \&quot;%attr\&quot; entry for file listings or not.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-short-circuit nil
++ &quot;Skip straight to specified stage.
++(ie, skip all stages leading up to the specified stage). Only valid
++in \&quot;%build\&quot; and \&quot;%install\&quot; stage.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-no-deps nil
++ &quot;Do not verify the dependencies.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-timecheck &quot;0&quot;
++ &quot;Set the \&quot;timecheck\&quot; age (0 to disable).
++The timecheck value expresses, in seconds, the maximum age of a file
++being packaged. Warnings will be printed for all files beyond the
++timecheck age.&quot;
++ :type 'integer
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-buildroot &quot;&quot;
++ &quot;Override the BuildRoot tag with directory &lt;dir&gt;.&quot;
++ :type 'string
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-target &quot;&quot;
++ &quot;Interpret given string as `arch-vendor-os'.
++Set the macros _target, _target_arch and _target_os accordingly&quot;
++ :type 'string
++ :group 'rpm-spec)
++
++(define-obsolete-variable-alias
++ 'rpm-completion-ignore-case 'rpm-spec-completion-ignore-case)
++
++(defcustom rpm-spec-completion-ignore-case t
++ &quot;*Non-nil means that case differences are ignored during completion.
++A value of nil means that case is significant.
++This is used during Tempo template completion.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-clean nil
++ &quot;Remove the build tree after the packages are made.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-rmsource nil
++ &quot;Remove the source and spec file after the packages are made.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-nobuild nil
++ &quot;Do not execute any build stages. Useful for testing out spec files.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-sign-gpg nil
++ &quot;Embed a GPG signature in the package.
++This signature can be used to verify the integrity and the origin of
++the package.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-nodeps nil
++ &quot;Do not verify build dependencies.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-old-rpm nil
++ &quot;Set if using `rpm' as command for building packages.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(define-obsolete-variable-alias
++ 'rpm-initialize-sections 'rpm-spec-initialize-sections)
++
++(defcustom rpm-spec-initialize-sections t
++ &quot;Automatically add empty section headings to new spec files.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-use-tabs nil
++ &quot;Use tabs instead of a space to indent tags.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(define-obsolete-variable-alias
++ 'rpm-insert-version 'rpm-spec-insert-changelog-version)
++
++(defcustom rpm-spec-insert-changelog-version t
++ &quot;Automatically add version in a new change log entry.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-insert-changelog-version-with-shell t
++ &quot;Automatically add version with shell in a new change log entry.&quot;
++ :type 'boolean
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-user-full-name nil
++ &quot;*Full name of the user.
++This is used in the change log and the Packager tag. It defaults to the
++value returned by function `user-full-name'.&quot;
++ :type '(choice (const :tag &quot;Use `user-full-name'&quot; nil)
++ string)
++ :group 'rpm-spec)
++
++(defcustom rpm-spec-user-mail-address nil
++ &quot;*Email address of the user.
++This is used in the change log and the Packager tag. It defaults to the
++value returned by function `user-mail-address'.&quot;
++ :type '(choice (const :tag &quot;Use `user-mail-address'&quot; nil)
++ string)
++ :group 'rpm-spec)
++
++(defgroup rpm-spec-faces nil
++ &quot;Font lock faces for `rpm-spec-mode'.&quot;
++ :group 'rpm-spec
++ :group 'faces)
++
++;;------------------------------------------------------------
++;; variables used by navigation functions.
++
++(defconst rpm-sections
++ '(&quot;preamble&quot; &quot;description&quot; &quot;prep&quot; &quot;setup&quot; &quot;build&quot; &quot;install&quot; &quot;clean&quot;
++ &quot;changelog&quot; &quot;files&quot;)
++ &quot;Partial list of section names.&quot;)
++(defvar rpm-section-list
++ '((&quot;preamble&quot;) (&quot;description&quot;) (&quot;prep&quot;) (&quot;setup&quot;) (&quot;build&quot;) (&quot;install&quot;)
++ (&quot;clean&quot;) (&quot;changelog&quot;) (&quot;files&quot;))
++ &quot;Partial list of section names.&quot;)
++(defconst rpm-scripts
++ '(&quot;pre&quot; &quot;post&quot; &quot;preun&quot; &quot;postun&quot;
++ &quot;trigger&quot; &quot;triggerin&quot; &quot;triggerun&quot; &quot;triggerpostun&quot;)
++ &quot;List of rpm scripts.&quot;)
++(defconst rpm-section-seperate &quot;^%\\(\\w+\\)\\s-&quot;)
++(defconst rpm-section-regexp
++ (eval-when-compile
++ (concat &quot;^%&quot;
++ (regexp-opt
++ ;; From RPM 4.1 sources, file build/parseSpec.c: partList[].
++ '(&quot;build&quot; &quot;changelog&quot; &quot;clean&quot; &quot;description&quot; &quot;files&quot; &quot;install&quot;
++ &quot;package&quot; &quot;post&quot; &quot;postun&quot; &quot;pre&quot; &quot;prep&quot; &quot;preun&quot; &quot;trigger&quot;
++ &quot;triggerin&quot; &quot;triggerpostun&quot; &quot;triggerun&quot; &quot;verifyscript&quot;) t)
++ &quot;\\b&quot;))
++ &quot;Regular expression to match beginning of a section.&quot;)
++
++;;------------------------------------------------------------
++
++(defface rpm-spec-tag-face
++ '(( ((class color) (background light)) (:foreground &quot;blue&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;blue&quot;) ))
++ &quot;*The face used for tags.&quot;
++ :group 'rpm-spec-faces)
++
++(defface rpm-spec-macro-face
++ '(( ((class color) (background light)) (:foreground &quot;purple&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;yellow&quot;) ))
++ &quot;*The face used for macros.&quot;
++ :group 'rpm-spec-faces)
++
++(defface rpm-spec-var-face
++ '(( ((class color) (background light)) (:foreground &quot;maroon&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;maroon&quot;) ))
++ &quot;*The face used for environment variables.&quot;
++ :group 'rpm-spec-faces)
++
++(defface rpm-spec-doc-face
++ '(( ((class color) (background light)) (:foreground &quot;magenta&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;magenta&quot;) ))
++ &quot;*The face used for document files.&quot;
++ :group 'rpm-spec-faces)
++
++(defface rpm-spec-dir-face
++ '(( ((class color) (background light)) (:foreground &quot;green&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;green&quot;) ))
++ &quot;*The face used for directories.&quot;
++ :group 'rpm-spec-faces)
++
++(defface rpm-spec-package-face
++ '(( ((class color) (background light)) (:foreground &quot;red&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;red&quot;) ))
++ &quot;*The face used for files.&quot;
++ :group 'rpm-spec-faces)
++
++(defface rpm-spec-ghost-face
++ '(( ((class color) (background light)) (:foreground &quot;red&quot;) )
++ ( ((class color) (background dark)) (:foreground &quot;red&quot;) ))
++ &quot;*The face used for ghost tags.&quot;
++ :group 'rpm-spec-faces)
++
++;;; GNU emacs font-lock needs these...
++(defvar rpm-spec-macro-face
++ 'rpm-spec-macro-face &quot;*Face for macros.&quot;)
++(defvar rpm-spec-var-face
++ 'rpm-spec-var-face &quot;*Face for environment variables.&quot;)
++(defvar rpm-spec-tag-face
++ 'rpm-spec-tag-face &quot;*Face for tags.&quot;)
++(defvar rpm-spec-package-face
++ 'rpm-spec-package-face &quot;*Face for package tag.&quot;)
++(defvar rpm-spec-dir-face
++ 'rpm-spec-dir-face &quot;*Face for directory entries.&quot;)
++(defvar rpm-spec-doc-face
++ 'rpm-spec-doc-face &quot;*Face for documentation entries.&quot;)
++(defvar rpm-spec-ghost-face
++ 'rpm-spec-ghost-face &quot;*Face for \&quot;%ghost\&quot; files.&quot;)
++
++(defvar rpm-default-umask &quot;-&quot;
++ &quot;*Default umask for files, specified with \&quot;%attr\&quot;.&quot;)
++(defvar rpm-default-owner &quot;root&quot;
++ &quot;*Default owner for files, specified with \&quot;%attr\&quot;.&quot;)
++(defvar rpm-default-group &quot;root&quot;
++ &quot;*Default group for files, specified with \&quot;%attr\&quot;.&quot;)
++
++;;------------------------------------------------------------
++
++(defvar rpm-no-gpg nil &quot;Tell rpm not to sign package.&quot;)
++
++(defvar rpm-tags-list
++ ;; From RPM 4.1 sources, file build/parsePreamble.c: preambleList[].&quot;)
++ '((&quot;AutoProv&quot;)
++ (&quot;AutoReq&quot;)
++ (&quot;AutoReqProv&quot;)
++ (&quot;BuildArch&quot;)
++ (&quot;BuildArchitectures&quot;)
++ (&quot;BuildConflicts&quot;)
++ (&quot;BuildPreReq&quot;)
++ (&quot;BuildRequires&quot;)
++ (&quot;BuildRoot&quot;)
++ (&quot;Conflicts&quot;)
++ (&quot;License&quot;)
++ (&quot;%description&quot;)
++ (&quot;Distribution&quot;)
++ (&quot;DistURL&quot;)
++ (&quot;DocDir&quot;)
++ (&quot;Epoch&quot;)
++ (&quot;ExcludeArch&quot;)
++ (&quot;ExcludeOS&quot;)
++ (&quot;ExclusiveArch&quot;)
++ (&quot;ExclusiveOS&quot;)
++ (&quot;%files&quot;)
++ (&quot;Group&quot;)
++ (&quot;Icon&quot;)
++ (&quot;%ifarch&quot;)
++ (&quot;License&quot;)
++ (&quot;Name&quot;)
++ (&quot;NoPatch&quot;)
++ (&quot;NoSource&quot;)
++ (&quot;Obsoletes&quot;)
++ (&quot;%package&quot;)
++ (&quot;Packager&quot;)
++ (&quot;Patch&quot;)
++ (&quot;Prefix&quot;)
++ (&quot;Prefixes&quot;)
++ (&quot;PreReq&quot;)
++ (&quot;Provides&quot;)
++ (&quot;Release&quot;)
++ (&quot;Requires&quot;)
++ (&quot;RHNPlatform&quot;)
++ (&quot;Serial&quot;)
++ (&quot;Source&quot;)
++ (&quot;Summary&quot;)
++ (&quot;URL&quot;)
++ (&quot;Vendor&quot;)
++ (&quot;Version&quot;))
++ &quot;List of elements that are valid tags.&quot;)
++
++;; echo &quot;(defvar rpm-group-tags-list&quot;
++;; echo &quot; ;; Auto generated from Mageia GROUPS file&quot;
++;; printf &quot;\t%s\n&quot; &quot;'(&quot;
++;; cat /usr/share/doc/*/GROUPS | while read i; do
++;; printf &quot;\t %s%s%s\n&quot; '(&quot;' &quot;$i&quot; '&quot;)'
++;; done
++;; printf &quot;\t%s\n\t%s&quot; &quot;)&quot; '&quot;List of elements that are valid group tags.&quot;)'
++
++(defvar rpm-group-tags-list
++ ;; Auto generated from Mageia GROUPS file
++ '(
++ (&quot;Accessibility&quot;)
++ (&quot;Archiving/Backup&quot;)
++ (&quot;Archiving/Cd burning&quot;)
++ (&quot;Archiving/Compression&quot;)
++ (&quot;Archiving/Other&quot;)
++ (&quot;Books/Computer books&quot;)
++ (&quot;Books/Faqs&quot;)
++ (&quot;Books/Howtos&quot;)
++ (&quot;Books/Literature&quot;)
++ (&quot;Books/Other&quot;)
++ (&quot;Communications&quot;)
++ (&quot;Databases&quot;)
++ (&quot;Development/C&quot;)
++ (&quot;Development/C++&quot;)
++ (&quot;Development/Databases&quot;)
++ (&quot;Development/GNOME and GTK+&quot;)
++ (&quot;Development/Java&quot;)
++ (&quot;Development/KDE and Qt&quot;)
++ (&quot;Development/Kernel&quot;)
++ (&quot;Development/Other&quot;)
++ (&quot;Development/Perl&quot;)
++ (&quot;Development/PHP&quot;)
++ (&quot;Development/Python&quot;)
++ (&quot;Development/Ruby&quot;)
++ (&quot;Editors&quot;)
++ (&quot;Education&quot;)
++ (&quot;Emulators&quot;)
++ (&quot;File tools&quot;)
++ (&quot;Games/Adventure&quot;)
++ (&quot;Games/Arcade&quot;)
++ (&quot;Games/Boards&quot;)
++ (&quot;Games/Cards&quot;)
++ (&quot;Games/Other&quot;)
++ (&quot;Games/Puzzles&quot;)
++ (&quot;Games/Sports&quot;)
++ (&quot;Games/Strategy&quot;)
++ (&quot;Graphical desktop/Enlightenment&quot;)
++ (&quot;Graphical desktop/FVWM based&quot;)
++ (&quot;Graphical desktop/GNOME&quot;)
++ (&quot;Graphical desktop/Icewm&quot;)
++ (&quot;Graphical desktop/KDE&quot;)
++ (&quot;Graphical desktop/Other&quot;)
++ (&quot;Graphical desktop/Sawfish&quot;)
++ (&quot;Graphical desktop/WindowMaker&quot;)
++ (&quot;Graphical desktop/Xfce&quot;)
++ (&quot;Graphics&quot;)
++ (&quot;Monitoring&quot;)
++ (&quot;Networking/Chat&quot;)
++ (&quot;Networking/File transfer&quot;)
++ (&quot;Networking/IRC&quot;)
++ (&quot;Networking/Instant messaging&quot;)
++ (&quot;Networking/Mail&quot;)
++ (&quot;Networking/News&quot;)
++ (&quot;Networking/Other&quot;)
++ (&quot;Networking/Remote access&quot;)
++ (&quot;Networking/WWW&quot;)
++ (&quot;Office&quot;)
++ (&quot;Publishing&quot;)
++ (&quot;Sciences/Astronomy&quot;)
++ (&quot;Sciences/Biology&quot;)
++ (&quot;Sciences/Chemistry&quot;)
++ (&quot;Sciences/Computer science&quot;)
++ (&quot;Sciences/Geosciences&quot;)
++ (&quot;Sciences/Mathematics&quot;)
++ (&quot;Sciences/Other&quot;)
++ (&quot;Sciences/Physics&quot;)
++ (&quot;Shells&quot;)
++ (&quot;Sound&quot;)
++ (&quot;System/Base&quot;)
++ (&quot;System/Configuration/Boot and Init&quot;)
++ (&quot;System/Configuration/Hardware&quot;)
++ (&quot;System/Configuration/Networking&quot;)
++ (&quot;System/Configuration/Other&quot;)
++ (&quot;System/Configuration/Packaging&quot;)
++ (&quot;System/Configuration/Printing&quot;)
++ (&quot;System/Fonts/Console&quot;)
++ (&quot;System/Fonts/True type&quot;)
++ (&quot;System/Fonts/Type1&quot;)
++ (&quot;System/Fonts/X11 bitmap&quot;)
++ (&quot;System/Internationalization&quot;)
++ (&quot;System/Kernel and hardware&quot;)
++ (&quot;System/Libraries&quot;)
++ (&quot;System/Servers&quot;)
++ (&quot;System/X11&quot;)
++ (&quot;Terminals&quot;)
++ (&quot;Text tools&quot;)
++ (&quot;Toys&quot;)
++ (&quot;Video&quot;)
++ )
++ &quot;List of elements that are valid group tags.&quot;)
++
++(defvar rpm-spec-mode-syntax-table nil
++ &quot;Syntax table in use in `rpm-spec-mode' buffers.&quot;)
++(unless rpm-spec-mode-syntax-table
++ (setq rpm-spec-mode-syntax-table (make-syntax-table))
++ (modify-syntax-entry ?\\ &quot;\\&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?\n &quot;&gt; &quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?\f &quot;&gt; &quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?\# &quot;&lt; &quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?/ &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?* &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?+ &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?- &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?= &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?% &quot;_&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?&lt; &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?&gt; &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?&amp; &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?| &quot;.&quot; rpm-spec-mode-syntax-table)
++ (modify-syntax-entry ?\' &quot;.&quot; rpm-spec-mode-syntax-table))
++
++(defvar rpm-spec-mode-map nil
++ &quot;Keymap used in `rpm-spec-mode'.&quot;)
++(unless rpm-spec-mode-map
++ (setq rpm-spec-mode-map (make-sparse-keymap))
++ (and (functionp 'set-keymap-name)
++ (set-keymap-name rpm-spec-mode-map 'rpm-spec-mode-map))
++ (define-key rpm-spec-mode-map &quot;\C-c\C-c&quot; 'rpm-change-tag)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-e&quot; 'rpm-add-change-log-entry)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-i&quot; 'rpm-insert-tag)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-n&quot; 'rpm-forward-section)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-o&quot; 'rpm-goto-section)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-p&quot; 'rpm-backward-section)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-r&quot; 'rpm-increase-release-tag)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-u&quot; 'rpm-insert-true-prefix)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-ba&quot; 'rpm-build-all)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-bb&quot; 'rpm-build-binary)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-bc&quot; 'rpm-build-compile)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-bi&quot; 'rpm-build-install)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-bl&quot; 'rpm-list-check)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-bp&quot; 'rpm-build-prepare)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-bs&quot; 'rpm-build-source)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-dd&quot; 'rpm-insert-dir)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-do&quot; 'rpm-insert-docdir)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-fc&quot; 'rpm-insert-config)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-fd&quot; 'rpm-insert-doc)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-ff&quot; 'rpm-insert-file)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-fg&quot; 'rpm-insert-ghost)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xa&quot; 'rpm-toggle-add-attr)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xb&quot; 'rpm-change-buildroot-option)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xc&quot; 'rpm-toggle-clean)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xd&quot; 'rpm-toggle-nodeps)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xf&quot; 'rpm-files-group)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xg&quot; 'rpm-toggle-sign-gpg)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xi&quot; 'rpm-change-timecheck-option)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xn&quot; 'rpm-toggle-nobuild)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xo&quot; 'rpm-files-owner)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xp&quot; 'rpm-change-target-option)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xr&quot; 'rpm-toggle-rmsource)
++ (define-key rpm-spec-mode-map &quot;\C-cxd&quot; 'rpm-toggle-no-deps)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xs&quot; 'rpm-toggle-short-circuit)
++ (define-key rpm-spec-mode-map &quot;\C-c\C-xu&quot; 'rpm-files-umask)
++ ;;(define-key rpm-spec-mode-map &quot;\C-q&quot; 'indent-spec-exp)
++ ;;(define-key rpm-spec-mode-map &quot;\t&quot; 'sh-indent-line)
++ )
++
++(defconst rpm-spec-mode-menu
++ (purecopy '(&quot;RPM spec&quot;
++ [&quot;Insert Tag...&quot; rpm-insert-tag t]
++ [&quot;Change Tag...&quot; rpm-change-tag t]
++ &quot;---&quot;
++ [&quot;Go to section...&quot; rpm-mouse-goto-section :keys &quot;C-c C-o&quot;]
++ [&quot;Forward section&quot; rpm-forward-section t]
++ [&quot;Backward section&quot; rpm-backward-section t]
++ &quot;---&quot;
++ [&quot;Add change log entry...&quot; rpm-add-change-log-entry t]
++ [&quot;Increase release tag&quot; rpm-increase-release-tag t]
++ &quot;---&quot;
++ (&quot;Add file entry&quot;
++ [&quot;Regular file...&quot; rpm-insert-file t]
++ [&quot;Config file...&quot; rpm-insert-config t]
++ [&quot;Document file...&quot; rpm-insert-doc t]
++ [&quot;Ghost file...&quot; rpm-insert-ghost t]
++ &quot;---&quot;
++ [&quot;Directory...&quot; rpm-insert-dir t]
++ [&quot;Document directory...&quot; rpm-insert-docdir t]
++ &quot;---&quot;
++ [&quot;Insert %{prefix}&quot; rpm-insert-true-prefix t]
++ &quot;---&quot;
++ [&quot;Default add \&quot;%attr\&quot; entry&quot; rpm-toggle-add-attr
++ :style toggle :selected rpm-spec-add-attr]
++ [&quot;Change default umask for files...&quot; rpm-files-umask t]
++ [&quot;Change default owner for files...&quot; rpm-files-owner t]
++ [&quot;Change default group for files...&quot; rpm-files-group t])
++ (&quot;Build Options&quot;
++ [&quot;Short circuit&quot; rpm-toggle-short-circuit
++ :style toggle :selected rpm-spec-short-circuit]
++ [&quot;No deps&quot; rpm-toggle-no-deps
++ :style toggle :selected rpm-spec-no-deps]
++ [&quot;Remove source&quot; rpm-toggle-rmsource
++ :style toggle :selected rpm-spec-rmsource]
++ [&quot;Clean&quot; rpm-toggle-clean
++ :style toggle :selected rpm-spec-clean]
++ [&quot;No build&quot; rpm-toggle-nobuild
++ :style toggle :selected rpm-spec-nobuild]
++ [&quot;GPG sign&quot; rpm-toggle-sign-gpg
++ :style toggle :selected rpm-spec-sign-gpg]
++ [&quot;Ignore dependencies&quot; rpm-toggle-nodeps
++ :style toggle :selected rpm-spec-nodeps]
++ &quot;---&quot;
++ [&quot;Change timecheck value...&quot; rpm-change-timecheck-option t]
++ [&quot;Change buildroot value...&quot; rpm-change-buildroot-option t]
++ [&quot;Change target value...&quot; rpm-change-target-option t])
++ (&quot;RPM Build&quot;
++ [&quot;Execute \&quot;%prep\&quot; stage&quot; rpm-build-prepare t]
++ [&quot;Do a \&quot;list check\&quot;&quot; rpm-list-check t]
++ [&quot;Do the \&quot;%build\&quot; stage&quot; rpm-build-compile t]
++ [&quot;Do the \&quot;%install\&quot; stage&quot; rpm-build-install t]
++ &quot;---&quot;
++ [&quot;Build binary package&quot; rpm-build-binary t]
++ [&quot;Build source package&quot; rpm-build-source t]
++ [&quot;Build binary and source&quot; rpm-build-all t])
++ &quot;---&quot;
++ [&quot;About rpm-spec-mode&quot; rpm-about-rpm-spec-mode t]
++ )))
++
++(defvar rpm-spec-font-lock-keywords
++ '(
++ (&quot;%[a-zA-Z0-9-_]+&quot; 0 rpm-spec-macro-face)
++ (&quot;^\\([a-zA-Z0-9]+\\)\\(\([a-zA-Z0-9,]+\)\\):&quot;
++ (1 rpm-spec-tag-face)
++ (2 rpm-spec-ghost-face))
++ (&quot;^\\([a-zA-Z0-9]+\\):&quot; 1 rpm-spec-tag-face)
++ (&quot;%\\(de\\(fine\\|scription\\)\\|files\\|package\\)[ \t]+\\([^-][^ \t\n]*\\)&quot;
++ (3 rpm-spec-package-face))
++ (&quot;%p\\(ost\\|re\\)\\(un\\)?[ \t]+\\([^-][^ \t\n]*\\)&quot;
++ (3 rpm-spec-package-face))
++ (&quot;%configure &quot; 0 rpm-spec-macro-face)
++ (&quot;%dir[ \t]+\\([^ \t\n]+\\)[ \t]*&quot; 1 rpm-spec-dir-face)
++ (&quot;%doc\\(dir\\)?[ \t]+\\(.*\\)\n&quot; 2 rpm-spec-doc-face)
++ (&quot;%\\(ghost\\|config\\)[ \t]+\\(.*\\)\n&quot; 2 rpm-spec-ghost-face)
++ (&quot;^%.+-[a-zA-Z][ \t]+\\([a-zA-Z0-9\.-]+\\)&quot; 1 rpm-spec-doc-face)
++ (&quot;^\\(.+\\)(\\([a-zA-Z]\\{2,2\\}\\)):&quot;
++ (1 rpm-spec-tag-face)
++ (2 rpm-spec-doc-face))
++ (&quot;^\\*\\(.*[0-9] \\)\\(.*\\)\\(&lt;.*&gt;\\)\\(.*\\)\n&quot;
++ (1 rpm-spec-dir-face)
++ (2 rpm-spec-package-face)
++ (3 rpm-spec-tag-face)
++ (4 font-lock-warning-face))
++ (&quot;%{[^{}]*}&quot; 0 rpm-spec-macro-face)
++ (&quot;$[a-zA-Z0-9_]+&quot; 0 rpm-spec-var-face)
++ (&quot;${[a-zA-Z0-9_]+}&quot; 0 rpm-spec-var-face)
++ )
++ &quot;Additional expressions to highlight in `rpm-spec-mode'.&quot;)
++
++;;Initialize font lock for xemacs
++(put 'rpm-spec-mode 'font-lock-defaults '(rpm-spec-font-lock-keywords))
++
++(defvar rpm-spec-mode-abbrev-table nil
++ &quot;Abbrev table in use in `rpm-spec-mode' buffers.&quot;)
++(define-abbrev-table 'rpm-spec-mode-abbrev-table ())
++
++;;------------------------------------------------------------
++
++;;;###autoload
++(defun rpm-spec-mode ()
++ &quot;Major mode for editing RPM spec files.
++This is much like C mode except for the syntax of comments. It uses
++the same keymap as C mode and has the same variables for customizing
++indentation. It has its own abbrev table and its own syntax table.
++
++Turning on RPM spec mode calls the value of the variable `rpm-spec-mode-hook'
++with no args, if that value is non-nil.&quot;
++ (interactive)
++ (kill-all-local-variables)
++ (condition-case nil
++ (require 'shindent)
++ (error
++ (require 'sh-script)))
++ (require 'cc-mode)
++ (use-local-map rpm-spec-mode-map)
++ (setq major-mode 'rpm-spec-mode)
++ (rpm-update-mode-name)
++ (setq local-abbrev-table rpm-spec-mode-abbrev-table)
++ (set-syntax-table rpm-spec-mode-syntax-table)
++
++ (require 'easymenu)
++ (easy-menu-define rpm-spec-call-menu rpm-spec-mode-map
++ &quot;Post menu for `rpm-spec-mode'.&quot; rpm-spec-mode-menu)
++ (easy-menu-add rpm-spec-mode-menu)
++
++ (if (= (buffer-size) 0)
++ (rpm-spec-initialize))
++
++ (if (executable-find &quot;rpmbuild&quot;)
++ (setq rpm-spec-build-command &quot;rpmbuild&quot;)
++ (setq rpm-spec-old-rpm t)
++ (setq rpm-spec-build-command &quot;rpm&quot;))
++
++ (make-local-variable 'paragraph-start)
++ (setq paragraph-start (concat &quot;$\\|&quot; page-delimiter))
++ (make-local-variable 'paragraph-separate)
++ (setq paragraph-separate paragraph-start)
++ (make-local-variable 'paragraph-ignore-fill-prefix)
++ (setq paragraph-ignore-fill-prefix t)
++; (make-local-variable 'indent-line-function)
++; (setq indent-line-function 'c-indent-line)
++ (make-local-variable 'require-final-newline)
++ (setq require-final-newline t)
++ (make-local-variable 'comment-start)
++ (setq comment-start &quot;# &quot;)
++ (make-local-variable 'comment-end)
++ (setq comment-end &quot;&quot;)
++ (make-local-variable 'comment-column)
++ (setq comment-column 32)
++ (make-local-variable 'comment-start-skip)
++ (setq comment-start-skip &quot;#+ *&quot;)
++; (make-local-variable 'comment-indent-function)
++; (setq comment-indent-function 'c-comment-indent)
++ ;;Initialize font lock for GNU emacs.
++ (make-local-variable 'font-lock-defaults)
++ (setq font-lock-defaults '(rpm-spec-font-lock-keywords nil t))
++ (run-hooks 'rpm-spec-mode-hook))
++
++(defun rpm-command-filter (process string)
++ &quot;Filter to process normal output.&quot;
++ (save-excursion
++ (set-buffer (process-buffer process))
++ (save-excursion
++ (goto-char (process-mark process))
++ (insert-before-markers string)
++ (set-marker (process-mark process) (point)))))
++
++; insert one space, or the number of tabs if rpm-spec-use-tabs is true
++(defun rpm-insert-space-or-tabs (tabs)
++ (if rpm-spec-use-tabs
++ (if (&gt; tabs 0)
++ (concat &quot;\t&quot; (rpm-insert-space-or-tabs (1- tabs)))
++ &quot;&quot;)
++ &quot; &quot;))
++
++;;------------------------------------------------------------
++
++(defun rpm-add-change-log-entry (&amp;optional change-log-entry)
++ &quot;Find change log and add an entry for today.&quot;
++ (interactive &quot;P&quot;)
++ (goto-char (point-min))
++ (if (search-forward-regexp &quot;^%changelog[ \t]*$&quot; nil t)
++ (let* ((address (or rpm-spec-user-mail-address user-mail-address))
++ (fullname (or rpm-spec-user-full-name user-full-name))
++ (string (concat &quot;* &quot; (substring (current-time-string) 0 11)
++ (substring (current-time-string) -4) &quot; &quot;