#!/bin/sh
# http://www.berklix.com/~jhs/bin/.sh/git-pull.sh
#	~/bin/.sh/git-pull.sh -> LN/git-pull.sh
#	LN -> ../../../public_html/bin/.sh

# May be called by crontab approx. daily, depending on tower or
# laptop connectivity.

# Generic GIT Syntax Notes First:
# Do Not Do: git checkout 'HEAD@{Jan 17 2014}'
# http://alexpeattie.com/blog/working-with-dates-in-git/
# http://docs.freebsd.org/en/books/handbook/mirrors/#git
# http://www.endpointdev.com/blog/2014/05/git-checkout-at-specific-date/
# man git-checkout
# man git-clone
# man git-pull

# Head in Svn = Main in Git
# cd /usr/ports/devel/git ; make install
# git fails on 9.2-REL, needs SSL keys.

# Old Syntax Samples Pre 2021-01
#	git clone http://github.com/pkgng/pkgng.git
#	cd pkgng
#	git checkout release-1.0
#	git log -p --follow # assignment of guilt
#	git blame -w -M		# assignment of guilt
#	git clone http://git.code.sf.net/p/exmh/git	# @ 2018-11-09
#	git clone git://git.savannah.nongnu.org/nmh.git	# @ 2018-11-09
#	To get to accept an old key: \
#	GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" \
#	 git clone ssh://user@host/path-to-repository
#	git grep lib/libglapi.so
#	# graphics/mesa-libs/pkg-plist:lib/libglapi.so

localhost=`hostname -s`
gitbase=~/git/$localhost
# gitbase=~/git/master
cd $gitbase || exit 1
echo "Running in `/bin/pwd`"
df `/bin/pwd`
# PID as if it runs out of space, want to know which FS.
# log=~/tmp/git-pull-`2024-04-24T14:04:49Z`-pid=$$.log
log=~/tmp/git-pull-`date -u +%Y-%m-%dT%H:%M:%SZ`-pid=$$.log
echo "Created by $0 `date`" > $log

# du -s 31G @ 2022-02-26

# Initial Download Of Full Trees: {
#	cd $gitbase ; mkdir ports-cur src-cur src-15 src-14 src-13 src-12 \
#	 src-11 src-10 src-9 src-8 src-7 src-6 src-5 src-4 doc
#
#	cd $gitbase/ports-cur && git clone			\
#	 http://git.FreeBSD.org/ports.git ports
#
#	make fetchindex
#
#	cd $gitbase/ports-cur && git clone -o freebsd -b main \
#	 http://git.freebsd.org/ports.git ports
#	 du -s -k 2693080
#
#	cd $gitbase/src-cur	&& git clone -o freebsd -b main \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 3498188
#
#	cd $gitbase/src-16	&& git clone -o freebsd -b stable/16 \
#	 http://git.freebsd.org/src.git	src
#	 fatal: Remote branch stable/16 not found in upstream freebsd
#
#	cd $gitbase/src-15	&& git clone -o freebsd -b stable/15 \
#	 http://git.freebsd.org/src.git	src
#	 fatal: Remote branch stable/15 not found in upstream freebsd
#
#	cd $gitbase/src-14	&& git clone -o freebsd -b stable/14 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 3371264
#
#	cd $gitbase/src-13	&& git clone -o freebsd -b stable/13 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 3426864 
#
#	cd $gitbase/src-12	&& git clone -o freebsd -b stable/12 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 3350588
#
#	cd $gitbase/src-11	&& git clone -o freebsd -b stable/11 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 3230520
#
#	cd $gitbase/src-10	&& git clone -o freebsd -b stable/10 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2959252
#
#	cd $gitbase/src-9	&& git clone -o freebsd -b stable/9 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2759772
#
#	cd $gitbase/src-8	&& git clone -o freebsd -b stable/8 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2530372
#
#	cd $gitbase/src-7	&& git clone -o freebsd -b stable/7 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2472764
#
#	cd $gitbase/src-6	&& git clone -o freebsd -b stable/6 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2382508
#
#	cd $gitbase/src-5	&& git clone -o freebsd -b stable/5 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2338784
#
#	cd $gitbase/src-4	&& git clone -o freebsd -b stable/4 \
#	 http://git.freebsd.org/src.git	src
#	 du -s -k 2201488
#
#	cd $gitbase/doc		&& git clone -o freebsd	\
#	 http://git.freebsd.org/doc.git	doc
#	 du -s -k 643928
#	}
#
# { Periodic: Update Trees: Note these get stable & current, not release
#	echo - "git pull bracketed, else breaks on customised trees"
#	echo " stops later trees"

ping -c 1 www.freebsd.org || \
	( echo "git-pull.sh failed to ping git.FreeBSD.org" | \
		mail -s "cron: git-pull.sh failed to ping git.FreeBSD.org" \
			 `whoami` ; exit 1 )
#	JJLATER add a better test eg "fetch" as ping
#	wll only work on direct connected hosts eg dell.no.berklix.net,
#	not behind a firewall eg dell.js.berklix.net.

case $localhost in
	# du -k
	#	2,513,684 ./ports-cur
	#	......... ./src-14
	#	3,237,668 ./src-13
	#	  658,484 ./doc/doc
	# slim)
	# 	GITTARGET="ports-cur/ports src-14/src src-13/src"
	# 	;;
	*)
		GITTARGET="ports-cur/ports src-cur/src src-15/src src-14/src src-13/src src-12/src src-11/src src-10/src src-9/src src-8/src src-7/src src-6/src src-5/src src-4/src doc/doc"
		# Added src-15 Tue Sep  9 01:26:12 CEST 2025 
		#	http://www.freebsd.org/releases/15.0R/schedule/
		#       5 September 2025 stable/15 branch created;
		#	future release engineering proceeds on this branch.
		;;
	esac

# omitted="usr/src usr/ports usr/doc"
for i in $GITTARGET ; do
		echo "Entering $i" | tee -a $log
		( cd $gitbase/$i && \
		( echo "Starting `pwd`" | tee -a $log ) && \
		(git pull --ff-only | tee -a $log ) && \
		(echo "Done `pwd`" | tee -a $log ) | \
		(echo "Failed $i"  | tee -a $log ) \
			)
		echo "Finished $i" | tee -a $log ; echo
	done
	mail -s "$0 Finished `whoami`@$localhost" `whoami` < $log
	rm $log

#	echo Searching for anything not owned by jhs in $i
#	pushd ~/git/$localhost; find . \! -user jhs ; popd
#	echo "Versions:"
#	grep __FreeBSD_version /usr/include/sys/param.h \
#	 ~/git/*/src-[0-9]*/src/sys/sys/param.h \
#	 | grep -v undef | grep -v Handbook
#	JJLATER Look for a command to mirror the whole git tree
#	rather than just extract from a remote git tree,
#	if nothig better found,
#	possibly try one of the httrack from one of ~/bin/.sh/web_cp_*
#	}
