skilleter-thingy 0.0.98__tar.gz → 0.0.99__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of skilleter-thingy might be problematic. Click here for more details.

Files changed (77) hide show
  1. skilleter_thingy-0.0.99/PKG-INFO +655 -0
  2. skilleter_thingy-0.0.99/README.md +633 -0
  3. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/pyproject.toml +1 -1
  4. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/borger.py +5 -1
  5. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/docker_purge.py +1 -1
  6. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/gphotosync.py +2 -0
  7. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/multigit.py +5 -4
  8. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/rmdupe.py +4 -1
  9. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/git.py +2 -0
  10. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/git2.py +6 -0
  11. skilleter_thingy-0.0.99/skilleter_thingy.egg-info/PKG-INFO +655 -0
  12. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy.egg-info/SOURCES.txt +0 -1
  13. skilleter_thingy-0.0.98/PKG-INFO +0 -349
  14. skilleter_thingy-0.0.98/README.md +0 -327
  15. skilleter_thingy-0.0.98/skilleter_thingy/box.py +0 -31
  16. skilleter_thingy-0.0.98/skilleter_thingy.egg-info/PKG-INFO +0 -349
  17. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/LICENSE +0 -0
  18. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/setup.cfg +0 -0
  19. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/__init__.py +0 -0
  20. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/addpath.py +0 -0
  21. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/console_colours.py +0 -0
  22. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/diskspacecheck.py +0 -0
  23. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/ffind.py +0 -0
  24. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/ggit.py +0 -0
  25. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/ggrep.py +0 -0
  26. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_br.py +0 -0
  27. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_ca.py +0 -0
  28. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_cleanup.py +0 -0
  29. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_co.py +0 -0
  30. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_common.py +0 -0
  31. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_hold.py +0 -0
  32. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_mr.py +0 -0
  33. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_parent.py +0 -0
  34. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_review.py +0 -0
  35. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_update.py +0 -0
  36. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/git_wt.py +0 -0
  37. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/gitcmp_helper.py +0 -0
  38. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/gitprompt.py +0 -0
  39. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/gl.py +0 -0
  40. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/linecount.py +0 -0
  41. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/moviemover.py +0 -0
  42. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/photodupe.py +0 -0
  43. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/phototidier.py +0 -0
  44. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/py_audit.py +0 -0
  45. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/readable.py +0 -0
  46. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/remdir.py +0 -0
  47. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/rpylint.py +0 -0
  48. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/splitpics.py +0 -0
  49. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/strreplace.py +0 -0
  50. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/sysmon.py +0 -0
  51. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/tfm.py +0 -0
  52. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/tfparse.py +0 -0
  53. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/__init__.py +0 -0
  54. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/colour.py +0 -0
  55. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/dc_curses.py +0 -0
  56. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/dc_defaults.py +0 -0
  57. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/dc_util.py +0 -0
  58. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/dircolors.py +0 -0
  59. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/docker.py +0 -0
  60. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/files.py +0 -0
  61. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/gitlab.py +0 -0
  62. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/path.py +0 -0
  63. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/popup.py +0 -0
  64. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/process.py +0 -0
  65. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/run.py +0 -0
  66. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/tfm_pane.py +0 -0
  67. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/tidy.py +0 -0
  68. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/thingy/venv_template.py +0 -0
  69. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/trimpath.py +0 -0
  70. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/venv_create.py +0 -0
  71. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/window_rename.py +0 -0
  72. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/xchmod.py +0 -0
  73. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy/yamlcheck.py +0 -0
  74. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy.egg-info/dependency_links.txt +0 -0
  75. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy.egg-info/entry_points.txt +0 -0
  76. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy.egg-info/requires.txt +0 -0
  77. {skilleter_thingy-0.0.98 → skilleter_thingy-0.0.99}/skilleter_thingy.egg-info/top_level.txt +0 -0
