[arch-commits] Commit in eclipse/trunk (PKGBUILD commonify eclipse.install eclipse.sh)
Jan Steffens
heftig at archlinux.org
Fri Jun 30 14:11:44 UTC 2017
Date: Friday, June 30, 2017 @ 14:11:43
Author: heftig
Revision: 299434
4.7.0-1
Modified:
eclipse/trunk/PKGBUILD
eclipse/trunk/commonify
eclipse/trunk/eclipse.sh (properties)
Deleted:
eclipse/trunk/eclipse.install
-----------------+
PKGBUILD | 31 +++++-----
commonify | 153 ++++++++++++++++++++++++++++++++++++++++++------------
eclipse.install | 11 ---
eclipse.sh | 1
4 files changed, 136 insertions(+), 60 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2017-06-30 13:34:19 UTC (rev 299433)
+++ PKGBUILD 2017-06-30 14:11:43 UTC (rev 299434)
@@ -7,15 +7,15 @@
# Contributor: Marco Crosio <marco.crosio at gmail.com>
pkgbase=eclipse
-pkgname=(eclipse-{common,java,jee,cpp,php})
-pkgver=4.6.3
+pkgname=(eclipse-{common,java,jee,cpp,php,javascript})
+pkgver=4.7.0
pkgrel=1
-_release=neon-3
+_release=oxygen-R
pkgdesc="Highly extensible IDE"
license=(EPL)
arch=(i686 x86_64)
url="https://eclipse.org"
-makedepends=(ruby)
+makedepends=(python3)
options=(!emptydirs)
source=(commonify eclipse.sh eclipse.desktop)
source_i686=()
@@ -30,17 +30,19 @@
eval "package_$_pkg() { _package $_pkg; }"
done
-sha256sums=('9f8980078c97fb3020ba2e9c6c07eac077b932406aba3e2d6a4763a5d299290d'
+sha256sums=('a5a5cb8a8b86bd8bb98692c4553abd84592aac2438621d8273c43715a115e2ac'
'04e789fb695d5f95d09ddb994ae30397b39aee35f11997465dd91d129c41b2ed'
'57559c2548ae463089acb3c2825ebc002ed83067ddc953b23d36a7b5a02deaf3')
-sha256sums_i686=('07452c284696ed79f056296c9c47f5097c30dfe2e1784623e129c509619c1b9d'
- '40a12a9a8932ec27004bcace6b7d2d9755401b3875783d16bec6038fa85abe84'
- 'aeee272443a7327325a940479902c0cde7b050aa981cf44a016b770d55a35a2d'
- 'e414695a5e08507309a6bd61e69839523b37a74672b0f8d774fe8fae5896f30b')
-sha256sums_x86_64=('6e187bb230525f1b85a950a3c72afdca201d7957797ec81d620bdaae9e810250'
- '1c178265ae2a452698e358a4c0ebb4ae86f79edf49d0303d40bef6f539281c19'
- 'e203ff06381b0ba728b07181ebfa3b41bf18d5cae5857e5ffd462aece32df1fe'
- 'ba0cd36c4d69519e01feef5a391f9d59c8865713fe1a8462ad0bd77f04de09ec')
+sha256sums_i686=('89366eaf3f86dee46494848c86818625cd79a7a8aea53c0e292e13f715120023'
+ 'ed8da4b793ede3718eef9cc731a229e191aa0474e5bbcf3c9b4b89cf231a8b8f'
+ 'c4d2c349b07fac80b7d4deb1fe2e9a5580c7190ee4dd7869a131a129e7293640'
+ 'fcc18e1afc28690f44439ab30212101e37e6e07ae9369be3e4fb5be5c3fb4293'
+ 'a3d67801df5ccc279bb2026e4ba0bdfcff55f91a799279421658a6c4ffe02e92')
+sha256sums_x86_64=('f9bfa89f66886f34132623c5fc9f9202fe2bbf6c47d0e8c01cffe1302f3f4ca0'
+ '721fc94a6eab655a9372db95b2609e6ba8523526872ed4a612dcac8fbb0eb4f0'
+ 'c721d8b653f56b7de14f39928f682cdbf375d2a5fda9bf96bb3352035e50fd99'
+ '7851e183f77e20bd177956dc621ce1c90e64671d80d5173faf3dd883bfd032d1'
+ '6ffc11cece7324826199c444d070256143a17228d0ac652af58fe3dce41219cb')
prepare() {
mkdir eclipse-common
@@ -59,7 +61,7 @@
}
build() {
- ./commonify ${pkgname[@]}
+ ./commonify --identical ${pkgname[@]}
mkdir -p eclipse-common/dropins
touch eclipse-common/dropins/.keep
@@ -68,7 +70,6 @@
package_eclipse-common() {
pkgdesc+=" (common files)"
depends=("java-environment>=8" webkit2gtk unzip)
- install=eclipse.install
install -d "$pkgdir/usr/lib"
cp -a eclipse-common "$pkgdir/usr/lib/eclipse"
Modified: commonify
===================================================================
--- commonify 2017-06-30 13:34:19 UTC (rev 299433)
+++ commonify 2017-06-30 14:11:43 UTC (rev 299434)
@@ -1,41 +1,126 @@
-#!/usr/bin/env ruby
-require 'set'
-require 'fileutils'
+#!/usr/bin/env python3
+from argparse import ArgumentParser
+from asyncio.subprocess import DEVNULL
+from asyncio import get_event_loop, gather, BoundedSemaphore, create_subprocess_exec
+from enum import Enum, auto
+from logging import getLogger, basicConfig, INFO
+from os import cpu_count
+from pathlib import Path
+from sys import exit
-common = ARGV.shift
-targets = ARGV.dup
-first, *rest = targets
-files = targets.map do |dir|
- Dir.chdir dir
- g = Dir.glob("**/*").select { |file| test(?f, file) }
- Dir.chdir ".."
- puts "#{dir}: Found #{g.size} files"
- Set.new(g)
-end
+logger = getLogger(__name__)
-commonfiles = files.inject(:&)
-puts "#{commonfiles.size} common files"
-samefiles = 0
-commonfiles.each do |file|
- firstfile = File.join first, file
- targetfiles = rest.map { |target| File.join target, file }
+class Mode(Enum):
+ identical = auto()
+ nonconflicting = auto()
- is_same = targetfiles.all? do |targetfile|
- system "diff", "-q", firstfile, targetfile,
- in: "/dev/null", out: "/dev/null", err: [:child, :out]
- end
- if is_same
- commonfile = File.join common, file
- FileUtils.mkdir_p File.dirname(commonfile)
- FileUtils.mv firstfile, commonfile
- FileUtils.rm(targetfiles)
- samefiles += 1
- else
- puts "Divergent common file: #{file}"
- end
-end
+def parse_args(args=None):
+ parser = ArgumentParser(description="Extract common files.")
-puts "#{common}: #{samefiles} identical common files"
+ modes = parser.add_mutually_exclusive_group(required=True)
+ for m in Mode:
+ modes.add_argument(f"--{m.name}", dest="mode", action="store_const", const=m,
+ help=f"extract {m.name} common files")
+
+ parser.add_argument("common_dir", metavar="COMMON_DIR",
+ help="common files directory to move to")
+ parser.add_argument("targets", nargs="+", metavar="INPUT_DIR", help="directory to move from")
+
+ return parser.parse_args(args)
+
+
+diff_semaphore = BoundedSemaphore(value=cpu_count())
+
+
+class DiffError(RuntimeError):
+ def __init__(self, file1, file2):
+ self.file1 = file1
+ self.file2 = file2
+
+
+async def diff(file1, file2):
+ async with diff_semaphore:
+ p = await create_subprocess_exec("diff", "-q", str(file1), str(file2),
+ stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL)
+ try:
+ ret = await p.wait()
+ except:
+ try:
+ p.kill()
+ except:
+ pass
+
+ if ret != 0:
+ raise DiffError(file1, file2)
+
+
+async def identical(files):
+ if len(files) < 2:
+ return True
+ first, *rest = files
+ fut = gather(*[diff(first, f) for f in rest])
+ try:
+ await fut
+ except DiffError as e:
+ logger.info("Divergent files: %s <> %s", e.file1, e.file2)
+ return False
+ else:
+ return True
+ finally:
+ fut.cancel()
+
+def commonify_file(common_file, files):
+ common_file.parent.mkdir(parents=True, exist_ok=True)
+ first, *rest = files
+ first.rename(common_file)
+ for f in rest:
+ f.unlink()
+
+
+async def commonify_identical(common_file, files):
+ if await identical(files):
+ commonify_file(common_file, files)
+ return 1
+ return 0
+
+
+def arg_dir(s):
+ p = Path(s)
+ if not p.is_dir():
+ raise ValueError(f"{s!r} is not a directory")
+ return p
+
+
+async def main(settings):
+ ignore_len = settings.mode == Mode.nonconflicting
+ common_dir = arg_dir(settings.common_dir)
+ targets = [arg_dir(t) for t in settings.targets]
+
+ d = {}
+ for t in targets:
+ n = 0
+ for f in t.glob("**/*"):
+ if f.is_file():
+ d.setdefault(f.relative_to(t), []).append(f)
+ n += 1
+ logger.info("%s: Found %d files", t, n)
+
+ results = await gather(*[
+ commonify_identical(common_dir / f, tf)
+ for f, tf in d.items()
+ if ignore_len or len(tf) == len(targets)
+ ])
+
+ logger.info("%s: %d %s files",
+ common_dir, sum(results), settings.mode.name)
+ return 0
+
+
+if __name__ == "__main__":
+ basicConfig(level=INFO)
+ settings = parse_args()
+ loop = get_event_loop()
+ exit(loop.run_until_complete(main(settings)))
Deleted: eclipse.install
===================================================================
--- eclipse.install 2017-06-30 13:34:19 UTC (rev 299433)
+++ eclipse.install 2017-06-30 14:11:43 UTC (rev 299434)
@@ -1,11 +0,0 @@
-post_install() {
- gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor
-}
-
-post_upgrade() {
- post_install
-}
-
-post_remove() {
- post_install
-}
Index: eclipse/trunk/eclipse.sh
===================================================================
--- eclipse.sh 2017-06-30 13:34:19 UTC (rev 299433)
+++ eclipse.sh 2017-06-30 14:11:43 UTC (rev 299434)
Property changes on: eclipse/trunk/eclipse.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
More information about the arch-commits
mailing list