shithub: tlsclient

Download patch

ref: 9a7efce5f114ba90987f12b441225b340d554ea6
parent: 3163e5253240db5a98d05b8392704dd8c99fc196
author: Jacob Moody <moody@posixcafe.org>
date: Sat Feb 20 08:40:54 EST 2021

Add git-remote-hjgit and update README

--- a/README
+++ b/README
@@ -1,13 +1,20 @@
 tlsclient: tlsclient(1) for unix
 
-tlsclient comes with two programs, tlsclient itself and 9cpu which uses tlsclient
-to connect to a 9front cpu server and acts as rcpu(1).
+This repo contains three programs, tlsclient itself, 9cpu and git-remote-hjgit.
+9cpu acts as rcpu(1).
+Git-remote-hjgit is a git remote helper for unix git that allows use of hjgit repos.
 
-Most of this code is pillaged from jsdrawterm: https://github.com/aiju/jsdrawterm
+Most of the tlsclient code is pillaged from jsdrawterm: https://github.com/aiju/jsdrawterm
 
 Usage:
 	tlsclient [ -u user] [ -h host ] [ -a auth ] -p port cmd...
 	9cpu [ -u user ] [ -h host ] [ -a auth ] cmd...
 
+Example:
+	9cpu -u moody -h shithub.us -a p9auth.shithub.us newrepo tlsclient
+
+	# with git-remote-hjgit in your $PATH
+	git clone hjgit://shithub.us/user/repo
+
 Bugs:
-	Currently 9cpu uses gnutls, a better alternative is welcome.
+	Currently tlsclient uses gnutls, a better alternative is welcome.
--- /dev/null
+++ b/git-remote-hjgit
@@ -1,0 +1,53 @@
+#!/bin/sh
+
+alias=$1
+url=$2
+
+host=`echo $url | awk  'BEGIN{ FS = "/" } { print $3 }'`
+path=`echo $url | awk "BEGIN{ FS = \"/\" } { gsub(/.*$host/, \"\"); printf(\"%s\", "'$0'") }"`
+
+dir="$GIT_DIR/hjgit/$alias"
+prefix="refs/hjgit/$alias"
+
+default_refspec="refs/heads/*:${prefix}/heads/*"
+
+refspec="${GIT_REMOTE_HJGIT_REFSPEC-$default_refspec}"
+
+test -z "$refspec" && prefix="refs"
+
+force=
+
+mkdir -p "$dir"
+
+if test -z "$GIT_REMOTE_HJGIT_NO_MARKS"
+then
+	gitmarks="$dir/git.marks"
+	hjgitmarks="$dir/hjgit.marks"
+	test -e "$gitmarks" || >"$gitmarks"
+	test -e "$hjgitmarks" || >"$hjgitmarks"
+fi
+
+packinitfmt(){
+	printf "%s %s\0host=%s" $1 $2 $3 | awk '{ printf("%04x%s\0", length($0)+1+4, $0) }'
+}
+
+while read line
+do
+	case $line in
+	capabilities)
+		# connect tells git that we're speaking the git protocol with extra steps
+		echo 'connect'
+		echo
+		;;
+	connect*)
+		# lie that the connection works
+		echo
+		{
+			packinitfmt $(echo $line | awk '{ print $2 }') $path $host
+			cat
+		} | CPU=$host AUTH='p9auth.'$host tlsclient -p 17021
+		exit
+		;;
+	esac
+
+done