diff options
author | kaotisk <kaotisk@arching-kaos.org> | 2024-06-09 06:52:03 +0300 |
---|---|---|
committer | kaotisk <kaotisk@arching-kaos.org> | 2024-06-09 06:52:03 +0300 |
commit | ba1173c9ec87b14a6ba6772d5ebfaafb81c7f888 (patch) | |
tree | 38c4c4972844d8616f220aa65e00b265ff7945ec /modules/repositories/main.sh | |
parent | 1a572d674b2c94bbe5b094f563c4875c77575227 (diff) | |
download | arching-kaos-tools-ba1173c9ec87b14a6ba6772d5ebfaafb81c7f888.tar.gz arching-kaos-tools-ba1173c9ec87b14a6ba6772d5ebfaafb81c7f888.tar.bz2 arching-kaos-tools-ba1173c9ec87b14a6ba6772d5ebfaafb81c7f888.zip |
Refactoring
Diffstat (limited to 'modules/repositories/main.sh')
-rwxr-xr-x | modules/repositories/main.sh | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/modules/repositories/main.sh b/modules/repositories/main.sh new file mode 100755 index 0000000..ffda701 --- /dev/null +++ b/modules/repositories/main.sh @@ -0,0 +1,164 @@ +#!/bin/bash +source $AK_LIBDIR/_ak_zblock +REPODIR="$HOME/projects" +BAREDIR="$HOME/bare" +REPOSTORE="$HOME/.arching-kaos/repostore" +if [ ! -d $BAREDIR ]; then mkdir $BAREDIR; fi +if [ ! -d $REPODIR ]; then echo "no $REPODIR" && exit; fi +if [ ! -f $REPOSTORE ]; then touch $REPOSTORE; fi +import(){ + REPOS="$(ls -1 $REPODIR)" + for PROJECT in $REPOS + do + cd $BAREDIR + # Can be as well be + # git clone --bare $REPODIR/$PROJECT/.git + # or whatever form git let's you use + git clone --bare http://git.h.kaotisk-hund.com/$PROJECT/.git + if [ $? == 0 ] + then + cd $PROJECT.git + git repack -a + IPFS="$(_ak_ipfs_add .)" + _ak_ipfs_key_gen "$PROJECT.git" + _ak_ipfs_name_publish --key="$PROJECT.git" /ipfs/$IPFS + cd $HOME/bare + else + echo "$PROJECT not a git repo" + fi + done +} + +update(){ + if [ ! -z $1 ] + then + USING="$1" + REPO="$REPODIR/$1/.git" + BARE="$BAREDIR/$1.git" + BARENAME="$1.git" + if [ -d $BARE ] + then + cd $BARE + git pull + git repack -a + IPFS="$(_ak_ipfs_add .)" + _ak_ipfs_name_publish --key="$BARENAME" /ipfs/$IPFS + echo "DONE" + else + echo "NO BARE TO UPDATE" + echo "updating all..." + fi + else + BARES="$(ls -1 $BAREDIR)" + cd $BAREDIR + for PROJECT in $BARES + do + cd "$PROJECT" + git pull + git repack -a + IPFS="$(_ak_ipfs_add .)" + _ak_ipfs_name_publish --key="$PROJECT" /ipfs/$IPFS + cd $BAREDIR + done + fi +} + +append-if-needed(){ + under="$1" + file="$HOME/.arching-kaos/repos" + lines="$(cat $file)" + found="no" + for line in $lines + do + if [ $found == "yes" ] + then + echo "found $found" + break + else + if [ "$line" == "$under" ] + then + found="yes" + echo "found $found" + break + fi + fi + done + if [ $found == "no" ] + then + echo $under > $file + fi +} + +add(){ + PROJECT="$1" + PROJECTDIR="$REPODIR/$PROJECT" + BAREGITDIR="$BAREDIR/$PROJECT.git" + if [ -d $PROJECTDIR ] + then + cd $HOME/bare + git clone --bare $PROJECTDIR/.git + if [ $? == 0 ] + then + cd $BAREGITDIR + git repack -a + IPFS="$(_ak_ipfs_add .)" + try=_ak_ipfs_key_gen "$PROJECT.git" + if [ $? == 0 ] + then + _ak_ipfs_name_publish --key="$PROJECT.git" /ipfs/$IPFS + printf '{"project":"%s.git","ipns":"%s"}' $PROJECT $try > data + _ak_zblock_pack "repos/add" $PWD/data + echo "Done" + fi + fi + else + echo "$PROJECT not a git repo" + fi +} + +index(){ + _ak_ipfs_key_list_full | grep -e '\.git' +} + +set-as-profile(){ + IPFS=$(_ak_ipfs_add $REPOSTORE) + if [ $? == 0 ] + then + profile set repositories $IPFS + else + echo error + fi +} + +publish(){ + if [ ! -z $1 ] + then + echo "Filtering for $1..." + index | grep "$1" > $REPOSTORE + set-as-profile + else + echo "Publishing all..." + index > $REPOSTORE + set-as-profile + fi +} + +usage(){ + echo "-h, --help" + echo "index | add | publish | update" + exit +} + +if [ ! -z $1 ] +then + case $1 in + -h | --help) usage; exit;; + index) index; exit;; + add) add "$2"; exit;; + publish) publish "$2"; exit;; + update) update "$2"; exit;; + *) echo "No command $1";usage; exit;; + esac +else + usage +fi |