summaryrefslogtreecommitdiff
path: root/filter.py
diff options
context:
space:
mode:
Diffstat (limited to 'filter.py')
-rw-r--r--filter.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/filter.py b/filter.py
new file mode 100644
index 0000000..5229e63
--- /dev/null
+++ b/filter.py
@@ -0,0 +1,90 @@
+#! /usr/bin/python
+#-*- encoding: utf-8 -*-
+import commands
+import os
+import re
+from repm.config import *
+from repm.pato2 import *
+
+rsync_list_command="rsync -av --no-motd --list-only "
+
+def generate_rsync_command(base_command, dir_list, destdir=repodir, mirror_name=mirror,
+ mirror_path=mirrorpath, blacklist_file=False):
+ """ Generates an rsync command for executing it by combining all parameters.
+
+ Parameters:
+ ----------
+ base_command -> str
+ mirror_name -> str
+ mirror_path -> str
+ dir_list -> list or tuple
+ destdir -> str Must be a dir
+ blacklist_file -> False or str File must exist
+
+ Return:
+ ----------
+ rsync_command -> str """
+ from os.path import isfile, isdir
+
+ if blacklist_file and not isfile(blacklist_file):
+ print(blacklist_file + " is not a file")
+ raise NonValidFile
+
+ if not os.path.isdir(destdir):
+ print(destdir + " is not a directory")
+ raise NonValidDir
+
+ dir_list="{" + ",".join(dir_list) + "}"
+
+ if blacklist_file:
+ return " ".join((base_command, "--exclude-from-file="+blacklist_file,
+ mirror_name + mirror_path + dir_list, destdir))
+ return " ".join((base_command, mirror_name + mirror_path + dir_list, destdir))
+
+def run_rsync(base_for_rsync=rsync_list_command, dir_list_for_rsync=(repo_list + dir_list),
+ debug=verbose):
+ """ Runs rsync and gets returns it's output """
+ cmd = str(generate_rsync_command(rsync_list_command, (repo_list + dir_list)))
+ if debug:
+ printf("rsync_command" + cmd)
+ return commands.getoutput(cmd)
+
+def get_file_list_from_rsync_output(rsync_output):
+ """ Generates a list of packages and versions from an rsync output using --list-only --no-motd.
+
+ Parameters:
+ ----------
+ rsync_output -> str containing output from rsync
+
+ Returns:
+ ----------
+ package_list -> tuple of Package objects. """
+ a=list()
+
+ def directory(line):
+ pass
+
+ def package_or_link(line):
+ """ Take info out of filename """
+ location_field = 4
+ pkg = Package()
+ pkg["location"] = line.rsplit()[location_field]
+ fileattrs = pkg["location"].split("/")[-1].split("-")
+ pkg["arch"] = fileattrs.pop(-1).split(".")[0]
+ pkg["release"] = fileattrs.pop(-1)
+ pkg["version"] = fileattrs.pop(-1)
+ pkg["name"] = "-".join(fileattrs)
+ return pkg
+
+ options = { "d": directory,
+ "l": package_or_link,
+ "-": package_or_link}
+
+ for line in rsync_output.split("\n"):
+ if ".pkg.tar.gz" or ".pkg.tar.xz" in line:
+ pkginfo=options[line[0]](line)
+ if pkginfo:
+ a.append(pkginfo)
+
+ return tuple(a)
+