From 90fe0652cc545a4ae534c151765c8b4ebde8145a Mon Sep 17 00:00:00 2001 From: James Antill Date: Thu, 26 May 2022 01:13:27 -0400 Subject: [PATCH] Auto sync2gitlab import of copy-jdk-configs-4.0-2.el8.src.rpm --- .gitignore | 0 EMPTY | 1 - LICENSE | 14 ++ copy-jdk-configs.spec | 173 +++++++++++++++++ copy_jdk_configs.lua | 358 +++++++++++++++++++++++++++++++++++ copy_jdk_configs_fixFiles.sh | 246 ++++++++++++++++++++++++ sources | 0 7 files changed, 791 insertions(+), 1 deletion(-) create mode 100644 .gitignore delete mode 100644 EMPTY create mode 100644 LICENSE create mode 100644 copy-jdk-configs.spec create mode 100755 copy_jdk_configs.lua create mode 100755 copy_jdk_configs_fixFiles.sh create mode 100644 sources diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fa6a936 --- /dev/null +++ b/LICENSE @@ -0,0 +1,14 @@ +Copyright (c) 2015 Red Hat inc. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the Red Hat inc. The name of the Red Hat inc. may not be used +to endorse or promote products derived from this software without +specific prior written permission. THIS SOFTWARE IS PROVIDED +``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. diff --git a/copy-jdk-configs.spec b/copy-jdk-configs.spec new file mode 100644 index 0000000..bd4e36d --- /dev/null +++ b/copy-jdk-configs.spec @@ -0,0 +1,173 @@ +%global project copy_jdk_configs +%global file %{project}.lua +%global fixFile %{project}_fixFiles.sh +%global rpm_state_dir %{_localstatedir}/lib/rpm-state + +Name: copy-jdk-configs + +# hash relevant to version tag +%global htag 88d3ed89f30d8b0eb4877d860fa8d951f224f156 +Version: 4.0 +Release: 2%{?dist} +Summary: JDKs configuration files copier + +License: BSD +URL: https://pagure.io/%{project} +Source0: %{URL}/blob/%{htag}/f/%{file} +Source1: %{URL}/blob/%{htag}/f/LICENSE +Source2: %{URL}/blob/%{htag}/f/%{fixFile} + +# we need to duplicate msot of the percents in that script so they survive rpm expansion (even in that sed they have to be duplicated) +%global pretrans_install %(cat %{SOURCE0} | sed s/%%/%%%%/g | sed s/\\^%%%%/^%%/g) + +BuildArch: noarch + +Requires: lua +#Requires: lua-posix +# rh1965305 - copy-jdk-configs script uses find and xargs but RPM does not depend on them +Requires: findutils +OrderWithRequires: findutils + +%description +Utility script to transfer JDKs configuration files between updates or for +archiving. With script to fix incorrectly created rpmnew files + +%prep +cp -a %{SOURCE1} . + + +%build +#blob + +%pretrans -p +function createPretransScript() +-- the sript must be available during pretrans, so multiply it to tmp + os.execute("mkdir -p %{rpm_state_dir}") + temp_path="%{rpm_state_dir}/%{file}" +-- print("generating " .. temp_path) + file = io.open(temp_path, "w") + file:write([[%{pretrans_install}]]) + file:close() +end + +-- in netinst, the above call may fail. pcall should save instalation (as there is nothing to copy anyway) +-- https://bugzilla.redhat.com/show_bug.cgi?id=1295701 +-- todo, decide whether to check for {rpm_state_dir} and skip on not-existing, or keep creating +if pcall(createPretransScript) then +-- ok +else +-- print("Error running %{name} pretrans.") +end + +%install +mkdir -p $RPM_BUILD_ROOT/%{_libexecdir} +cp -a %{SOURCE0} $RPM_BUILD_ROOT/%{_libexecdir}/%{file} +chmod 644 $RPM_BUILD_ROOT/%{_libexecdir}/%{file} +cp -a %{SOURCE2} $RPM_BUILD_ROOT/%{_libexecdir}/%{fixFile} + +%posttrans +# remove file created in pretrans +# echo "removing %{rpm_state_dir}/%{file}" || : +rm "%{rpm_state_dir}/%{file}" 2> /dev/null || : + +%files +%{_libexecdir}/%{file} +%{_libexecdir}/%{fixFile} +%license LICENSE + +%changelog +* Tue Jun 08 2021 Jiri Vanek - 4.0-2 +- commented out requires lua-posix, it was always commented out in el8, never in fedora. IDK +- Resolves: rhbz#1953923 + +* Tue Jun 08 2021 Jiri Vanek - 4.0-1 +- rebased to 4.0 +- Resolves: rhbz#1953923 + +* Thu Jul 09 2020 Jiri Vanek - 3.7-3 +- added link to http://hydra.brq.redhat.com:8080/view/c~j~c/#projectstatus +- removed source check from test.yaml +- added gating.yaml +- Resolves: rhbz#1855374 + +* Thu Jul 09 2020 Jiri Vanek - 3.7-3 +- added gatnig placeholder +- Resolves: rhbz#1855374 + +* Thu Jul 09 2020 Jiri Vanek - 3.7-2 +- added nss.fips.cfg to cared files +- Resolves: rhbz#1855374 + +* Wed May 02 2018 Jiri Vanek - 3.7-1 +- udpated to latst relase +- configurable blacklist +- listed all java keystores + +* Wed May 02 2018 Jiri Vanek - 3.3-12 +- blackidrs put on single line + +* Wed May 02 2018 Jiri Vanek - 3.3-11 +- added more files to balcklist based on oralce and ibm jdks + +* Mon Apr 30 2018 Jiri Vanek - 3.3-10 +- added javaws.policy and blacklist +- fixed rhbz#1541838 + +* Tue Apr 03 2018 Jiri Vanek - 3.3-5 +- fixed rhbz#1541838 + +* Wed Feb 07 2018 Fedora Release Engineering - 3.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Oct 18 2017 Jiri Vanek - 3.3-2 +- added another subdirs for policies files + +* Wed Oct 18 2017 Jiri Vanek - 3.3-1 +- handled new paths for policies files + +* Thu Oct 05 2017 Jiri Vanek - 3.1-1 +- moved to newest release 3.1 whcih conf and lib/security as directories + +* Thu Oct 05 2017 Jiri Vanek - 3.0-1 +- moved to newest release 3.0 whcih support linked configs + +* Wed Jul 26 2017 Fedora Release Engineering - 2.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Feb 22 2017 Fedora Release Engineering - 2.2.3 +- updated to latest head + +* Wed Feb 22 2017 Fedora Release Engineering - 2.2.2 +- added "jre/lib/security/blacklisted.certs" to cared files + +* Fri Feb 10 2017 Fedora Release Engineering - 2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Feb 03 2017 Jiri Vanek - 2.1-1 +- moved to newest release 2.1 + +* Fri Jan 20 2017 Jiri Vanek - 2.0-1 +- moved to new upstream at pagure.io +- moved to newest release 2.0 +- added new script of copy_jdk_configs_fixFiles.sh +- copy_jdk_configs.lua aligned to it + +* Tue Aug 09 2016 Jiri Vanek - 1.2-1 +- updated to 1,3 which fixing nss minor issue + +* Tue Jul 12 2016 Jiri Vanek - 1.1-5 +- posttrans silenced, the error is appearing only in state, when there is nothing to copy + +* Wed Feb 03 2016 Fedora Release Engineering - 1.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jan 08 2016 Jiri Vanek - 1.1-3 +- pretrasn lua call now done in pcall (protected call) +- also posttrans now always return 0 + +* Wed Dec 16 2015 Jiri Vanek - 1.1-2 +- package now "installs" also during pretrans, so pretrasn scripts can use it +- pretrasn "install" is removed in postrans + +* Wed Nov 25 2015 Jiri Vanek - 1.1-1 +- initial package diff --git a/copy_jdk_configs.lua b/copy_jdk_configs.lua new file mode 100755 index 0000000..57b2592 --- /dev/null +++ b/copy_jdk_configs.lua @@ -0,0 +1,358 @@ +#!/usr/bin/lua +-- rpm call +-- debug=true lua -- copy_jdk_configs.lua --currentjvm "%{uniquesuffix %{nil}}" --jvmdir "%{_jvmdir %{nil}}" --origname "%{name}" --origjavaver "%{javaver}" --arch "%{_arch}" +--test call +-- debug=true lua -- copy_jdk_configs.lua --currentjvm "java-1.8.0-openjdk-1.8.0.65-3.b17.fc22.x86_64" --jvmdir "/usr/lib/jvm" --origname "java-1.8.0-openjdk" --origjavaver "1.8.0" --arch "x86_64" --jvmDestdir /home/jvanek/Desktop + +local M = {} + +if (os.getenv("debug") == "true") then + debug = true; +else + debug = false; +end + +local function debugOneLinePrint(string) + if (debug) then + print(string) + end ; +end + +function getPath(str, sep) + sep = sep or '/' + return str:match("(.*" .. sep .. ")") +end + +function splitToTable(source, pattern) + local i1 = string.gmatch(source, pattern) + local l1 = {} + for i in i1 do + table.insert(l1, i) + end + return l1 +end + +local function slurp(path) + local f = io.open(path) + local s = f:read("*a") + f:close() + return s +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +local function dirWithParents(path) + local s = "" + local dirs = splitToTable(path, "[^/]+") + for i, d in pairs(dirs) do + if (i == #dirs) then + break + end + s = s .. "/" .. d + local stat2 = posix.stat(s, "type"); + if (stat2 == nil) then + debugOneLinePrint(s .. " does not exists, creating") + if (not dry) then + posix.mkdir(s) + end + else + debugOneLinePrint(s .. " exists,not creating") + end + end +end + + +-- main function, +-- formelry main body +-- move to function resolved +-- https://bugzilla.redhat.com/show_bug.cgi?id=1892224 +-- for readability not indented, todo, indent once tuned + +function M.mainProgram(arg) + debugOneLinePrint("cjc: lua debug on") + local caredFiles = { "jre/lib/calendars.properties", + "jre/lib/content-types.properties", + "jre/lib/flavormap.properties", + "jre/lib/logging.properties", + "jre/lib/net.properties", + "jre/lib/psfontj2d.properties", + "jre/lib/sound.properties", + "jre/lib/deployment.properties", + "jre/lib/deployment.config", + "jre/lib/security/US_export_policy.jar", + "jre/lib/security/unlimited/US_export_policy.jar", + "jre/lib/security/limited/US_export_policy.jar", + "jre/lib/security/policy/unlimited/US_export_policy.jar", + "jre/lib/security/policy/limited/US_export_policy.jar", + "jre/lib/security/java.policy", + "jre/lib/security/java.security", + "jre/lib/security/local_policy.jar", + "jre/lib/security/unlimited/local_policy.jar", + "jre/lib/security/limited/local_policy.jar", + "jre/lib/security/policy/unlimited/local_policy.jar", + "jre/lib/security/policy/limited/local_policy.jar", + "jre/lib/security/nss.cfg", + "jre/lib/security/cacerts", + "jre/lib/security/blacklisted.certs", + "jre/lib/security/jssecacerts", + "jre/lib/security/trusted.certs", + "jre/lib/security/trusted.jssecerts", + "jre/lib/security/trusted.clientcerts", + "jre/lib/ext", + "jre/lib/security/blacklist", + "jre/lib/security/javaws.policy", + "jre/lib/security/nss.fips.cfg", + "lib/security", + "conf", + "lib/ext" } + + -- before import to allow run from spec + if (arg[1] == "--list") then + for i, file in pairs(caredFiles) do + print(file) + end + return 0; + end + + -- yum install lua-posix + local posix = require "posix" + + -- the one we are installing + local currentjvm = nil + local jvmdir = nil + local jvmDestdir = nil + local origname = nil + local origjavaver = nil + local arch = nil + local temp = nil; + local dry = false; + + for i = 1, #arg, 2 do + if (arg[i] == "--help" or arg[i] == "-h") then + print("all but jvmDestdir and debug are mandatory") + print(" --currentjvm") + print(" NVRA of currently installed java") + print(" --jvmdir") + print(" Directory where to find this kind of virtual machine. Generally /usr/lib/jvm") + print(" --origname") + print(" convinient switch to determine jdk. Generally java-1.X.0-vendor") + print(" --origjavaver") + print(" convinient switch to determine jdk's version. Generally 1.X.0") + print(" --arch") + print(" convinient switch to determine jdk's arch") + print(" --jvmDestdir") + print(" Migration/testing switch. Target Mostly same as jvmdir, but you may wont to copy ouside it.") + print(" --debug or $debug") + print(" Enables printing out whats going on. true/false. False by default") + print(" --temp") + print(" optional file to save intermediate result - directory configs were copied from") + print(" --dry") + print(" true/fase if true, then no changes will be written to disk except one tmp file. False by default") + print(" **** specil parasm ****") + print(" --list") + print(" if present on cmdline, list all cared files and exists") + os.exit(0) + end + if (arg[i] == "--currentjvm") then + currentjvm = arg[i + 1] + end + if (arg[i] == "--jvmdir") then + jvmdir = arg[i + 1] + end + if (arg[i] == "--origname") then + origname = arg[i + 1] + end + if (arg[i] == "--origjavaver") then + origjavaver = arg[i + 1] + end + if (arg[i] == "--arch") then + arch = arg[i + 1] + end + if (arg[i] == "--jvmDestdir") then + jvmDestdir = arg[i + 1] + end + if (arg[i] == "--debug") then + --no string, boolean, workaround + if (arg[i + 1] == "true") then + debug = true + end + end + if (arg[i] == "--dry") then + --no string, boolean, workaround + if (arg[i + 1] == "true") then + dry = true + end + end + if (arg[i] == "--temp") then + temp = arg[i + 1] + end + end + + if (jvmDestdir == nil) then + jvmDestdir = jvmdir + end + + if (debug) then + print("--currentjvm:"); + print(currentjvm); + print("--jvmdir:"); + print(jvmdir); + print("--jvmDestdir:"); + print(jvmDestdir); + print("--origname:"); + print(origname); + print("--origjavaver:"); + print(origjavaver); + print("--arch:"); + print(arch); + print("--debug:"); + print(debug); + end + + --trasnform substitute names to lua patterns + local name = string.gsub(string.gsub(origname, "%-", "%%-"), "%.", "%%.") + local javaver = string.gsub(origjavaver, "%.", "%%.") + + local jvms = { } + + debugOneLinePrint("started") + + foundJvms = posix.dir(jvmdir); + if (foundJvms == nil) then + debugOneLinePrint("no, or nothing in " .. jvmdir .. " exit") + return + end + + debugOneLinePrint("found " .. #foundJvms .. " jvms") + + for i, p in pairs(foundJvms) do + -- regex similar to %{_jvmdir}/%{name}-%{javaver}*%{_arch} bash command + if (string.find(p, name .. "%-" .. javaver .. ".*" .. arch) ~= nil) then + debugOneLinePrint("matched: " .. p) + if (currentjvm == p) then + debugOneLinePrint("this jdk is already installed. exiting lua script") + return + end ; + if (string.match(p, ".*-debug$")) then + print(p .. " matched but seems to be debug variant. Skipping") + else + table.insert(jvms, p) + end + else + debugOneLinePrint("NOT matched: " .. p) + end + end + + if (#jvms <= 0) then + debugOneLinePrint("no matching jdk in " .. jvmdir .. " exit") + return + end ; + + debugOneLinePrint("matched " .. #jvms .. " jdk in " .. jvmdir) + + --full names are like java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64 + table.sort(jvms, function(a, b) + -- version-sort + -- split on non word: . - + local l1 = splitToTable(a, "[^%.-]+") + local l2 = splitToTable(b, "[^%.-]+") + for x = 1, math.min(#l1, #l2) do + local l1x = tonumber(l1[x]) + local l2x = tonumber(l2[x]) + if (l1x ~= nil and l2x ~= nil) then + --if hunks are numbers, go with them + if (l1x < l2x) then + return true; + end + if (l1x > l2x) then + return false; + end + else + if (l1[x] < l2[x]) then + return true; + end + if (l1[x] > l2[x]) then + return false; + end + end + -- if hunks are equals then move to another pair of hunks + end + return a < b + + end) + + if (debug) then + print("sorted lsit of jvms") + for i, file in pairs(jvms) do + print(file) + end + end + + latestjvm = jvms[#jvms] + + if (temp ~= nil) then + src = jvmdir .. "/" .. latestjvm + debugOneLinePrint("temp declared as " .. temp .. " saving used dir of " .. src) + file = io.open(temp, "w") + file:write(src) + file:close() + end + + local readlinkOutput = os.tmpname() + + for i, file in pairs(caredFiles) do + local SOURCE = jvmdir .. "/" .. latestjvm .. "/" .. file + local DEST = jvmDestdir .. "/" .. currentjvm .. "/" .. file + debugOneLinePrint("going to copy " .. SOURCE) + debugOneLinePrint("to " .. DEST) + local stat1 = posix.stat(SOURCE, "type"); + if (stat1 ~= nil) then + debugOneLinePrint(SOURCE .. " exists") + dirWithParents(DEST) + -- Copy with -a to keep everything intact + local exe = "cp" .. " -ar " .. SOURCE .. " " .. DEST + local linkExe = "readlink" .. " -f " .. SOURCE .. " > " .. readlinkOutput + debugOneLinePrint("executing " .. linkExe) + os.remove(readlinkOutput) + os.execute(linkExe) + local link = trim(slurp(readlinkOutput)) + debugOneLinePrint(" ...link is " .. link) + if (not ((link) == (SOURCE))) then + debugOneLinePrint("WARNING link " .. link .. " where file " .. SOURCE .. " expected!") + debugOneLinePrint("Will try to copy link target rather then link itself!") + --replacing any NVRA by future NVRA (still execting to have NVRA for any multiple-installable targets + -- lua stubbornly consider dash as inteval. Replacing by dot to match X-Y more correct as X.Y rather then not at all + local linkDest = string.gsub(link, latestjvm:gsub("-", "."), currentjvm) + debugOneLinePrint("attempting to copy " .. link .. " to " .. linkDest) + if (link == linkDest) then + debugOneLinePrint("Those are identical files! Nothing to do!") + else + local exe2 = "cp" .. " -ar " .. link .. " " .. linkDest + dirWithParents(linkDest) + debugOneLinePrint("executing " .. exe2) + if (not dry) then + os.execute(exe2) + end + end + else + debugOneLinePrint("executing " .. exe) + if (not dry) then + os.execute(exe) + end + end + else + debugOneLinePrint(SOURCE .. " does not exists") + end + end + +end --unindented main function + +if (arg == nil) then + debugOneLinePrint("arg variable is nil, you have to call mainProgram manually") -- this can actually not be invoked, as the debug is set via arg +else + M.mainProgram(arg) +end + +return M diff --git a/copy_jdk_configs_fixFiles.sh b/copy_jdk_configs_fixFiles.sh new file mode 100755 index 0000000..7e87be8 --- /dev/null +++ b/copy_jdk_configs_fixFiles.sh @@ -0,0 +1,246 @@ +#!/bin/bash +config=$1 +target=$2 + +debug(){ + if [ "x$debug" == "xtrue" ] ; then + echo "$@" + fi +} + +debug "cjc: bash debug is on" + +cmdvDebug() { + if [ "x$debug" == "xtrue" ] ; then + "$@" -v + else + "$@" 1>/dev/null 2>&1 + fi +} + +mvDebug() { + cmdvDebug mv "$@" +} + +rmDebug() { + cmdvDebug rm "$@" +} + +rmdirDebug() { + cmdvDebug rmdir "$@" +} + +#we should be pretty strict about removing once used (even "used" [with fail]) config file, as it may corrupt another installation +clean(){ + debug "cleanup: removing $config" + rmDebug -rf $config +} + +if [ "x" == "x$config" ] ; then + debug "no config file specified" + exit 1 +fi + +if [ ! -f "$config" ] ; then + debug "$config file do not exists" + # expected case, when no migration happened + exit 0 +fi + +if [ "x" == "x$target" ] ; then + debug "no target dir specified" + clean + exit 2 +fi + +if [ ! -d "$target" ] ; then + debug "$target is not directory" + clean + exit 22 +fi + +source=`cat $config` + +if [ "x" == "x$source" ] ; then + debug "no information in $config" + clean + exit 3 +fi + +if [ ! -d "$source" ] ; then + debug "$source from $config is not directory" + clean + exit 33 +fi + + +listLinks(){ + find $1 -type l -print0 | xargs -0 ls -ld | sed "s; \+-> \+;_->_;g" | sed "s;.* $1;$1;" +} + +printIfExists(){ + if [ -e $ffileCandidate ] ; then + echo $1 + else + # stdout can be captured, therefore stderr + debug "skipping not-existing link-target-dir $1" 1>&2 + fi +} + +createListOfLinksTargetsDirectories(){ + pushd $source >/dev/null 2>&1 + local links=`listLinks $1` + for x in $links ; do + echo "$x" | grep "jre-abrt" > /dev/null + if [ $? -eq 0 ] ; then + continue + fi + local ffileCandidate=$(echo $x | sed "s/.*_->_//") ; +# ignoring relative paths as they may lead who know where later +# there can be simlink relative to position, so push is not catching all + if [ "$ffileCandidate" != "${ffileCandidate#/}" ] ; then + if [ -d $ffileCandidate ] ; then +# should we accept the links to directories themselves? + printIfExists $ffileCandidate + else + printIfExists `dirname $ffileCandidate` + fi + fi + done | sort | uniq + popd >/dev/null 2>&1 +} + +sourceLinks=`listLinks $source` +targetLinks=`listLinks $target` +sourceLinksDirsTarget=`createListOfLinksTargetsDirectories $source` +targetLinksDirsTarget=`createListOfLinksTargetsDirectories $target` + +debug "source: $source" +debug "target: $target" + +debug "sourceLinks: +$sourceLinks" +debug "targetLinks: +$targetLinks" + +debug "sourceLinksDirsTarget: +$sourceLinksDirsTarget" +debug "targetLinksDirsTarget: +$targetLinksDirsTarget" + +sourceSearchPath="$source $sourceLinksDirsTarget" +targetSearchPath="$target $targetLinksDirsTarget" + +work(){ + if [ "X$1" == "Xrpmnew" -o "X$1" == "Xrpmorig" ] ; then + debug "Working with $1 (1)" + else + debug "unknown parameter: $1" + return 1 + fi + + local files=`find $targetSearchPath | grep "\\.$1$"` + for file in $files ; do + local sf1=`echo $file | sed "s/\\.$1$//"` + local sf2=`echo $sf1 | sed "s/$targetName/$srcName/"` + # was file modified in origianl installation? + rpm -Vf $source | grep -q $sf2 + if [ $? -gt 0 ] ; then + if [ "X$1" == "Xrpmnew" ] ; then + debug "$sf2 was NOT modified, removing possibly corrupted $sf1 and renaming from $file" + mvDebug -f $file $sf1 + if [ $? -eq 0 ] ; then + echo "restored $file to $sf1" + else + debug "FAILED to restore $file to $sf1" + fi + fi + if [ "X$1" == "Xrpmorig" ] ; then + debug "$sf2 was NOT modified, removing possibly corrupted $file" + rmDebug $file + fi + else + debug "$sf2 was modified, keeping $file, and removing the duplicated original" + # information is now backuped, in new directory anyway. Removing future rpmsave to allow rpm -e + rmDebug -f $sf2 + # or its corresponding backup + rmDebug -f $sf2.$1 + fi +done +} + + +srcName=`basename $source` +targetName=`basename $target` + +work rpmnew +work rpmorig + +debug "Working with rpmorig (2)" +# simply moving old rpmsaves to new dir +# fix for config (replace) leftovers +files=`find $sourceSearchPath | grep "\\.rpmorig$"` + for file in $files ; do + rpmsaveTarget=`echo $file | sed "s/$srcName/$targetName/"` + debug "relocating $file to $rpmsaveTarget" + if [ -e $rpmsaveTarget ] ; then + rmDebug $file + else + mvDebug $file $rpmsaveTarget + fi + done + +debug "Working with rpmsave (1)" +files=`find $sourceSearchPath | grep "\\.rpmsave$"` + for file in $files ; do + rpmsaveTarget=`echo $file | sed "s/$srcName/$targetName/"` + debug "relocating $file to $rpmsaveTarget" + if [ -e $rpmsaveTarget ] ; then + rmDebug $file + else + mvDebug $file $rpmsaveTarget + fi + done + + +#warning: file /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64-debug/jre/lib/applet: remove failed: No such file or directory +#warning: file /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64-debug/jre/lib/amd64/client: remove failed: No such file or directory +#warning: file /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64/jre/lib/amd64/xawt: remove failed: No such file or directory +#those dirs might be mepty by installtion, filling to not be rmeoved later +#use exported CJC_BLACKDIRS_ADD to extend it in runtime/spec file +blackdirs="" +internal_blackdirs="jre/lib/applet jre/lib/*/client jre/lib/locale/*/LC_MESSAGES jre/lib/*/xawt jre/javaws properties/version properties jre/lib/endorsed jre/lib/boot lib/missioncontrol/p2/org.eclipse.equinox.p2.engine/profileRegistry/JMC.profile/.data" +for x in $internal_blackdirs $CJC_BLACKDIRS_ADD ; do + blackdirs="$blackdirs $source/$x" +done + +for blackdir in $blackdirs; do + if [ -e $blackdir ] ; then + debug "nasty $blackdir exists, filling" + touch $blackdir/C-J-C_placeholder + else + debug "nasty $blackdir DONT exists, ignoring" + fi +done + +debug "cleaning legacy leftowers" +if [ "x$debug" == "xtrue" ] ; then + find $sourceSearchPath -empty -type d -delete +else + find $sourceSearchPath -empty -type d -delete 2>/dev/null >/dev/null +fi +rmdirDebug $sourceSearchPath + +# and remove placeholders +for blackdir in $blackdirs; do + if [ -e $blackdir ] ; then + debug "nasty $blackdir exists, cleaning placeholder" + rmDebug $blackdir/C-J-C_placeholder + else + debug "nasty $blackdir DONT exists, ignoring again" + fi +done + +clean + +exit 0 diff --git a/sources b/sources new file mode 100644 index 0000000..e69de29