[SCM] UNNAMED PROJECT branch, jh-symbols, updated. 0.37-12-gb852c25

Niels Thykier nthykier at alioth.debian.org
Sat Jul 16 15:52:49 UTC 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "UNNAMED PROJECT".

The branch, jh-symbols has been updated
       via  b852c25eb2f2d985a071d844b7bba66d3134b812 (commit)
      from  13798bcffea6a8fd35018b7e4d17995615da261b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b852c25eb2f2d985a071d844b7bba66d3134b812
Author: Niels Thykier <niels at thykier.net>
Date:   Sat Jul 16 17:49:46 2011 +0200

    Use dpkg (where needed) to determine needed version

-----------------------------------------------------------------------

Summary of changes:
 src/org/debian/dpkg/internal/PollDpkg.java         |   11 ++++
 .../javahelper/symbols/cmd/DependencyProgram.java  |   52 ++++++++++++++++----
 2 files changed, 53 insertions(+), 10 deletions(-)

diff --git a/src/org/debian/dpkg/internal/PollDpkg.java b/src/org/debian/dpkg/internal/PollDpkg.java
index fbcb765..a286be7 100644
--- a/src/org/debian/dpkg/internal/PollDpkg.java
+++ b/src/org/debian/dpkg/internal/PollDpkg.java
@@ -47,6 +47,17 @@ final public class PollDpkg {
 		return res;
 	}
 
+	public static int compareVersion(String v1, String op, String v2) throws IOException, InterruptedException{
+		ProcessBuilder b = new ProcessBuilder(new String[]{
+				"dpkg",
+				"--compare-versions",
+				v1,
+				op,
+				v2
+		});
+		Process p = b.start();
+		return p.waitFor();
+	}
 
 
 	public static final void main(String ... args) throws Exception{
diff --git a/src/org/debian/javahelper/symbols/cmd/DependencyProgram.java b/src/org/debian/javahelper/symbols/cmd/DependencyProgram.java
index afd2a35..6ba44a1 100644
--- a/src/org/debian/javahelper/symbols/cmd/DependencyProgram.java
+++ b/src/org/debian/javahelper/symbols/cmd/DependencyProgram.java
@@ -3,6 +3,7 @@ package org.debian.javahelper.symbols.cmd;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.debian.dpkg.internal.PollDpkg;
 import org.debian.javahelper.symbols.Factory;
 import org.debian.javahelper.symbols.IClassSymbol;
 import org.debian.javahelper.symbols.ILibrarySymbolData;
@@ -10,6 +11,8 @@ import org.debian.javahelper.symbols.ISymbol;
 
 public class DependencyProgram implements IProgram {
 
+	private static boolean doutput = true;
+
 	public int exec(String[] args) throws IllegalProgramArgumentsException, Exception {
 		Factory fac = Factory.newInstance();
 		ILibrarySymbolData usagedata = fac.createSymbolData();
@@ -27,7 +30,7 @@ public class DependencyProgram implements IProgram {
 				Map<String, Boolean> syms = new HashMap<String, Boolean>();
 				neededCl.put(cs.getClassName(), syms);
 				for(ISymbol c : cs.getSymbols()){
-					System.out.println("N: needs-symbol " + c.getFullSymbolName());
+					debug("N: needs-symbol " + c.getFullSymbolName());
 					syms.put(c.getName(), Boolean.TRUE);
 				}
 			} else {
@@ -36,6 +39,7 @@ public class DependencyProgram implements IProgram {
 		}
 		for( ; i < args.length ; i++){
 			ILibrarySymbolData prov = fac.createSymbolData();
+			Map<String, Boolean> vMap = new HashMap<String, Boolean>(); // version result cache
 			String neededVer = null;
 			prov.read(args[i]);
 			for(ISymbol s : prov.getSymbols()){
@@ -49,20 +53,23 @@ public class DependencyProgram implements IProgram {
 					cs = s.asClassSymbol();
 					for(ISymbol c : cs.getSymbols()){
 						if(nm.remove(c.getName()) != null){
-							System.out.println("N: found-class-symbol: " + c.getFullSymbolName());
-							neededVer = highest(neededVer, s.getVersion());
+							debug("N: found-class-symbol: " + c.getFullSymbolName());
+							neededVer = highest(vMap, neededVer, c.getVersion());
+							if(nm.size() < 1) {
+								break;
+							}
 						}
 					}
 					if(nm.size() < 1) {
-						neededVer = highest(neededVer, cs.getVersion());
+						neededVer = highest(vMap, neededVer, cs.getVersion());
 						neededCl.remove(clname);
-						System.out.println("N: satisfied-class: " + clname);
+						debug("N: satisfied-class: " + clname);
 					}
 				} else {
 					String fn = s.getFullSymbolName();
 					if(neededSyms.remove(fn) != null){
-						System.out.println("N: found-symbol: " + fn);
-						neededVer = highest(neededVer, s.getVersion());
+						debug("N: found-symbol: " + fn);
+						neededVer = highest(vMap, neededVer, s.getVersion());
 					}
 				}
 			}
@@ -89,14 +96,39 @@ public class DependencyProgram implements IProgram {
 		return 0;
 	}
 
-	// FIXME XXX TODO - prototype
-	private static String highest(String v1, String v2){
+	/**
+	 * Returns the highest version
+	 * 
+	 * @param v Map to cache old (inferior) versions to avoid querying dpkg.
+	 *   If v2 appears in this map, is assumed to be inferior to v1.
+	 *   If dpkg is queried, the inferior version it put into v.
+	 * @param v1 The first version / the previously highest version
+	 * @param v2 The second version / the unknown version
+	 * @return v1 or v2
+	 * @throws Exception
+	 */
+	private static String highest(Map<String, Boolean> v, String v1, String v2) throws Exception {
 		if(v1 == null) {
 			return v2;
 		}
 		if(v1.equals(v2)) {
 			return v1;
 		}
-		return v1;
+		if(v.containsKey(v2)) {
+			return v1;
+		}
+		if(PollDpkg.compareVersion(v1, "ge", v2) == 0){
+			v.put(v2, Boolean.TRUE);
+			return v1;
+		} else {
+			v.put(v1, Boolean.TRUE);
+		}
+		return v2;
+	}
+
+	private static void debug(String msg){
+		if(doutput) {
+			System.out.println(msg);
+		}
 	}
 }


hooks/post-receive
-- 
UNNAMED PROJECT



More information about the pkg-java-commits mailing list