git.fiddlerwoaroof.com
Browse code

feat: make REF a generic function

Ed L authored on 15/11/2020 19:03:15
Showing 1 changed files
... ...
@@ -6,21 +6,22 @@
6 6
     ((or pathname string) (namestring
7 7
                            (truename repo)))))
8 8
 
9
-(defun ref (repo id)
10
-  "Given a REPOsitory and a ref ID return the ref-id object."
11
-  (let ((repo-root (root-of repo)))
12
-    (or (alexandria:when-let ((object-file (loose-object repo id)))
13
-          (make-instance 'loose-ref
14
-                         :repo repo-root
15
-                         :hash id
16
-                         :file object-file))
17
-        (multiple-value-bind (pack offset) (find-object-in-pack-files repo-root id)
18
-          (when pack
19
-            (make-instance 'packed-ref
20
-                           :hash id
9
+(defgeneric ref (repo id)
10
+  (:documentation "Given a REPOsitory and a ref ID return the ref-id object.")
11
+  (:method ((repo git-repository) (id string))
12
+    (let ((repo-root (root-of repo)))
13
+      (or (alexandria:when-let ((object-file (loose-object repo id)))
14
+            (make-instance 'loose-ref
21 15
                            :repo repo-root
22
-                           :offset offset
23
-                           :pack pack))))))
16
+                           :hash id
17
+                           :file object-file))
18
+          (multiple-value-bind (pack offset) (find-object-in-pack-files repo-root id)
19
+            (when pack
20
+              (make-instance 'packed-ref
21
+                             :hash id
22
+                             :repo repo-root
23
+                             :offset offset
24
+                             :pack pack)))))))
24 25
 
25 26
 (defun ensure-ref (thing &optional (repo *git-repository*))
26 27
   (typecase thing