This is an automated email from the git hooks/post-receive script.

xhaakon-guest pushed a commit to branch master
in repository eclipse-pydev.

commit 92712851ae65e0cc8d986a4698816194378b7541
Author: Jakub Adam <[email protected]>
Date:   Mon Aug 11 17:19:34 2014 +0200

    Remove winp usage
---
 debian/copyright                       |  26 ++++
 debian/patches/remove-winp-usage.patch | 239 +++++++++++++++++++++++++++++++++
 debian/patches/series                  |   1 +
 3 files changed, 266 insertions(+)

diff --git a/debian/copyright b/debian/copyright
index 9a1fc75..d117e92 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -22,6 +22,11 @@ Files: debian/*
 Copyright: 2013-2014, Debian Java Maintainers 
<[email protected]>
 License: EPL-1.0
 
+Files: debian/patches/remove-winp-usage.patch
+Copyright: 2014, Fabio Zadrozny
+           2014, Debian Java Maintainers 
<[email protected]>
+License: MIT
+
 License: EPL-1.0
  Eclipse Public License - v 1.0
  .
@@ -238,3 +243,24 @@ License: EPL-1.0
  this Agreement will bring a legal action under this Agreement more than
  one year after the cause of action arose. Each party waives its rights to
  a jury trial in any resulting litigation.
+
+License: MIT
+ The MIT License (MIT)
+ .
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
diff --git a/debian/patches/remove-winp-usage.patch 
b/debian/patches/remove-winp-usage.patch
new file mode 100644
index 0000000..423150f
--- /dev/null
+++ b/debian/patches/remove-winp-usage.patch
@@ -0,0 +1,239 @@
+From: Jakub Adam <[email protected]>
+Date: Mon, 11 Aug 2014 17:13:22 +0200
+Subject: remove-winp-usage
+
+Source files needed to complete the implementation were taken from
+https://github.com/fabioz/winp.
+---
+ .../org/jvnet/process_factory/AbstractProcess.java |  28 ++++
+ .../src/org/jvnet/unixp/UnixProcess.java           | 162 +++++++++++++++++++++
+ .../debug/processfactory/PyProcessFactory.java     |   5 +-
+ 3 files changed, 192 insertions(+), 3 deletions(-)
+ create mode 100644 
plugins/org.python.pydev.debug/src/org/jvnet/process_factory/AbstractProcess.java
+ create mode 100644 
plugins/org.python.pydev.debug/src/org/jvnet/unixp/UnixProcess.java
+
+diff --git 
a/plugins/org.python.pydev.debug/src/org/jvnet/process_factory/AbstractProcess.java
 
b/plugins/org.python.pydev.debug/src/org/jvnet/process_factory/AbstractProcess.java
+new file mode 100644
+index 0000000..f490cfe
+--- /dev/null
++++ 
b/plugins/org.python.pydev.debug/src/org/jvnet/process_factory/AbstractProcess.java
+@@ -0,0 +1,28 @@
++package org.jvnet.process_factory;
++
++/**
++ * Base class for processes on all platforms.
++ * 
++ * @author Fabio Zadrozny
++ * @license MIT
++ */
++public abstract class AbstractProcess {
++
++      protected final int pid;
++
++      public AbstractProcess(int pid) {
++              this.pid = pid;
++      }
++
++      /**
++       * Gets the process ID.
++       */
++      public int getPid() {
++              return pid;
++      }
++
++      public abstract void killRecursively() throws Exception;
++
++      public abstract void kill() throws Exception;
++
++}
+diff --git 
a/plugins/org.python.pydev.debug/src/org/jvnet/unixp/UnixProcess.java 
b/plugins/org.python.pydev.debug/src/org/jvnet/unixp/UnixProcess.java
+new file mode 100644
+index 0000000..fbf53b8
+--- /dev/null
++++ b/plugins/org.python.pydev.debug/src/org/jvnet/unixp/UnixProcess.java
+@@ -0,0 +1,162 @@
++package org.jvnet.unixp;
++
++import java.io.BufferedInputStream;
++import java.io.IOException;
++import java.io.InputStreamReader;
++import java.lang.reflect.Field;
++import java.util.LinkedHashSet;
++import java.util.StringTokenizer;
++
++import org.jvnet.process_factory.AbstractProcess;
++
++/**
++ * Basic unix process which relies on kill and pgrep to kill a process tree.
++ * 
++ * @author Fabio Zadrozny
++ * @license MIT
++ */
++public class UnixProcess extends AbstractProcess {
++
++      public UnixProcess(int pid) {
++              super(pid);
++      }
++
++      public UnixProcess(Process p) throws Exception {
++              super(getPid(p));
++      }
++
++      private static int getPid(Process process) throws Exception {
++              if 
(process.getClass().getName().equals("java.lang.UNIXProcess")) {
++                      /* get the PID on unix/linux systems */
++                      try {
++                              Field f = 
process.getClass().getDeclaredField("pid");
++                              f.setAccessible(true);
++                              return f.getInt(process);
++                      } catch (Throwable e) {
++                              throw new RuntimeException(e);
++                      }
++              }
++              throw new RuntimeException("Unable to get PID. Process class: 
"+process.getClass());
++      }
++
++      @Override
++      public void killRecursively() throws IOException {
++              killRecursively(pid);
++      }
++
++      @Override
++      public void kill() throws IOException {
++              runAndGetOutput(new String[] { "kill", "-KILL",
++                              Integer.toString(pid) });
++      }
++
++      /**
++       * Adds to the final list all the pids of the process tree. It's 
ordered so
++       * that the parent is the first item and children are always after the
++       * parent.
++       * 
++       * @throws IOException
++       */
++      private static void killRecursively(int pid, LinkedHashSet<Integer> 
listed)
++                      throws IOException {
++              listed.add(pid);
++
++              // When listing, before getting the children, ask to stop 
forking
++              runAndGetOutput(new String[] { "kill", "-stop", 
Integer.toString(pid) });
++
++              // Now, get the children
++              Output outputPGrep = runAndGetOutput("pgrep", "-P",
++                              Integer.toString(pid));
++
++              if (outputPGrep.stderr != null && outputPGrep.stderr.length() > 
0) {
++                      throw new RuntimeException(outputPGrep.stderr);
++              }
++
++              // When the children are gotten actually go on and forcefully 
kill the
++              // parent
++              runAndGetOutput("kill", "-KILL", Integer.toString(pid));
++
++              String ids = outputPGrep.stdout;
++              StringTokenizer strTok = new StringTokenizer(ids);
++              while (strTok.hasMoreTokens()) {
++                      String nextToken = strTok.nextToken();
++                      int found = Integer.parseInt(nextToken);
++                      if (!listed.contains(found)) {
++                              killRecursively(found, listed);
++                      }
++              }
++      }
++
++      /**
++       * This is the public API to kill ids recursively. Note that it'll 
initially
++       * just do a Ctrl+C
++       * 
++       * @param pid
++       * @return
++       * @throws IOException
++       */
++      private static LinkedHashSet<Integer> killRecursively(int pid)
++                      throws IOException {
++              final LinkedHashSet<Integer> listed = new 
LinkedHashSet<Integer>();
++              killRecursively(pid, listed);
++              return listed;
++      }
++
++      private static Output runAndGetOutput(String... cmdarray)
++                      throws IOException {
++              Process createProcess = Runtime.getRuntime().exec(cmdarray, 
null, null);
++              return getProcessOutput(createProcess);
++      }
++
++      private static class Output {
++              public final String stdout;
++              public final String stderr;
++
++              public Output(String stdout, String stderr) {
++                      this.stdout = stdout;
++                      this.stderr = stderr;
++              }
++      }
++
++      public static Output getProcessOutput(Process process) throws 
IOException {
++              try {
++                      // i.e.: no writing to it anymore...
++                      process.getOutputStream().close();
++              } catch (IOException e2) {
++              }
++
++              InputStreamReader inputStream = new InputStreamReader(
++                              new 
BufferedInputStream(process.getInputStream()));
++              InputStreamReader errorStream = new InputStreamReader(
++                              new 
BufferedInputStream(process.getErrorStream()));
++
++              try {
++                      // Wait for it to finish
++                      process.waitFor();
++              } catch (InterruptedException e1) {
++              }
++
++              try {
++                      // Wait a bit for the output to be available (just in 
case).
++                      Object sync = new Object();
++                      synchronized (sync) {
++                              sync.wait(10);
++                      }
++              } catch (Exception e) {
++              }
++
++              return new Output(readInputStream(inputStream),
++                              readInputStream(errorStream));
++      }
++
++      private static String readInputStream(InputStreamReader in)
++                      throws IOException {
++              int c;
++              StringBuffer contents = new StringBuffer();
++              char[] buf = new char[80];
++              while ((c = in.read(buf)) != -1) {
++                      contents.append(buf, 0, c);
++              }
++              return contents.toString();
++      }
++}
+diff --git 
a/plugins/org.python.pydev.debug/src/org/python/pydev/debug/processfactory/PyProcessFactory.java
 
