[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Request for comment: status of Ubuntu's packages



[ David, beside the posting problem, are you subscribed to d-o-m? If
yes let us know, so that we can drop the explicit Cc. On Debian lists
the explicit Cc is opt-in ]

On Tue, Sep 30, 2008 at 07:38:51PM +0200, Stefano Zacchiroli wrote:
> Hello,

For a fault of mine in the forward, the patches where not attached,
they are now.

> I've tried to adapt the web page showing status of OCaml packages on
> Debian to Ubuntu. I've tried two approaches:
> 
>  1. A page with only Ubuntu packages. This is patch
>     ocaml-debian-status-ubuntu-only.patch attached.

This is reasonable, but has 0-synergy with Debian, as it keep
resources separate.

>  2. A page with mixed Debian and Ubuntu packages. This is patch
>     ocaml-debian-status-mixed.patch attached[1].

This is not reasonable and will break. The reason is that the code
generating that page is meant to prefer newer versions over older one
(if you want to see it that way, the reason is an implicit assumption
of a single underlying distribution, which was Debian).

In fact, this is exactly what you observe here:

> The mixed approach offers comparison between Debian and Ubuntu packages,
> but the policy "only the "best" version, i.e. the one nearest to a
> release, is reported" makes most of Intrepid packages masked by testing.

... so I don't like it.

> I'm wondering if it would not be better to represent quintuplets
> (source, ocaml_version, version, distro, sub_distro) in some ways. E.g.
>  (ara, v3.10.0, 1.0.22, hardy, backports)
>  (ara, v3.10.2, 1.0.25, debian, testing)

Are you talking about the underlying code or about the user interface?
I don't remember the details of that code, but it is very likely that
moving to a "multiple distribution" paradigm there is something that
can (and should) be generalized in the implementation. By all means go
for it.

> Any comment is welcomed.

First comment is about the user interface I would love to see, which
is basically a merge of (1) and (2). Basically I imagine 2 distinct
sets of columns, shown side by side (of course with rows aligned for
homonyms packages). This way one can look only at the set of Debian
packages (e.g., on the left), only at Ubuntu's (e.g, on the right),
and even compare the status for the very same package (e.g., reading
whole lines from left to right).  Bonus points can be gained offering
the ability to show/hide columns on the flight (no need to make
everything dynamic, that can be done via Javascript, with maybe some
cookie magic).  Of course this is just a desiderata, I haven't thought
about how hard is to achieve it starting from the current code base :)

Second comment is about available tools. At DebConf8 I discovered PET,
the tool used by the pkg-perl team (and many others now) to have an
overview of large set of packages. I don't think it is applicable to
our needs, as I don't think it support multiple distributions. But at
least I suggest investigating whether this is actually the case or
not.

Cheers.

-- 
Stefano Zacchiroli -*- PhD in Computer Science \ PostDoc @ Univ. Paris 7
zack@{upsilon.cc,pps.jussieu.fr,debian.org} -<>- http://upsilon.cc/zack/
I'm still an SGML person,this newfangled /\ All one has to do is hit the
XML stuff is so ... simplistic  -- Manoj \/ right keys at the right time
Index: debian-ocaml-status.py
===================================================================
--- debian-ocaml-status.py	(révision 5996)
+++ debian-ocaml-status.py	(copie de travail)
@@ -1,4 +1,5 @@
 #!/usr/bin/python
+# -*- coding: latin-1 -*-
 #
 # Copyright (C) 2007, Stefano Zacchiroli <zack@debian.org>
 #
@@ -94,9 +95,9 @@
     return status
 
 def ocaml_status(files, log):
-    sources = filter(lambda fname: re.search(r'-Sources\b', fname), files)
-    packages = filter(lambda fname: re.search(r'-Packages\b', fname), files)
-    distro_of_fname = lambda fname: os.path.basename(fname).split('-')[0]
+    sources = filter(lambda fname: re.search(r'\.Sources\b', fname), files)
+    packages = filter(lambda fname: re.search(r'\.Packages\b', fname), files)
+    distro_of_fname = lambda fname: os.path.basename(fname).split('.')[0].split('-')[0]
 
     def add_status_entry(status, pkg_entry):
         ocaml_versions, pkg_status = status
