From d4d70a984badb5f3dde0a43ba8e7aa20b273a944 Mon Sep 17 00:00:00 2001
From: Florian Heck <florian.heck@hotmail.de>
Date: Mon, 17 Oct 2016 11:16:24 +0200
Subject: [PATCH] added getBranch to repo

---
 .../fim/seibt/gitwrapper/repo/Branch.java          |  2 +-
 .../fim/seibt/gitwrapper/repo/Repository.java      | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/de/uni_passau/fim/seibt/gitwrapper/repo/Branch.java b/src/de/uni_passau/fim/seibt/gitwrapper/repo/Branch.java
index 45a6134..32abd4f 100644
--- a/src/de/uni_passau/fim/seibt/gitwrapper/repo/Branch.java
+++ b/src/de/uni_passau/fim/seibt/gitwrapper/repo/Branch.java
@@ -7,7 +7,7 @@ import java.util.function.Function;
 
 public class Branch extends Reference {
 
-    public Branch(Repository repo, String name) {
+    Branch(Repository repo, String name) {
         super(repo, name);
     }
 
diff --git a/src/de/uni_passau/fim/seibt/gitwrapper/repo/Repository.java b/src/de/uni_passau/fim/seibt/gitwrapper/repo/Repository.java
index bfc74d2..61fb66b 100644
--- a/src/de/uni_passau/fim/seibt/gitwrapper/repo/Repository.java
+++ b/src/de/uni_passau/fim/seibt/gitwrapper/repo/Repository.java
@@ -49,6 +49,7 @@ public class Repository {
     private File dir;
 
     private Map<String, Commit> commits;
+    private Map<String, Branch> branches;
 
     /**
      * Constructs a new {@link Repository}.
@@ -73,6 +74,7 @@ public class Repository {
 
         this.commits = new HashMap<>();
         this.commits.put(DummyCommit.DUMMY_COMMIT_ID, new DummyCommit(this));
+        this.branches = new HashMap<>();
     }
 
     /**
@@ -228,6 +230,18 @@ public class Repository {
         return catFile.map(toBoolean).orElse(false);
     }
 
+    public Optional<Branch> getBranch(String name) {
+        if (branches.containsKey(name)) {
+            return Optional.of(branches.get(name));
+        }
+
+        if (!isBranch(name)) {
+            return Optional.empty();
+        }
+
+        return Optional.of(branches.computeIfAbsent(name, theName -> new Branch(this, theName)));
+    }
+
     /**
      * Determines whether the given name designates a branch.
      *
-- 
GitLab