@@ -0,0 +1,655 @@
1
+ Metadata-Version: 2.2
2
+ Name: skilleter_thingy
3
+ Version: 0.0.99
4
+ Summary: A collection of useful utilities, mainly aimed at making Git more friendly
5
+ Author-email: John Skilleter <john@skilleter.org.uk>
6
+ Project-URL: Home, https://skilleter.org.uk
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.8
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: imagehash
14
+ Requires-Dist: inotify
15
+ Requires-Dist: pillow
16
+ Requires-Dist: psutil
17
+ Requires-Dist: pyaml
18
+ Requires-Dist: pygit2
19
+ Requires-Dist: python-dateutil
20
+ Requires-Dist: requests
21
+ Requires-Dist: filetype
22
+
23
+ # Thingy
24
+
25
+ Licence: GPL v3
26
+
27
+ Author: John Skilleter v0.99
28
+
29
+ A collection of shell utilities and configuration stuff for Linux and MacOS. Untested on other operating systems.
30
+
31
+ Permanently (for the foreseeable future!) in a beta stage - usable, with a few rough edges, and probably with bugs when used in way I'm not expecting!
32
+
33
+ Install from PyPi via pip or pipx as the `skilleter-thingy` package; for instance - `pipx install skilleter_thingy`
34
+
35
+ The commands are categorised into:
36
+
37
+ * Git working tree management
38
+ * Miscellaneous commands
39
+ * Git Extensions
40
+ * General-purpose commands
41
+
42
+ # Git Working Tree Management
43
+
44
+ ## Multigit
45
+
46
+ Multigit is a tool for managing a collection of related git working trees.
47
+
48
+ This is intended for use in a situation where you have a collection of related git working trees organised in a directory hierarchy which aren't managed using git submodules or any other tool. It allows you to run git commands on multiple working trees at once, without navigating around the different working trees to do so and to select which working trees commands are run in.
49
+
50
+ For ease of use it is recommended that you create an alias for multigit called `mg`. How you do this is dependent on the shell you use, for instance in Bash, you could create an alias in your `~/.bashrc` file:
51
+
52
+ alias mg="multigit $@"
53
+
54
+ ## Initialisation
55
+
56
+ To use multigit, start by creating working trees for the repositories that you want to use in a directory tree - the working trees can be at different levels or even nested, for example:
57
+
58
+ multigit_tree
59
+ |
60
+ +----working tree 1
61
+ |
62
+ +---+subdirectory
63
+ | |
64
+ | +----working tree 2
65
+ | |
66
+ | +----working tree 3
67
+ |
68
+ +----working tree 4
69
+
70
+ Start by running ensuring that the default branch (e.g. `main`) is checked out in each of the working trees and, in the top-level directory, run `multigit init` to create the configuration file which, by default is called `multigit.toml` - this is just a text file that sets the configuration for each working tree in terms of name, origin, default branch, tags and location.
71
+
72
+ ## Multigit Command Line
73
+
74
+ The multigit command line format is:
75
+
76
+ multigit OPTIONS COMMAND
77
+
78
+ Where COMMAND is an internal multigit command if it starts with a `+` and is a git command otherwise (including the additional git commands described in this document).
79
+
80
+ By default, when multigit is invoked with a git command, it runs a the command in each of the working trees selected by the command line options passed to multigit (if no options are specified then the command is run in *all* the working trees.
81
+
82
+ The command takes a number of options that can be used to select the list of working trees that each of the subcommands that it supports runs in:
83
+
84
+ `--repos REPO` / `-r REPO` Allows a list of working trees to be specfied, either by path, name or a wildcard matching either.
85
+
86
+ `--modified` / `-m` Run only in working trees containing locally modified files
87
+
88
+ `--branched` / `-b` Run only in working trees where the current branch that is checked out is NOT the default branch
89
+
90
+ `--tag TAG` / `-t TAG` Run only in working trees that are tagged with the specified tag
91
+
92
+ These options are AND-ed together, so specifying `--modified --branched --tag WOMBAT` will select only working trees that are modified AND branched AND tagged with `WOMBAT`, but the parameters to the `--repos` and `--tag` options are OR-ed together, so specifying `--tag WOMBAT --tag EMU` will select repos that are tagged as `WOMBAT` *OR* `EMU`.
93
+
94
+ Multigit tags are stored in the configuration file, not within the working tree and each working tree can have multiple tags.
95
+
96
+ ## Multigit Commands
97
+
98
+ Multigit supports a small list of subcommands, each of which are prefixed with a `+` to distinguish them from Git commands:
99
+
100
+ `+init` - Create or update the configuration file
101
+
102
+ `+dir` - Given the name of a working tree, output the location within the multigit tree of that working tree if the name matches uniquely, or the name of the directory where the multigit configuration file resides if no parameter is specified.
103
+
104
+ `+config` - Print the name and location of the multigit configuration file.
105
+
106
+ `+tag TAG` - If no tag specified list tags applied to the specified working trees. If a tag *is* specified, then *apply* the tag to the specified working trees.
107
+
108
+ `+untag TAG` - Remove the tag from the specified working trees (do nothing if the tag is not applied in the first place).
109
+
110
+ Any command *not* prefixed with `+` is run in each of the working trees (filtered by the various multigit options) as a git command.
111
+
112
+ For example; `multigit -m commit -ab` would run `git commit -a` in each of the working trees that is branched and contains modified files.
113
+
114
+ The `+dir` command can be used with shell aliases (or their equivalent in the user's shell of choice) to create an alias to run, for example, `cd (multigit +dir "$@")` (Bash) or `cd (multigit +dir $argv)` (for the Fish shell) that would cd to the top level directory.
115
+
116
+ # Miscellaneous Git Utilities
117
+
118
+ ## gitprompt
119
+
120
+ Output a string containing colour-coded shell nesting level, current directory and git working tree status. It is intended to be used in the shell prompt; for instance, for Bash via adding:
121
+
122
+ export PS1=$(gitprompt)
123
+
124
+ to the `~/.bashrc` file.
125
+
126
+ The appearance of the prompt is controlled by configuration settings in the `.gitconfig` file:
127
+
128
+ [prompt]
129
+ prefix = 0..2
130
+
131
+ The `prefix` value determines what git status information is shown in the prompt:
132
+
133
+ * 0 - No status information
134
+ * 1 - A single letter followed by a file count showing the number of stashed, untracked, modified, etc. files in the working tree
135
+ * 2 - As 1, but using a word, rather than a single letter
136
+
137
+ If a rebase, bisect or merge is process, this is also shown in the prompt.
138
+
139
+ The name of the repo and the current branch are also appended and the prompt is also colour-coded according to the state of the working tree.
140
+
141
+ # Git Extensions
142
+
143
+ Due to the way that the git command works, these can be run as they were additional git subcommands, although, due to a limitation in git, the only things that does not work is the `--help` option where the command has to be run with a hyphen between `git` and the subcommand - for example `git ca --help` does not work, but `git-ca --help` does.
144
+
145
+ ## Branch Names
146
+
147
+ Where one of the git extensions takes an existing branch name as a parameter, the branch name can be abbreviated and the abbreviated form is expanded according to the following rules:
148
+
149
+ * If the specified branch name exactly matches an existing branch, tag or commit ID then that is used (this includes remote branches where appropriate, if no local branches match).
150
+ * Otherwise, the branch name is compared to existing branches (again, including remote branches where appropriate, if no local branches match) and, if the specified name uniquely partially matches an existing branch (optionally using `*` and `?` wildcard characters) that branch is used. If it matches multiple branches than an error is reported.
151
+
152
+ For example, given a repo with the following branches:
153
+
154
+ origin/wombat
155
+ origin/platypus
156
+ wombat
157
+ emu
158
+ battery
159
+ chaos
160
+
161
+ Then:
162
+
163
+ * 'emu' will match 'emu'
164
+ * 'wombat' will match 'wombat' but not 'origin/wombat' since the local branch takes precedence
165
+ * 'at' will match both 'wombat' and 'battery' and will report an error
166
+ * 'pus' will match 'origin/platypus'
167
+
168
+ This is most useful where branches contain ticket numbers so, for instance given a branch called `feature/SKIL-103` you can check it out using `git co 103` assuming no other local branches contain `103` in their name.
169
+
170
+ Note that the concept of the default branch `DEFAULT` mentioned above *only* applies when using the `multigit` command, although some of the commands will treat branches called `master` or `main` as special cases (see the individual command documentation).
171
+
172
+ ## git ca
173
+
174
+ Improved version of 'git commit --amend'. Updates files that are already in the commit and, optionally, adds and commits additional files.
175
+
176
+ usage: git-ca [-h] [--added] [--all] [--everything] [--ignored] [--patch] [--verbose] [--dry-run] [files ...]
177
+
178
+ positional arguments:
179
+ files List of files to add to the commit
180
+
181
+ options:
182
+ -h, --help show this help message and exit
183
+ --added, -A Update files in the current commit, including files added with `git add`
184
+ --all, -a Append all locally-modified, tracked files to the current commit
185
+ --everything, -e Append all modified and untracked files to the current commit (implies `~--all`)
186
+ --ignored, -i Include files normally hidden by `.gitignore`
187
+ --patch, -p Use the interactive patch selection interface to chose which changes to commit.
188
+ --verbose, -v Verbose mode
189
+ --dry-run, -D Dry-run
190
+
191
+ ## git cleanup
192
+
193
+ List or delete branches that have already been merged and delete tracking branches that are no longer on the remote.
194
+
195
+ git-cleanup [-h] [--delete] [--master MASTER] [--force] [--unmerged] [--yes] [--debug] [branches ...]
196
+
197
+ positional arguments:
198
+
199
+ branches List of branches to check (default is all branches)
200
+
201
+ options:
202
+ -h, --help show this help message and exit
203
+ --delete, -d Delete all branches that have been merged
204
+ --master MASTER, -m MASTER, --main MASTER
205
+ Specify the master branch (Attempts to read this from GitLab or defaults to "develop" if present or "master" or "main" otherwise
206
+ --force, -f Allow protected branches (e.g. master) to be removed
207
+ --unmerged, -u List branches that have NOT been merged
208
+ --yes, -y Assume "yes" in response to any prompts (e.g. to delete branches)
209
+ --debug Enable debug output
210
+
211
+ ## git co
212
+
213
+ Equivalent to `git checkout` but with enhanced branch matching as described above. The command does not support the full range of options supported by the `git checkout` comamnd which should still be used where additional functionality is required.
214
+
215
+ git-co [-h] [--branch] [--update] [--rebase] [--force] [--exact] [--debug] branchname
216
+
217
+ positional arguments:
218
+
219
+ branchname The branch name (or a partial name that matches uniquely against a local branch, remote branch, commit ID or tag)
220
+
221
+ options:
222
+ -h, --help show this help message and exit
223
+ --branch, -b Create the specified branch
224
+ --update, -u If a remote branch exists, delete any local branch and check out the remote version
225
+ --rebase, -r Rebase the branch onto its parent after checking it out
226
+ --force, -f When using the update option, recreate the local branch even if it is owned by the current user (based on the author of the most recent commit)
227
+ --exact, -e Do not use branch name matching - check out the branch as specified (if it exists)
228
+ --debug Enable debug output
229
+
230
+ ## git parent
231
+
232
+ Attempt to determine the parent branch for the specified branch (defaulting to the current one).
233
+
234
+ git-parent [-h] [--all] [--verbose] [branch]
235
+
236
+ Attempt to determine the parent branch for the specified branch (defaulting to the current one)
237
+
238
+ positional arguments:
239
+ branch Branch, commit or commit (defaults to current branch; main)
240
+
241
+ options:
242
+ -h, --help show this help message and exit
243
+ --all, -a Include feature branches as possible parents
244
+ --verbose, -v Report verbose results (includes number of commits between branch and parent)
245
+
246
+ ## git update
247
+
248
+ Update the rworking tree from the remote, rebase local branch(es) against their parents and optionally run git cleanup.
249
+
250
+ git-update [-h] [--cleanup] [--all] [--everything] [--default] [--parent PARENT] [--all-parents] [--stop] [--ignore IGNORE] [--verbose] [--dry-run]
251
+
252
+ options:
253
+ -h, --help show this help message and exit
254
+ --cleanup, -c After updating a branch, delete it if there are no differences between it and its parent branch
255
+ --all, -a Update all local branches, not just the current one
256
+ --everything, -A Update all local branches, not just the current one and ignore the default ignore list specified in the Git configuration
257
+ --default, -d Checkout the main or master branch on completion
258
+ --parent PARENT, -p PARENT
259
+ Specify the parent branch, rather than trying to work it out
260
+ --all-parents, -P Feature branches are not considered as alternative parents unless this option is specified
261
+ --stop, -s Stop if a rebase problem occurs, instead of skipping the branch
262
+ --ignore IGNORE, -i IGNORE
263
+ List of one or more wildcard branch names not to attempt to update (uses update.ignore from the Git configuration if not specified)
264
+ --verbose Enable verbose output
265
+ --dry-run Report what would be done without actually doing it
266
+
267
+ ## git wt
268
+
269
+ Output the top level directory of the git working tree or return an error if we are not in a git working tree.
270
+
271
+ git-wt [-h] [--parent] [--dir DIR] [level]
272
+
273
+ positional arguments:
274
+ level Number of levels below the top-level directory to report
275
+
276
+ options:
277
+ -h, --help show this help message and exit
278
+ --parent, -p If we are already at the top of the working tree, check if the parent directory is in a working tree and output the top-level directory of that tree.
279
+ --dir DIR, -d DIR Find the location of the top-level directory in the working tree starting at the specified directory
280
+
281
+ ## git review
282
+
283
+ Menu-driven Git code review tool
284
+
285
+ git-review [-h] [--commit COMMIT] [--branch BRANCH] [--change] [--debug] [--dir DIR] [--difftool DIFFTOOL] [commits ...]
286
+
287
+ positional arguments:
288
+ commits Commit(s) or paths to compare
289
+
290
+ options:
291
+ -h, --help show this help message and exit
292
+ --commit COMMIT, -c COMMIT
293
+ Compare the specified commit with its parent
294
+ --branch BRANCH, -b BRANCH
295
+ Compare the specified commit to branch point on specified branch
296
+ --change, -C Compare the current commit with its parent
297
+ --debug, -d Start a debug session over Telnet using pudb
298
+ --dir DIR Work in the specified directory
299
+ --difftool DIFFTOOL Override the default git diff tool
300
+
301
+ # General Commands
302
+
303
+ ## addpath
304
+
305
+ Add or remove entries from a path list (e.g. as used by the PATH environment variable)
306
+
307
+ addpath [-h] [--add ADD] [--prefix PREFIX] [--suffix SUFFIX] [--remove REMOVE] [--force FORCE] [--separator SEPARATOR] path
308
+
309
+ positional arguments:
310
+ path The path to modify
311
+
312
+ options:
313
+ -h, --help show this help message and exit
314
+ --add ADD Add an entry to the front of the path (do nothing if it is already present in the path)
315
+ --prefix PREFIX Add an entry to the front of the path (or move it there if it is already present)
316
+ --suffix SUFFIX Add an entry to the end of the path (or move it there if it is already present)
317
+ --remove REMOVE Remove an entry from the path (do nothing if it is not present
318
+ --force FORCE Add entries even if a corresponding directory does not exist
319
+ --separator SEPARATOR
320
+ Override the default path separator
321
+
322
+
323
+ ## docker-purge
324
+
325
+ Stop or kill docker instances and/or remove docker images.
326
+
327
+ docker-purge [-h] [--stop] [--kill] [--remove] [--list] [--force] [--debug] [images ...]
328
+
329
+ positional arguments:
330
+ images List of Docker containers (regular expression)
331
+
332
+ options:
333
+ -h, --help show this help message and exit
334
+ --stop, -s Stop Docker instances
335
+ --kill, -k Kill Docker instances
336
+ --remove, -r Remove Docker images
337
+ --list, -l List what would be done without doing it
338
+ --force, -f Forcibly kill/remove instances
339
+ --debug Enable debug output
340
+
341
+ ## ffind
342
+
343
+ Simple file find utility - replaces the `find` command with something that is more human-friendly.
344
+
345
+ ffind [-h] [--path PATH] [--long] [--colour] [--no-colour] [--all] [--zero] [--iname] [--follow] [--git] [--diff] [--regex] [--fullpath] [--human-readable] [--grep GREP] [--abspath]
346
+ [--unquoted] [--quiet] [--invert] [--exec EXEC] [--count] [--count-only] [--type TYPE] [--file] [--dir] [--block] [--char] [--pipe] [--symlink] [--socket] [--any] [--verbose]
347
+ [--debug]
348
+ [patterns ...]
349
+
350
+ positional arguments:
351
+ patterns List of things to search for.
352
+
353
+ options:
354
+ -h, --help show this help message and exit
355
+ --path PATH, -p PATH Search the specified path, rather than the current directory
356
+ --long, -l Output details of any files that match (cannot be used with -0/--zero)
357
+ --colour, -C, --color
358
+ Colourise output even if not outputting to the terminal
359
+ --no-colour, -N, --no-color
360
+ Never colourise output
361
+ --all Search all directories (do not skip .git, and similar control directories)
362
+ --zero, -0 Output results separated by NUL characters
363
+ --iname, -i Perform case-independent search
364
+ --follow, -F Follow symlinks
365
+ --git, -g Only search for objects in the current git repository
366
+ --diff, -D, --diffuse
367
+ Run Diffuse to on all the found objects (files only)
368
+ --regex, -R Use regex matching rather than globbing
369
+ --fullpath, -P Match the entire path, rather than just the filename
370
+ --human-readable, -H When reporting results in long format, use human-readable sizes
371
+ --grep GREP, -G GREP Only report files that contain text that matches the specified regular expression
372
+ --abspath, -A Report the absolute path to matching entities, rather than the relative path
373
+ --unquoted, -U Do not use quotation marks around results containing spaces
374
+ --quiet, -q Do not report permission errors that prevented a complete search
375
+ --invert, -I Invert the wildcard - list files that do not match
376
+ --exec EXEC, -x EXEC Execute the specified command on each match (optionally use ^ to mark the position of the filename)
377
+ --count, -K Report the number of objects found
378
+ --count-only, -c Just report the number of objects found
379
+ --type TYPE, -t TYPE Type of item(s) to include in the results, where b=block device, c=character device, d=directory, p=pipe, f=file, l=symlink, s=socket. Defaults to files and directories
380
+ --file, -f Include files in the results (the default if no other type specified)
381
+ --dir, -d Include directories in the results
382
+ --block Include block devices in the results
383
+ --char Include character devices in the results
384
+ --pipe Include pipes in the results
385
+ --symlink, --link Include symbolic links in the results
386
+ --socket Include sockets in the results
387
+ --any, -a Include all types of item (the default unless specific types specified)
388
+ --verbose, -v Output verbose data
389
+ --debug Output debug data
390
+
391
+ ## linecount
392
+
393
+ Summarise number of files, lines of text and total size of files in a directory tree
394
+
395
+ usage: linecount [-h] [--ext]
396
+
397
+ options:
398
+ -h, --help show this help message and exit
399
+ --ext, -e Identify file type using the file extension (faster but less accurrate)
400
+
401
+ ## py-audit
402
+
403
+ Query api.osv.dev to determine whether a specified version of a particular Python package is subject to known security vulnerabilities
404
+
405
+ py-audit [-h] [requirements ...]
406
+
407
+ positional arguments:
408
+ requirements The requirements file (if not specified, then the script searches for a requirements.txt file)
409
+
410
+ options:
411
+ -h, --help show this help message and exit
412
+
413
+ ## readable
414
+
415
+ Remove 'cruft' from log files to make them easier to read and compare. Can remove times, dates, hashes and has options to remove a lot of the 'noise' that Terraform generates and tidy up the output.
416
+
417
+ readable [-h] [--light] [--dark] [--none] [--tidy] [--strip-blank] [--debug] [--out] [--dir DIR] [--aws] [--terraform] [--replace REPLACE] [--verbose] [--minimal] [--non-minimal]
418
+ [files ...]
419
+
420
+ positional arguments:
421
+ files The files to convert (use stdin/stout if no input files are specified)
422
+
423
+ options:
424
+ -h, --help show this help message and exit
425
+ --light, -l Modify colours for a light background (the default)
426
+ --dark, -d Modify colours for a dark background
427
+ --none, -n Remove all colour codes
428
+ --tidy, -t Remove colour codes and stuff that typically occurs in log files causing diffs, but is of no particular interest (e.g. SHA1 values, times, dates)
429
+ --strip-blank, -s Strip all blank lines
430
+ --debug, -D Replace colours with debug information
431
+ --out, -o Output to standard output rather than overwriting input files
432
+ --dir DIR, -O DIR Store output files in the specified directory (creating it if it doesn't exist)
433
+ --aws, -a Remove AWS resource IDs
434
+ --terraform, -T Clean Terraform plan/apply log files
435
+ --replace REPLACE, -R REPLACE
436
+ Additional regex replacements in the form "REGEX=REPLACEMENT"
437
+ --verbose, -v Output verbose status
438
+ --minimal, -m Remove unnecessary data from the file (e.g. Terraform progress updates (Refreshing..., Reading..., etc.))
439
+ --non-minimal, -M Do not remove unnecessary data from the file (e.g. Terraform progress updates (Refreshing..., Reading..., etc.))
440
+
441
+ ## remdir
442
+
443
+ Recursively delete empty directories
444
+
445
+ remdir [-h] [--dry-run] [--debug] [--verbose] [--ignore IGNORE] [--keep KEEP] dirs [dirs ...]
446
+
447
+ positional arguments:
448
+ dirs Directories to prune
449
+
450
+ options:
451
+ -h, --help show this help message and exit
452
+ --dry-run, -D Dry-run - report what would be done without doing anything
453
+ --debug Output debug information
454
+ --verbose Output verbose information
455
+ --ignore IGNORE, -I IGNORE
456
+ Files to ignore when considering whether a directory is empty
457
+ --keep KEEP, -K KEEP Directories that should be kept even if they are empty
458
+
459
+ ## rmdupe
460
+
461
+ Search for duplicate files.
462
+
463
+ rmdupe [-h] [--debug] [--save SAVE] [--load LOAD] [--script SCRIPT] [--exclude EXCLUDE] [--ignore IGNORE] [path]
464
+
465
+ positional arguments:
466
+ path Path(s) to search for duplicates
467
+
468
+ options:
469
+ -h, --help show this help message and exit
470
+ --debug Debug output
471
+ --save SAVE Save duplicate file list
472
+ --load LOAD Load duplicate file list
473
+ --script SCRIPT Generate a shell script to delete the duplicates
474
+ --exclude EXCLUDE Directories to skip when looking for duplicates
475
+ --ignore IGNORE Wildcards to ignore when looking for duplicates
476
+
477
+ ## rpylint
478
+
479
+ Run pylint on all the Python source files in a directory tree
480
+
481
+ usage: rpylint [-h] [paths ...]
482
+
483
+ positional arguments:
484
+ paths List of files or paths to lint
485
+
486
+ options:
487
+ -h, --help show this help message and exit
488
+
489
+ ## s3-sync
490
+
491
+ Synchronise files from S3 to local storage.
492
+
493
+ ## strreplace
494
+
495
+ Simple search and replace utility for those times when trying to escape characters in a regexp to use sed is more hassle than it is worth.
496
+
497
+ strreplace [-h] [--inplace] search replace [infile] [outfile]
498
+
499
+ positional arguments:
500
+ search Search text
501
+ replace Replacment text
502
+ infile Input file
503
+ outfile Output file
504
+
505
+ options:
506
+ -h, --help show this help message and exit
507
+ --inplace, -i Do an in-place search and replace on the input file
508
+
509
+ ## tfm
510
+
511
+ Console-based file-manager, similar to Midnight Commander but aiming to be better.
512
+
513
+ usage: tfm [-h] [--pudb]
514
+
515
+ options:
516
+ -h, --help show this help message and exit
517
+ --pudb Invoke pudb debugger over Telnet
518
+
519
+ ## tfparse
520
+
521
+ Read JSON Terraform output and convert back to human-readable text
522
+
523
+ This allows multiple errors and warnings to be reported as there's no way of doing this directly from Terraform
524
+
525
+ usage: tfparse [-h] [--abspath] [infile ...]
526
+
527
+ positional arguments:
528
+ infile The error file (defaults to standard input if not specified)
529
+
530
+ options:
531
+ -h, --help show this help message and exit
532
+ --abspath, -a Output absolute file paths
533
+
534
+ ## trimpath
535
+
536
+ Intelligently trim a path to fit a given width (used by gitprompt)
537
+
538
+ ## venv-create
539
+
540
+ Create a script to create/update a virtual environment and run a python script in it.
541
+
542
+ usage: venv-create [-h] name
543
+
544
+ positional arguments:
545
+ name Name of the script to create
546
+
547
+ options:
548
+ -h, --help show this help message and exit
549
+
550
+ ## xchmod
551
+
552
+ Command to run chmod only on files that need it (only modifies files that don't have the required permissions already).
553
+
554
+ usage: xchmod [-h] [--debug] [--verbose] [--recursive] mode paths [paths ...]
555
+
556
+ positional arguments:
557
+ mode Mode to set
558
+ paths List of directory paths to search
559
+
560
+ options:
561
+ -h, --help show this help message and exit
562
+ --debug Output the list of files (if any) that need to be made publically writeable
563
+ --verbose List files as they are updated
564
+ --recursive, -R Operate recursively
565
+
566
+ ## yamlcheck
567
+
568
+ YAML validator - checks that a file is valid YAML (use yamllint to verify that it is nicely-formatted YAML).
569
+
570
+ usage: yamlcheck [-h] [--dump] [--block] [--flow] [--hiera] files [files ...]
571
+
572
+ positional arguments:
573
+ files YAML source file
574
+
575
+ options:
576
+ -h, --help show this help message and exit
577
+ --dump Dump the YAML data after parsing it
578
+ --block Force block style when dumping the YAML data
579
+ --flow Force flow style when dumping the YAML data
580
+ --hiera Process the file as Puppet Hiera data
581
+
582
+ # Obsolescent Utilities
583
+
584
+ These will be moved to the skilleter-extras package in due course.
585
+
586
+ ## borger
587
+
588
+ Wrapper for the borg backup utility to make it easier to use with a fixed set of options.
589
+
590
+ ## consolecolours
591
+
592
+ Display all available colours in the console.
593
+
594
+ ## diskspacecheck
595
+
596
+ Check how much free space is available on all filesystems, ignoring read-only filesystems, /dev and tmpfs.
597
+
598
+ Issue a warning if any are above 90% used.
599
+
600
+ ## gphotosync
601
+
602
+ Utility for syncing photos from Google Photos to local storage
603
+
604
+ ## moviemover
605
+
606
+ Search for files matching a wildcard in a directory tree and move them to an equivalent location in a different tree
607
+
608
+ ## phototidier
609
+
610
+ Perform various tidying operations on a directory full of photos:
611
+
612
+ * Remove leading '$' and '_' from filenames
613
+ * Move files in hidden directories up 1 level
614
+ * If the EXIF data in a photo indicates that it was taken on date that doesn't match the name of the directory it is stored in (in YYYY-MM-DD format) then it is moved to the correct directory, creating it if necessary.
615
+
616
+ All move/rename operations are carried out safely with the file being moved having
617
+ a numeric suffix added to the name if it conflicts with an existing file.
618
+
619
+ ## photodupe
620
+
621
+ Search for duplicate images in a directory tree
622
+
623
+ ## splitpics
624
+
625
+ Copy a directory full of pictures to a destination, creating subdiretories with a fixed number of pictures in each in the destination directory for use with FAT filesystems and digital photo frames.
626
+
627
+ ## sysmon
628
+
629
+ Simple console system monitor
630
+
631
+ ## window-rename
632
+
633
+ Monitor window titles and rename them to fit an alphabetical grouping in 'Appname - Document' format.
634
+
635
+ # Obsolescent Commands
636
+
637
+ These commands will probably be retired in future versions of Thingy
638
+
639
+ ## ggit
640
+
641
+ Run a git command in all working trees under the current directory (superceded by multigit).
642
+
643
+ ## ggrep
644
+
645
+ Run 'git grep' in all repos under the current directory (superceded by multigit).
646
+
647
+ ## GitLab Commands
648
+
649
+ ### git mr
650
+
651
+ Push a feature branch to GitLab and create a merge request
652
+
653
+ ### gl
654
+
655
+ Command line for GitLab