mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
Duplicate package checker, moves older packages out of the way
This commit is contained in:
parent
e4e3fd88ba
commit
bb12682da8
4 changed files with 19 additions and 215 deletions
|
@ -40,6 +40,7 @@ build() {
|
||||||
mv dockstar-2.6.35.4.config .config
|
mv dockstar-2.6.35.4.config .config
|
||||||
echo "Press ENTER 4972 times..."
|
echo "Press ENTER 4972 times..."
|
||||||
make oldconfig
|
make oldconfig
|
||||||
|
make menuconfig
|
||||||
|
|
||||||
# Make!
|
# Make!
|
||||||
make modules uImage || return 1
|
make modules uImage || return 1
|
||||||
|
|
18
scripts/dupechecker
Executable file
18
scripts/dupechecker
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
lastfile=""
|
||||||
|
if [[ ! $* ]]; then
|
||||||
|
echo "usage: $0 <directory>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ ! -e "$1/old/" ]]; then
|
||||||
|
mkdir "$1/old/"
|
||||||
|
fi
|
||||||
|
for file in $(ls -r $1); do
|
||||||
|
stripped=${file%%-[0-9].*}
|
||||||
|
if [[ "$stripped" == "$lastfile" ]]; then
|
||||||
|
echo "moved duplicate $1/$file"
|
||||||
|
mv "$1/$file" "$1/old/"
|
||||||
|
fi
|
||||||
|
lastfile=$stripped
|
||||||
|
done
|
|
@ -1,208 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# coding= UTF-8
|
|
||||||
#
|
|
||||||
# Created by Mika 'ighea' Hynnä <ighea[at]iki[dot]fi>
|
|
||||||
|
|
||||||
# Set the ABS and GIT directories here:
|
|
||||||
git_dir="/media/Plugbox/builder/plugapps/"
|
|
||||||
abs_dir="/media/Plugbox/builder/abs/"
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import distutils
|
|
||||||
from distutils import version
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
|
|
||||||
abs_updater_version="2010.04.28"
|
|
||||||
|
|
||||||
class UpdateCheck:
|
|
||||||
|
|
||||||
def __init__(self, git_dir="/media/Plugbox/builder/plugapps/",abs_dir="/media/Plugbox/builder/abs/"):
|
|
||||||
self.abs_dir=abs_dir
|
|
||||||
self.git_dir=git_dir
|
|
||||||
return
|
|
||||||
|
|
||||||
def is_greater(self, ver1, ver2):
|
|
||||||
# Checks if ver2 is greater than ver1
|
|
||||||
|
|
||||||
v1,r1 = ver1.split("-")
|
|
||||||
v2,r2 = ver2.split("-")
|
|
||||||
if (v1 == v2 and int(r1) < int(r2)):
|
|
||||||
return True
|
|
||||||
|
|
||||||
v1 = v1.split(".")
|
|
||||||
v2 = v2.split(".")
|
|
||||||
|
|
||||||
for i in range(0, len(v2)):
|
|
||||||
if (int(v1[i]) == int(v2[i])):
|
|
||||||
#print v1[i], "==", v2[i]
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if (int(v1[i]) < int(v2[i])):
|
|
||||||
#print v1[i], "<", v2[i]
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
#print v1[i], ">=", v2[i]
|
|
||||||
return False
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_local_database_items(self):
|
|
||||||
repopackages = []
|
|
||||||
# Fetch available packages
|
|
||||||
pipe = os.popen("pacman -Sl", "r")
|
|
||||||
for line in pipe:
|
|
||||||
data = line.replace(os.linesep,"")
|
|
||||||
repo, name, version = data.split(" ")
|
|
||||||
repopackages.append((repo,name,version))
|
|
||||||
pipe.close()
|
|
||||||
|
|
||||||
return repopackages
|
|
||||||
|
|
||||||
def pretify_pkgbuild_line(self, line):
|
|
||||||
charp=line.find('#')
|
|
||||||
if charp != -1:
|
|
||||||
line = line[:charp].strip()
|
|
||||||
line = line.replace(' ', '').replace(os.linesep,'')
|
|
||||||
return line
|
|
||||||
|
|
||||||
def get_version(self, pkgbuild, verbose=False):
|
|
||||||
# Returns the PKGBUILD's version string (pkgver-pkgrel)
|
|
||||||
version = "0"
|
|
||||||
|
|
||||||
p = subprocess.Popen("source "+pkgbuild+"; echo -n version:$pkgver-$pkgrel", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
|
|
||||||
datain, err = p.communicate()
|
|
||||||
if (len(datain) > 0):
|
|
||||||
vstart = datain.find("version:")
|
|
||||||
if (vstart != -1):
|
|
||||||
version = datain[vstart+len("version:"):]
|
|
||||||
|
|
||||||
if (verbose and err != None and len(err.strip()) > 0):
|
|
||||||
print "ERR:", err
|
|
||||||
return version
|
|
||||||
|
|
||||||
def check_package(self, repo, name, version,verbose=False):
|
|
||||||
|
|
||||||
pkgbuild_path = self.abs_dir+os.path.sep+repo+os.path.sep+name+os.path.sep+"PKGBUILD"
|
|
||||||
pkgbuild_git_path = self.git_dir+os.path.sep+repo+os.path.sep+name+os.path.sep+"PKGBUILD"
|
|
||||||
|
|
||||||
# First check git path
|
|
||||||
if os.path.exists(pkgbuild_git_path):
|
|
||||||
git_version = self.get_version(pkgbuild_path)
|
|
||||||
current = distutils.version.LooseVersion(version)
|
|
||||||
gitver = distutils.version.LooseVersion(git_version)
|
|
||||||
if (current < gitver):
|
|
||||||
return git_version
|
|
||||||
# If pkgbuild was not found or it was not newer than current pacman database item
|
|
||||||
# check the ABS database for item
|
|
||||||
if os.path.exists(pkgbuild_path):
|
|
||||||
abs_version = self.get_version(pkgbuild_path)
|
|
||||||
current = distutils.version.LooseVersion(version)
|
|
||||||
absver = distutils.version.LooseVersion(abs_version)
|
|
||||||
if (current < absver):
|
|
||||||
return abs_version
|
|
||||||
elif(verbose):
|
|
||||||
print "Couldn't find ABS entry for package: "+repo+"/"+name+""
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_updates(self, verbose=False):
|
|
||||||
# Returns array of tuples (repo, name, current_version, new_version)
|
|
||||||
updates=[]
|
|
||||||
newversion=""
|
|
||||||
# Go through all local database packages and check if there's a newer package in abs (abs_dir)
|
|
||||||
for repo, name, version in self.get_local_database_items():
|
|
||||||
newversion = self.check_package(repo, name, version, verbose)
|
|
||||||
if (newversion != None):
|
|
||||||
if (verbose):
|
|
||||||
print repo+"/"+name, "current:", version, "version in abs:", newversion
|
|
||||||
updates.append((repo,name,version,newversion))
|
|
||||||
return updates
|
|
||||||
|
|
||||||
def updates(self, verbose=False, outputfile=None, replaceoutputfile=False):
|
|
||||||
updates = self.get_updates(verbose)
|
|
||||||
if (len(updates) > 0):
|
|
||||||
print "Package\tCurrent\t-\tNew"
|
|
||||||
for repo, name, current, new in updates:
|
|
||||||
print repo+"/"+name+" "+current+" --> "+new
|
|
||||||
|
|
||||||
if (outputfile != None):
|
|
||||||
data = ""
|
|
||||||
olddata=""
|
|
||||||
|
|
||||||
if (replaceoutputfile == False):
|
|
||||||
if (os.path.exists(outputfile)):
|
|
||||||
try:
|
|
||||||
FILE = open(outputfile, "r")
|
|
||||||
olddata = FILE.read()
|
|
||||||
FILE.close()
|
|
||||||
except:
|
|
||||||
print "Error while opening outputfile: "+outputfile
|
|
||||||
|
|
||||||
data = "<p><table id=\"checker_table\">\n"
|
|
||||||
data += "<caption>Checked on "+time.ctime(time.time())+"</caption>\n"
|
|
||||||
data += "<tr>"
|
|
||||||
data += "<th class=\"checker_header\">Package</th>"
|
|
||||||
data += "<th class=\"checker_header\">Current</th>"
|
|
||||||
data += "<th class=\"checker_header\">Available</th>"
|
|
||||||
data += "</tr>\n"
|
|
||||||
for repo, name, current, new in updates:
|
|
||||||
data += "<tr>"
|
|
||||||
data += "<td class=\"checker_repository\">"+repo+"/"+name+"</td>"
|
|
||||||
data += "<td class=\"checker_current\">"+current+"</td>"
|
|
||||||
data += "<td class=\"checker_new\">"+new+"</td>"
|
|
||||||
data += "</tr>\n"
|
|
||||||
data += "</table></p>\n"
|
|
||||||
|
|
||||||
try:
|
|
||||||
FILE = open(outputfile, "w")
|
|
||||||
FILE.write(data)
|
|
||||||
FILE.write(olddata)
|
|
||||||
FILE.close()
|
|
||||||
except:
|
|
||||||
print "ERROR: Couldn't write to outputfile: "+outputfile
|
|
||||||
else:
|
|
||||||
print "Everything is up-to-date!"
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
verbose = False
|
|
||||||
outputfile = None
|
|
||||||
replaceoutputfile = False
|
|
||||||
if (len(sys.argv) <= 1):
|
|
||||||
print "ABSChecker v"+abs_updater_version
|
|
||||||
print ""
|
|
||||||
print "Checks packages in current pacman repository database against PKGBUILDs in local ABS database and returns list of out-of-date packages."
|
|
||||||
print ""
|
|
||||||
print " Usage: abschecker command [-v] [outputfile]"
|
|
||||||
print " commands:"
|
|
||||||
print " check\t\t check for updates"
|
|
||||||
print " flags:"
|
|
||||||
print " -v\t\t very verbose mode"
|
|
||||||
print " -r\t\t do not append to outputfile, replace instead"
|
|
||||||
print ""
|
|
||||||
print " If 'outputfile' is specified abschecker will dump a html output in it."
|
|
||||||
print ""
|
|
||||||
else:
|
|
||||||
if (sys.argv[1] == "check"):
|
|
||||||
counter=0
|
|
||||||
for arg in sys.argv:
|
|
||||||
counter+=1
|
|
||||||
if (arg.startswith("-")):
|
|
||||||
if (arg == "-v"):
|
|
||||||
verbose = True
|
|
||||||
print "Verbose mode ON"
|
|
||||||
elif (arg == "-r"):
|
|
||||||
replaceoutputfile = True
|
|
||||||
print "Output file set to be replaced if specified"
|
|
||||||
elif (counter > 2):
|
|
||||||
if (len(sys.argv) >= 3 and len(sys.argv[2]) > 0):
|
|
||||||
outputfile = arg
|
|
||||||
print "Output to: "+outputfile
|
|
||||||
|
|
||||||
uc = UpdateCheck(git_dir, abs_dir)
|
|
||||||
uc.updates(verbose, outputfile, replaceoutputfile)
|
|
||||||
else:
|
|
||||||
print "Invalid command!"
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
body {color:black;}
|
|
||||||
#checker_table {border:1px solid black}
|
|
||||||
.checker_header {border: 1px solid black;text:bold;text-align:left}
|
|
||||||
.checker_repository {border: 1px solid black;text:italic}
|
|
||||||
.checker_current {border: 1px solid black;color:black}
|
|
||||||
.checker_new {border: 1px solid
|
|
||||||
black;color:black;background-color:F5A9A9}
|
|
Loading…
Reference in a new issue