Function: forge-add-repository

forge-add-repository is an interactive and natively compiled function defined in forge-commands.el.

Signature

(forge-add-repository &optional ARG1 ARG2 ARG3)

Documentation

Add a repository to the database.

Key Bindings

This command is not in any keymaps.

Source Code

;; Defined in /nix/store/923zwib42c4qw6x4xps0cv1wi8qcd6lp-emacs-packages-deps/share/emacs/site-lisp/elpa/forge-20261005.753/forge-commands.el
;;; Add repositories

;;;###autoload(autoload 'forge-add-repository "forge-commands" nil t)
(transient-define-prefix forge-add-repository (&optional repo limit callback)
  "Add a repository to the database."
  [:class transient-subgroups

   ;; Already tracked.
   [:if (##forge--scope :tracked)
    (:info*
     (lambda ()
       (format
        (propertize "%s is already being tracked" 'face 'transient-heading)
        (propertize (forge--scope 'url) 'face 'bold)))
     :format "%d")]

   ;; Nothing to track.
   [:if-not (##forge--scope 'topdir)
    (:info*
     (lambda ()
       (format
        (propertize "%s is not inside a Git repository" 'face 'transient-heading)
        (propertize default-directory 'face 'bold)))
     :format "%d")]

   ;; Cannot track.
   [:if (##and (not (forge--scope 'repo)) (forge--scope 'topdir))
    :description
    (lambda ()
      (concat
       (format (propertize "Cannot determine forge host for %s\n"
                           'face 'transient-heading)
               (propertize (forge--scope 'topdir) 'face 'bold))
       (if-let* ((remote (forge--get-remote))
                 (url (magit-git-string "remote" "get-url" remote)))
           (format (propertize "because %s is not on a host known to Forge."
                               'face 'transient-heading)
                   (propertize url 'face 'bold))
         (propertize "because no suitable remote was detected."
                     'face 'transient-heading))))
    ("r" forge-forge.remote :format " %k Try another %d %v" :face 'bold)
    ("h" "Learn how to configure another Github host"
     (lambda () (interactive) (info "(forge)Setup for Another Github Instance")))
    ("l" "Learn how to configure another Gitlab host"
     (lambda () (interactive) (info "(forge)Setup for Another Gitlab Instance")))
    ("p" "Learn how to configure partially supported host"
     (lambda () (interactive) (info "(forge)Setup a Partially Supported Host")))]

   ;; Track it!
   [:if (##forge--scope :valid)
    :description
    (lambda ()
      (if-let ((moved (forge--scope :moved)))
          (format
           (propertize "Repository renamed\nfrom %s\n  to %s\nUpdate %s and %s"
                      'face 'transient-heading)
           (propertize moved               'face 'magit-diff-removed)
           (propertize (forge--scope 'url) 'face 'magit-diff-added)
           (propertize (format "remote.%s.url" (oref (forge--scope 'repo) remote))
                       'face 'bold)
           "add to database,")
        (format (propertize "Add %s to database," 'face 'transient-heading)
                (propertize (forge--scope 'url) 'face 'bold))))
    ("r" forge-forge.remote :format " %k from %d %v," :face 'bold)
    ("a" "pulling all topics"
     (lambda (repo)
       (interactive (list (forge--scope 'repo)))
       (forge-add-repository repo)))
    ("s" "pulling only topics since <date>"
     (lambda (repo date)
       (interactive
         (list (forge--scope 'repo)
               (forge-read-date "Limit pulling to topics updated since: ")))
       (forge-add-repository repo date)))
    ("i" "to allow pulling of individual topics"
     (lambda (repo)
       (interactive (list (forge--scope 'repo)))
       (forge-add-repository repo :selective)))]

   ;; Pivot.
   [("o" "Add another repository" forge-add-some-repository)
    (7 "U" "Add all source repositories belonging to a user"
       forge-add-user-repositories)
    (7 "O" "Add all source repositories belonging to an organization"
       forge-add-organization-repositories)]]
  (declare (interactive-only nil))
  (interactive)
  (cond
    ((not repo)
     (transient-setup 'forge-add-repository nil nil
                      :scope (forge-add-repository--scope)))
    ((stringp repo)
     (transient-setup 'forge-add-repository nil nil
                      :scope (forge-add-repository--scope repo)))
    (t
     (when-let ((remote (oref repo remote))
                (default-directory (forge--scope 'topdir)))
       (when (forge--scope :moved)
         (magit-call-git "config"
                         (format "remote.%s.url" remote)
                         (forge--scope 'url)))
       (when-let*
           ((_(not (eq limit :selective)))
            (_(magit-git-config-p "forge.autoPull" t))
            (refspec (oref repo pullreq-refspec))
            (_(and (not (member refspec (magit-get-all "remote" remote "fetch")))
                   (or (eq forge-add-pullreq-refspec t)
                       (and (eq forge-add-pullreq-refspec 'ask)
                            (y-or-n-p (format "Also add %S refspec? " refspec)))))))
         (magit-call-git "config" "--add"
                         (format "remote.%s.fetch" remote)
                         refspec)))
     (setq repo (forge-get-repository repo nil :insert!))
     (when (eq limit :selective)
       (oset repo selective-p t)
       (setq limit nil))
     (forge--pull repo
                  (or callback (and (not (forge-get-worktree repo)) #'ignore))
                  limit))))