From 04e2f97cd283fbfc5eb0acc6ec61e922c2d098d3 Mon Sep 17 00:00:00 2001
From: fhdk <fh@uex.dk>
Date: Fri, 31 Mar 2017 10:57:07 +0200
Subject: [PATCH] api implementation @udeved

---
 pacman_mirrors/configfn.py       | 26 ++++++++++++++++++
 pacman_mirrors/pacman_mirrors.py | 45 ++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)

diff --git a/pacman_mirrors/configfn.py b/pacman_mirrors/configfn.py
index b8ef5794..97c9460f 100644
--- a/pacman_mirrors/configfn.py
+++ b/pacman_mirrors/configfn.py
@@ -26,6 +26,32 @@ from . import txt
 from . import configuration as conf
 
 
+def api_branch(branch, filename):
+    """Write branch"""
+    branch = "Branch = {}".format(branch)
+
+    try:
+        with open(
+            filename) as cnf, tempfile.NamedTemporaryFile(
+            "w+t", dir=os.path.dirname(
+                filename), delete=False) as tmp:
+            replaced = False
+            for line in cnf:
+                if "Branch" in line:
+                    tmp.write(branch)
+                    replaced = True
+                else:
+                    tmp.write("{}".format(line))
+            if not replaced:
+                tmp.write(branch)
+        os.replace(tmp.name, filename)
+        os.chmod(filename, 0o644)
+    except OSError as err:
+        print(".: {} {}: {}: {}".format(txt.ERR_CLR, txt.CANNOT_READ_FILE,
+                                        err.filename, err.strerror))
+        exit(1)
+
+
 def build_config():
     """Get config informations
     :returns: config, custom
diff --git a/pacman_mirrors/pacman_mirrors.py b/pacman_mirrors/pacman_mirrors.py
index 3466932d..2aca27a1 100644
--- a/pacman_mirrors/pacman_mirrors.py
+++ b/pacman_mirrors/pacman_mirrors.py
@@ -130,6 +130,16 @@ class PacmanMirrors:
         parser.add_argument("--default",
                             action="store_true",
                             help=txt.HLP_ARG_DEFAULT)
+        # api arguments
+        parser.add_argument("-a/--api",
+                            action="store_true")
+        parser.add_argument("--get-branch",
+                            type=bool)
+        parser.add_argument("--set-branch",
+                            type=bool)
+        parser.add_argument("--prefix",
+                            type=str,
+                            action="store_true")
 
         args = parser.parse_args()
 
@@ -196,6 +206,41 @@ class PacmanMirrors:
             self.custom = False
             self.config["only_country"] = []
 
+        if args.api:
+            if args.branch:
+                self.api_config(prefix=args.prefix,
+                                set_branch=args.set_branch)
+            else:
+                self.api_config(get_branch=args.get_branch)
+
+    def api_config(self, prefix=None, set_branch=False, get_branch=False):
+        """Api functions
+        :param prefix: prefix to the config paths
+        :param set_branch: writes branch to pacman-mirrors
+        :param get_branch: exit with -1 -2 -3
+        """
+        if prefix:
+            if "$" in prefix:
+                prefix = os.environ.get(prefix)
+            self.config["config_file"] = prefix + self.config["config_file"]
+            self.config["custom_file"] = prefix + self.config["custom_file"]
+            self.config["fallback_file"] = prefix + self.config["fallback_file"]
+            self.config["mirror_dir"] = prefix + self.config["mirror_dir"]
+            self.config["mirror_file"] = prefix + self.config["mirror_file"]
+            self.config["mirror_list"] = prefix + self.config["mirror_list"]
+            self.config["status_file"] = prefix + self.config["status_file"]
+
+        if set_branch:
+            configfn.api_branch(self.config["branch"], self.config["config_file"])
+
+        if get_branch:
+            if self.config["branch"] == "stable":
+                exit(-1)
+            if self.config["branch"] == "testing":
+                exit(-2)
+            if self.config["branch"] == "unstable":
+                exit(-3)
+
     def build_common_mirror_list(self):
         """Generate common mirrorlist"""
         worklist = mirrorfn.filter_mirror_country(self.mirrors.mirrorlist,
-- 
GitLab