Index: ocaml-status.css
===================================================================
--- ocaml-status.css	(révision 5996)
+++ ocaml-status.css	(copie de travail)
@@ -47,6 +47,18 @@
 .inIncoming:after {
   content: " [i]";
 }
+.inHardy {
+  background: #ff6;
+}
+.inHardy:after {
+  content: " [h]";
+}
+.inIntrepid {
+  background: #ff3;
+}
+.inIntrepid:after {
+  content: " [int]";
+}
 .version {
 }
 div.status th span.version:before {
Index: retrieve-data.sh
===================================================================
--- retrieve-data.sh	(révision 5996)
+++ retrieve-data.sh	(copie de travail)
@@ -9,11 +9,28 @@
 cd data/
 for distro in $distributions ; do
   for comp in $components ; do
-    fname="$distro-$comp-Sources.bz2"
+    fname="$distro.$comp.Sources.bz2"
     curl -s -o $fname -z $fname $base/$distro/$comp/source/Sources.bz2
     for arch in $architectures ; do
-      fname="$distro-$comp-binary-$arch-Packages.bz2"
+      fname="$distro.$comp.binary-$arch.Packages.bz2"
       curl -s -o $fname -z $fname $base/$distro/$comp/binary-$arch/Packages.bz2
     done
   done
 done
+
+mirror="http://ftp.ubuntu.com/ubuntu";
+distributions="hardy hardy-backports hardy-proposed hardy-security hardy-updates intrepid"
+components="main universe multiverse restricted"
+architectures="i386 amd64"
+
+base="$mirror/dists"
+for distro in $distributions ; do
+  for comp in $components ; do
+    fname="$distro.$comp.Sources.bz2"
+    curl -s -o $fname -z $fname $base/$distro/$comp/source/Sources.bz2
+    for arch in $architectures ; do
+      fname="$distro.$comp.binary-$arch.Packages.bz2"
+      curl -s -o $fname -z $fname $base/$distro/$comp/binary-$arch/Packages.bz2
+    done
+  done
+done
Index: debian-ocaml-status.genshi
===================================================================
--- debian-ocaml-status.genshi	(révision 5996)
+++ debian-ocaml-status.genshi	(copie de travail)
@@ -7,11 +7,11 @@
     xml:lang="en" >
   <head>
     <link type="text/css" rel="stylesheet" href="ocaml-status.css" />
-    <title>OCaml Packages Status in Debian</title>
+    <title>OCaml Packages Status in Debian and Ubuntu</title>
   </head>
   <body>
 
-    <h1>Status of OCaml in Debian</h1>
+    <h1>Status of OCaml in Debian and Ubuntu</h1>
 
     <div id="navbar">
       <ul>
@@ -30,7 +30,9 @@
         <span class="inTesting">in testing</span>,
         <span class="inUnstable">in unstable</span>,
         <span class="inExperimental">in experimental</span>,
-	<span class="inIncoming">in incoming</span>.
+	<span class="inIncoming">in incoming</span>,
+	<span class="inHardy">in hardy</span>,
+	<span class="inIntrepid">in intrepid</span>.
       </p>
       <p>
 	<small> <strong>Note:</strong> the tables below look at packages along
@@ -81,6 +83,12 @@
 	      <td py:when="versions.has_key('incoming')" class="inIncoming">
 		<span py:content="versions['incoming']">x.y.z (incoming)</span>
 	      </td>
+	      <td py:when="versions.has_key('hardy')" class="inHardy">
+		<span py:content="versions['hardy']">x.y.z (hardy)</span>
+	      </td>
+	      <td py:when="versions.has_key('intrepid')" class="inIntrepid">
+		<span py:content="versions['intrepid']">x.y.z (intrepid)</span>
+	      </td>
 	      <td py:otherwise="" class="error">(?)</td>
 	    </py:for>
           </tr>
@@ -131,6 +139,12 @@
 	      <td py:when="versions.has_key('incoming')" class="inIncoming">
 		<span py:content="versions['incoming']">x.y.z (incoming)</span>
 	      </td>
+	      <td py:when="versions.has_key('hardy')" class="inHardy">
+		<span py:content="versions['hardy']">x.y.z (hardy)</span>
+	      </td>
+	      <td py:when="versions.has_key('intrepid')" class="inIntrepid">
+		<span py:content="versions['intrepid']">x.y.z (intrepid)</span>
+	      </td>
 	      <td py:otherwise="" class="error">(?)</td>
 	    </py:for>
           </tr>
Index: debian-ocaml-status.py
===================================================================
--- debian-ocaml-status.py	(révision 5996)
+++ debian-ocaml-status.py	(copie de travail)
@@ -1,4 +1,5 @@
 #!/usr/bin/python
+# -*- coding: latin-1 -*-
 #
 # Copyright (C) 2007, Stefano Zacchiroli <zack@debian.org>
 #
Index: ocaml-status.css
===================================================================
--- ocaml-status.css	(révision 5996)
+++ ocaml-status.css	(copie de travail)
@@ -23,28 +23,16 @@
   font-size: 60%;
 }
 
