(import scheme) (import (chicken base)) (import (chicken format)) (import (chicken irregex)) (import (chicken pathname)) (import (chicken process-context)) (import scsh-process) (define (die #!rest args) (apply print args) (exit 1)) (define (trim string) (irregex-replace "\\s+$" string "")) (define (export-repo #!optional (path ".")) (when (not (zero? (run (git -C ,path status) (> "/dev/null")))) (die "Not in a git repo")) (let ((original-url (trim (run/string (git remote get-url origin))))) (when (irregex-match "git@lab:/srv/git/[^/]+\\.git" original-url) (print "Repository already exported, quitting...") (exit 0)) (let* ((repo-path (trim (run/string (git rev-parse --show-toplevel)))) (repo-name (pathname-strip-directory repo-path)) (git-name (string-append repo-name ".git")) (remote-path (make-pathname "/srv/git" git-name)) (remote-url (format "git@lab:~a" remote-path))) (when (not (zero? (run (ssh "git@lab" depp init ,repo-name)))) (die "Failed initializing repote repo " repo-name)) (if (zero? (string-length original-url)) ; no origin (when (not (zero? (run (git -C ,path remote add origin ,remote-url)))) (die "Failed adding origin with remote url " remote-url)) (when (not (zero? (run (git -C ,path remote set-url origin ,remote-url)))) (die "Failed setting remote url " remote-url))) (when (not (zero? (run (git -C ,path push origin master)))) (die "Failed pushing repo to new remote"))))) (define (main #!rest args) (when (> (length args) 1) (die "usage: git export [path]")) (apply export-repo args)) (apply main (command-line-arguments))