These scripts automate various programming and sysadmin tasks. This project contains utilities for:
To install, run the following (or put it at the top of a script).
Then, the scripts are available at /tmp/$USER/plume-scripts
.
if [ -d /tmp/$USER/plume-scripts ] ; then
git -C /tmp/$USER/plume-scripts pull -q > /dev/null 2>&1
else
mkdir -p /tmp/$USER && git -C /tmp/$USER clone --filter=blob:none -q https://github.com/eisop-plume-lib/plume-scripts.git
fi
If you want to use a specific version of plume-scripts
rather than the
bleeding-edge HEAD, you can run git checkout _SHA_
after the git clone
command.
Most of the scripts use sh
or bash
,
but some of the scripts use perl
or python
.
A wrapper for cron jobs so that cron only sends email when an error has occurred. Documentation at top of file and at http://habilis.net/cronic/.
Filter the ouput of tools such as lint
, to only show output for changed
lines in a diff or pull request.
Documentation at top of file.
Reads standard input, and if not empty calls the mail
program on it.
In other words, acts like mail -e
and isuseful when your version of mail
does not support -e
.
This feature is useful in scripts and cron jobs, but is not supported
in all versions of mail
.
Documentation
at top of file.
Cleans up a path environment variable by removing duplicates and non-existent directories. Can optionally remove certain path elements. Works for either space- or colon- delimiated paths. Documentation at top of file.
Obtains information about a CI (continuous integration) job, such as the organization, the branch, the range of commits, and whether it is a pull request. Works for Azure Pipelines, CircleCI, GitHub Actions, and Travis CI. Documentation at top of file.
Given a file of warnings (such as those output by lint
or other tools),
reports only those that are in the diff for the current pull request.
Works for Azure Pipelines, CircleCI, GitHub Actions, and Travis CI.
Documentation at top of file.
Prints the SHA commit id corresponding to the most recent successful CI job. Documentation at top of file.
The maintained version of these scripts is in https://github.com/eisop-plume-lib/git-scripts. The scripts will be removed from the plume-scripts repository in the future.
A script for use as a git mergetool; runs Emacs ediff as the mergetool. Documentation at top of file.
Lists all the authors of commits in a git repository. Documentation at top of file.
This script has been superseded by git-clone-related
in the git-scripts repository.
Clones a repository related to the one where this script is called, trying to match the fork and branch. Works for Azure Pipelines, CircleCI, GitHub Actions, and Travis CI. Documentation at top of file.
Suppose you have two related Git repositories:
MY-ORG/
MY-REPO
MY-ORG/
MY-OTHER-REPO
In a CI job that is testing branch BR in fork F of MY-REPO, you would like to use fork F of MY-OTHER-REPO if it exists, and you would like to use branch BR if it exists. Here is how to accomplish that:
if [ -d "/tmp/$USER/plume-scripts" ] ; then
git -C /tmp/$USER/plume-scripts pull -q > /dev/null 2>&1
else
mkdir -p /tmp/$USER && git -C /tmp/$USER clone --filter=blob:none -q https://github.com/eisop-plume-lib/plume-scripts.git
fi
/tmp/$USER/plume-scripts/git-clone-related codespecs fjalar
Finds a fork of a GitHub repository, or returns the upstream repository if the fork does not exist. Documentation at top of file.
Tests whether a branch exists in a Git repository; prints the branch, or prints "master" if the branch does not exist. Documentation at top of file.
Edits files in place to resolve git conflicts that arise from edits to adjacent lines. Documentation at top of file.
Edits files in place to resolve git conflicts that arise from differences in blank lines and whitespace. Documentation at top of file.
Edits files in place to resolve git conflicts that arise from Java import
statements.
Documentation at top of file.
Replace all matching regular expressions in the given files (or all files under the current directory). The timestamp on each file is updated only if the replacement is performed. Documentation at top of file.
Jeffrey Friedl's search
program combines find
and grep
--
more or less do a 'grep' on a whole directory tree. search
is more
efficient, uses Perl regular expressions, and is much more powerful.
This version fixes a tiny bug or two. For full documentation, see its
manpage.
This program has been largely superseded by
rg
, and before that by
pt
and
ag
. However, it is still useful because it
searches more thoroughly: in git-ignored files, and in compressed
archives.
Sorts the input lines by directory order: first, every file in a given directory, in sorted order; then, process subdirectories recursively, in sorted order. This is useful for users (e.g., when printing) and for making output deterministic. Documentation at top of file.
Sorts the input errors/warnings by filename. Works for any tool that produces output in the standard format. This is useful for compilers such as javac that process files in nondeterministic order. Documentation at top of file.
Check that a class file's version is ≤ the specified version. This ensures that the class will run on a particular version of Java. Documentation at top of file.
Determines all files that are recursively \input
by a given
LaTeX file.
Documentation at top of file.
The program has two modes:
- Inline mode (the default): Create a single LaTeX file for the document,
by inlining
\input
commands and removing comments. The result is appropriate to be sent to a publisher. - List mode: List all the files that are (transitively)
\input
. This can be useful for getting a list of source files in a logical order, for example to be used in a Makefile or Ant buildfile.