b/plugins/org.python.pydev.debug/src/org/python/pydev/debug/processfactory/PyProcessFactory.java
+index 4610781..5051cb7 100644
+--- 
a/plugins/org.python.pydev.debug/src/org/python/pydev/debug/processfactory/PyProcessFactory.java
++++ 
b/plugins/org.python.pydev.debug/src/org/python/pydev/debug/processfactory/PyProcessFactory.java
+@@ -8,8 +8,7 @@ import org.eclipse.debug.core.ILaunch;
+ import org.eclipse.debug.core.IProcessFactory;
+ import org.eclipse.debug.core.model.IProcess;
+ import org.eclipse.debug.core.model.RuntimeProcess;
+-import org.jvnet.process_factory.AbstractProcess;
+-import org.jvnet.process_factory.ProcessFactory;
++import org.jvnet.unixp.UnixProcess;
+ import org.python.pydev.core.log.Log;
+ import org.python.pydev.debug.ui.DebugPrefsPage;
+ 
+@@ -59,7 +58,7 @@ public class PyProcessFactory implements IProcessFactory {
+         public void destroy() {
+             if (DebugPrefsPage.getKillSubprocessesWhenTerminatingProcess()) {
+                 try {
+-                    AbstractProcess p = ProcessFactory.CreateProcess(process);
++                    UnixProcess p = new UnixProcess(process);
+                     //I.e.: this is the real change in this wrapper: when 
killing a process, we'll kill the children 
+                     //processes too, not only the main process (i.e.: so that 
we don't have zombie processes alive for 
+                     //Django, etc).
diff --git a/debian/patches/series b/debian/patches/series
index 6bf222f..a6d95f9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
 add-orbit-dependencies.patch
 remove-windows-specific-code.patch
 no-e4.patch
+remove-winp-usage.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/eclipse-pydev.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to