# HG changeset patch # User Steve Losh # Date 1658248900 14400 # Node ID 301dff61cd7b4072566e4fd7f9ac40315fa43390 # Parent da569216000695d6556e3335feb402a020b5e301 More diff -r da5692160006 -r 301dff61cd7b bin/git-du --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/git-du Tue Jul 19 12:41:40 2022 -0400 @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -euo pipefail + +ROOT="$1" +shift + +git-object-sizes \ + | head -200 \ + | grep -P "^\d+,\d+,[0-9a-f]+,$ROOT.*" \ + | awk --field-separator , ' + { + sums[$4] += $1 + } + END { + for (x in sums) { + print sums[x], x + } + } + ' + + + diff -r da5692160006 -r 301dff61cd7b bin/git-object-sizes --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/git-object-sizes Tue Jul 19 12:41:40 2022 -0400 @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# Shows you the largest objects in your repo's pack file. +# Written for osx. +# +# @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ +# @author Antony Stubbs +# +# Edited by sjl + +# set the internal field spereator to line break, so that we can iterate easily over the verify-pack output +IFS=$'\n'; + +# list all objects including their size, sort by size +objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -P '(tree|blob|commit)'` + +# echo "All sizes are in bytes. The pack column is the size of the object, compressed, inside the pack file." >&2 + +# echo "size,pack,SHA,location" +for y in $objects +do + # echo "$y" + + # extract the size in bytes + size=`echo $y | f 3` + + # extract the compressed size in bytes + compressedSize=`echo $y | f 4` + + # extract the SHA + sha=`echo $y | f 1` + + # find the objects location in the repository tree + loc=`git rev-list --all --objects | grep $sha | f 2` + + #lineBreak=`echo -e "\n"` + echo "${size},${compressedSize},${sha},${loc}" +done diff -r da5692160006 -r 301dff61cd7b bin/join-regex-or --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/join-regex-or Tue Jul 19 12:41:40 2022 -0400 @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 + +import sys +print("|".join(sys.stdin.readlines()).replace('\n', '')) diff -r da5692160006 -r 301dff61cd7b lisp/build-binary.sh --- a/lisp/build-binary.sh Mon Jun 20 23:21:30 2022 -0400 +++ b/lisp/build-binary.sh Tue Jul 19 12:41:40 2022 -0400 @@ -9,5 +9,6 @@ sbcl --load "$LISP" \ --eval "(sb-ext:save-lisp-and-die \"$NAME\" :executable t + :compression t :save-runtime-options t :toplevel '$NAME:toplevel)" diff -r da5692160006 -r 301dff61cd7b lisp/subex.lisp --- a/lisp/subex.lisp Mon Jun 20 23:21:30 2022 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -(eval-when (:compile-toplevel :load-toplevel :execute) - (ql:quickload '(:adopt) :silent t)) - -(defpackage :subex - (:use :cl) - (:export :toplevel *ui*)) - -(in-package :subex) - -;;;; Global Options and UI ---------------------------------------------------- -(defparameter *o/help* - (adopt:make-option 'help :long "help" :help "display help and exit" :reduce (constantly t))) - -(defparameter *o/version* - (adopt:make-option 'version :long "version" :help "display version and exit" :reduce (constantly t))) - -(defparameter *ui/main* - (adopt:make-interface - :name "subex" - :usage "[subcommand] [options]" - :help "subcommand example program" - :summary "an example program that uses subcommands" - :contents (list *o/help* *o/version*))) - -(defparameter *ui* *ui/main*) - - -;;;; Subcommand Foo ----------------------------------------------------------- -(defparameter *o/foo/a* - (adopt:make-option 'a :result-key 'mode :short #\a :help "run foo in mode A" :reduce (constantly :a))) - -(defparameter *o/foo/b* - (adopt:make-option 'b :result-key 'mode :short #\b :help "run foo in mode B" :reduce (constantly :b))) - -(defparameter *ui/foo* - (adopt:make-interface - :name "subex foo" - :usage "foo [-a|-b]" - :summary "foo some things" - :help "foo some things" - :contents (list *o/foo/a* *o/foo/b*))) - -(defun run/foo (mode) - (format t "Running foo in ~A mode.~%" mode)) - - -;;;; Subcommand Bar ----------------------------------------------------------- -(defparameter *o/bar/meow* - (adopt:make-option 'meow :long "meow" :help "meow loudly after each step" :reduce (constantly t))) - -(defparameter *ui/bar* - (adopt:make-interface - :name "subex bar" - :usage "bar [--meow] FILE..." - :summary "bar some files" - :help "bar some files" - :contents (list *o/bar/meow*))) - -(defun run/bar (paths meow?) - (dolist (p paths) - (format t "Bar-ing ~A.~%" p) - (when meow? - (write-line "meow.")))) - - -;;;; Toplevel ----------------------------------------------------------------- -(defun toplevel/foo (args) - (multiple-value-bind (arguments options) (adopt:parse-options-or-exit *ui/foo* args) - (unless (null arguments) - (error "Foo does not take arguments, got ~S" arguments)) - (run/foo (gethash 'mode options)))) - -(defun toplevel/bar (args) - (multiple-value-bind (arguments options) (adopt:parse-options-or-exit *ui/bar* args) - (when (null arguments) - (error "Bar requires arguments, got none.")) - (run/bar arguments (gethash 'meow options)))) - -(defun lookup-subcommand (string) - (cond - ((null string) (values nil *ui/main*)) - ((string= string "foo") (values #'toplevel/foo *ui/foo*)) - ((string= string "bar") (values #'toplevel/bar *ui/bar*)) - (t (error "Unknown subcommand ~S" string)))) - -(defun toplevel () - (sb-ext:disable-debugger) - (multiple-value-bind (arguments global-options) - (handler-bind ((adopt:unrecognized-option 'adopt:treat-as-argument)) - (adopt:parse-options *ui/main*)) - (when (gethash 'version global-options) - (write-line "1.0.0") - (adopt:exit)) - (multiple-value-bind (subtoplevel ui) (lookup-subcommand (first arguments)) - (when (or (null subtoplevel) - (gethash 'help global-options)) - (adopt:print-help-and-exit ui)) - (funcall subtoplevel (rest arguments))))) - diff -r da5692160006 -r 301dff61cd7b lisp/weather.lisp --- a/lisp/weather.lisp Mon Jun 20 23:21:30 2022 -0400 +++ b/lisp/weather.lisp Tue Jul 19 12:41:40 2022 -0400 @@ -45,6 +45,10 @@ ;;;; OpenWeatherMap ----------------------------------------------------------- +;;; TODO Switch to weather.gov some day to get my taxes' worth, e.g. +;;; https://forecast.weather.gov/MapClick.php?lat=43.1577&lon=-77.6066&FcstType=digitalDWML +;;; Sadly this is XML. + (defclass* response () ((hourly :json (vector hour))) (:metaclass jarl:json-class))