-.inTesting {
-  background: #89f;
+.inHardy {
+  background: #ff6;
 }
-.inTesting:after {
-  content: " [t]";
+.inHardy:after {
+  content: " [h]";
 }
-.inUnstable {
-  background: #2f2;
+.inIntrepid {
+  background: #fc6;
 }
-.inUnstable:after {
-  content: " [u]";
-}
-.inExperimental {
-  background: #8f8;
-}
-.inExperimental:after {
-  content: " [e]";
-}
-.inIncoming {
-  background: #cfc;
-}
-.inIncoming:after {
+.inIntrepid:after {
   content: " [i]";
 }
 .version {
Index: retrieve-data.sh
===================================================================
--- retrieve-data.sh	(révision 5996)
+++ retrieve-data.sh	(copie de travail)
@@ -1,8 +1,8 @@
 #!/bin/sh
-mirror="http://ftp.debian.org/debian";
-distributions="testing unstable experimental"
-components="main contrib non-free"
-architectures="i386 amd64 powerpc"
+mirror="http://ftp.ubuntu.com/ubuntu";
+distributions="hardy hardy-backports hardy-proposed hardy-security hardy-updates intrepid intrepid-backports intrepid-proposed intrepid-security intrepid-updates"
+components="main universe multiverse restricted"
+architectures="i386 amd64"
 
 base="$mirror/dists"
 test -d data/ || mkdir data/
Index: debian-ocaml-status.genshi
===================================================================
--- debian-ocaml-status.genshi	(révision 5996)
+++ debian-ocaml-status.genshi	(copie de travail)
@@ -7,11 +7,11 @@
     xml:lang="en" >
   <head>
     <link type="text/css" rel="stylesheet" href="ocaml-status.css" />
-    <title>OCaml Packages Status in Debian</title>
+    <title>OCaml Packages Status in Ubuntu</title>
   </head>
   <body>
 
-    <h1>Status of OCaml in Debian</h1>
+    <h1>Status of OCaml in Ubuntu</h1>
 
     <div id="navbar">
       <ul>
@@ -27,10 +27,8 @@
     <div class="legend">
       <p>
         Legend: 
-        <span class="inTesting">in testing</span>,
-        <span class="inUnstable">in unstable</span>,
-        <span class="inExperimental">in experimental</span>,
-	<span class="inIncoming">in incoming</span>.
+        <span class="inHardy">in hardy</span>,
+        <span class="inIntrepid">in intrepid</span>.
       </p>
       <p>
 	<small> <strong>Note:</strong> the tables below look at packages along
@@ -61,26 +59,18 @@
 	  <tr py:for="(src, ocaml_versions) in packages['bin']"
 	      py:choose="">
 	    <td>
-	      <a href="http://packages.qa.debian.org/${src}";><span
+	      <a href="https://launchpad.net/ubuntu/+source/${src}";><span
 		  class="package" py:content="src">pkg</span></a> <br />
-	      <small>[<a href="http://buildd.debian.org/pkg.cgi?pkg=${src}";>buildd</a>]</small>
+<!-- FIXME	      <small>[<a href="http://buildd.debian.org/pkg.cgi?pkg=${src}";>buildd</a>]</small> -->
 	    </td>
 	    <py:for each="versions in ocaml_versions" py:choose="">
 	      <td py:when="versions is None" class="none"></td>
-	      <td py:when="versions.has_key('testing')" class="inTesting">
-		<span py:content="versions['testing']">x.y.z (testing)</span>
+	      <td py:when="versions.has_key('hardy')" class="inHardy">
+		<span py:content="versions['hardy']">x.y.z (hardy)</span>
 	      </td>
-	      <td py:when="versions.has_key('unstable')" class="inUnstable">
-		<span py:content="versions['unstable']">x.y.z (unstable)</span>
-		<br />
-		<small>[<a href="http://release.debian.org/migration/testing.pl?package=${src}";>excuses</a>]</small>
+	      <td py:when="versions.has_key('intrepid')" class="inIntrepid">
+		<span py:content="versions['intrepid']">x.y.z (intrepid)</span>
 	      </td>
-	      <td py:when="versions.has_key('experimental')" class="inExperimental">
-		<span py:content="versions['experimental']">x.y.z (experimental)</span>
-	      </td>
-	      <td py:when="versions.has_key('incoming')" class="inIncoming">
-		<span py:content="versions['incoming']">x.y.z (incoming)</span>
-	      </td>
 	      <td py:otherwise="" class="error">(?)</td>
 	    </py:for>
           </tr>
@@ -111,26 +101,18 @@
 	  <tr py:for="(src, ocaml_versions) in packages['src']"
 	      py:choose="">
 	    <td>
-	      <a href="http://packages.qa.debian.org/${src}";><span
+	      <a href="https://launchpad.net/ubuntu/+source/${src}";><span
 		  class="package" py:content="src">pkg</span></a> <br />
-	      <small>[<a href="http://buildd.debian.org/pkg.cgi?pkg=${src}";>buildd</a>]</small>
+<!-- FIXME	      <small>[<a href="http://buildd.debian.org/pkg.cgi?pkg=${src}";>buildd</a>]</small> -->
 	    </td>
 	    <py:for each="versions in ocaml_versions" py:choose="">
 	      <td py:when="versions is None" class="none"></td>
-	      <td py:when="versions.has_key('testing')" class="inTesting">
-		<span py:content="versions['testing']">x.y.z (testing)</span>
+	      <td py:when="versions.has_key('hardy')" class="inHardy">
+		<span py:content="versions['hardy']">x.y.z (hardy)</span>
 	      </td>
-	      <td py:when="versions.has_key('unstable')" class="inUnstable">
-		<span py:content="versions['unstable']">x.y.z (unstable)</span>
-		<br />
-		<small>[<a href="http://release.debian.org/migration/testing.pl?package=${src}";>excuses</a>]</small>
+	      <td py:when="versions.has_key('intrepid')" class="inIntrepid">
+		<span py:content="versions['intrepid']">x.y.z (intrepid)</span>
 	      </td>
-	      <td py:when="versions.has_key('experimental')" class="inExperimental">
-		<span py:content="versions['experimental']">x.y.z (experimental)</span>
-	      </td>
-	      <td py:when="versions.has_key('incoming')" class="inIncoming">
-		<span py:content="versions['incoming']">x.y.z (incoming)</span>
-	      </td>
 	      <td py:otherwise="" class="error">(?)</td>
 	    </py:for>
           </tr>

Attachment: signature.asc
Description: Digital signature


Reply to: