Skip to content

Releases: coldsofttech/CommitRocket

Release list

v0.1.2

Choose a tag to compare

@coldsofttech coldsofttech released this 25 Oct 10:17
5bfd994

CommitRocket 0.1.2

This release fixes a problem that could leave your large files unusable after
using Git LFS, and it includes the fixes and security improvements from 0.1.1.
Upgrading from 0.1.0 is recommended.

Highlights

Large files now stay usable after --use-lfs

Previously, --use-lfs stored the LFS settings only for the duration of the run.
If you later pulled, reset, switched branches or cloned the repository, your
videos and other big files could turn into tiny text placeholders, and apps
reported them as corrupt or having an invalid extension.

Now --use-lfs saves the LFS rules in the repository (in .gitattributes, one
rule per file type such as *.mp4), so every checkout and clone gets the real files.

  • This is the default. Nothing extra is needed.
  • All files of a covered type go through LFS from then on, including small and
    future ones.
  • To get the old behaviour, use --no-lfs-commit-rules. Checkouts and clones
    will then contain placeholders instead of the real files.
  • --lfs-commit-rules is still accepted and does nothing extra.
  • Make sure .gitattributes has no uncommitted changes before you run.

Already affected? If your files are already placeholders, add the rules for
your file types to .gitattributes (for example
*.mp4 filter=lfs diff=lfs merge=lfs -text), then run
git lfs install --local and git lfs pull to restore the real files.

Fixed (0.1.1)

  • Runs with thousands of files no longer fail on Windows with
    "The filename or extension is too long".

Security (0.1.1)

  • A settings file found inside a repository can no longer turn on --force,
    change the remote or branch, write reports or logs, or read pattern files.
    Use --config to set these.
  • File names containing characters like [ or * are matched literally, so
    they no longer pull other files into a batch.
  • --remote and --branch values that look like Git options are rejected.
  • Passwords in remote URLs are hidden in logs, errors and reports. Log and
    report files are readable only by you.
  • File names containing line breaks are refused when creating LFS rules.
  • Square brackets in file names and Git messages no longer break or hide output.

Other changes

  • Releases are published to PyPI using trusted publishing instead of a stored
    token.
  • The PyPI page now shows keywords, categories and project links.
  • Added issue and pull request templates, a security policy, a code of conduct
    and contributing guidelines.
  • Dependabot keeps dependencies, GitHub Actions and pre-commit hooks up to date.

Upgrading

pip install --upgrade commitrocket

What's Changed

  • Commit LFS rules by default with --use-lfs (0.1.2) by @coldsofttech in #4

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@coldsofttech coldsofttech released this 24 Oct 13:54
aaf7ff5

CommitRocket v0.1.1

CommitRocket splits a large pile of changes into size-limited batches, commits each batch, and pushes as it goes, with live progress. It is built for first uploads of big folders, slow or unreliable connections, and repositories with large files.

This is the first public release. It includes everything from 0.1.0 (the initial package, never published separately) and 0.1.1.

Install

pip install commitrocket

Requires Python 3.11+ and Git. Git LFS is only needed for --use-lfs, and CommitRocket can install it for you.

commitrocket --repo path/to/repo --message "Add assets"
commitrocket doctor      # check your setup first

Highlights

  • Batched commits and pushes, so a failure costs one batch, not everything.
  • Git LFS for large files, set up and removed again automatically, without committing any LFS config.
  • Safe to interrupt: run the same command again and it resumes where it stopped.
  • --dry-run shows every planned batch and commit message before anything changes.
  • Hardened against untrusted repositories, with a security review done before release.

Features

Batching and progress

  • Size-based batches with --limit-mib and --max-mib; files over the maximum are skipped and listed at the end.
  • Three ways to pick files: deterministic (default, packs tightly), sequential (strict order) and soft (may pass the limit).
  • Live progress with elapsed time and an ETA based on your real upload speed.
  • Commit messages as <message> #N, or your own --message-template with {n}, {batch}, {files}, {size}, {first} and {date}.

Large files and Git LFS

  • Files over 100 MiB are detected before anything is committed, with a clear hint to use --use-lfs.
  • --use-lfs stores large files with Git LFS using local-only rules, then cleans up. Choose the cut-off with --lfs-threshold-mib (0 sends every file through LFS).
  • --lfs-commit-rules commits per-extension rules so clones receive the real files.
  • --lfs-batch-mib and --lfs-threads upload several LFS files at once.
  • LFS files are checked to be pointers before upload, and the LFS hooks are kept if a run fails with unpushed LFS commits.

Reliability

  • Failed pushes are retried with growing waits (--retries, default 3); host rejections such as file-size limits are never retried.
  • Every push is verified against the remote.
  • Interrupted or failed runs (including Ctrl+C) resume automatically, including files left staged mid-batch.
  • Leftover commits that contain files over 100 MiB are detected at startup, with the exact command to clean them up.
  • --compression-threads and --post-buffer-mib help with slow or failing large pushes; both are repository-local and restored afterwards.

Control

  • Choose files with .gitignore-style patterns: --include, --exclude, --include-from, --exclude-from, plus an automatic .commitrocketignore.
  • --remote and --branch choose where to push; --no-push only commits.
  • Save your options in commitrocket.toml or [tool.commitrocket] in pyproject.toml.

Automation and diagnostics

  • --report out.json writes a machine-readable summary of every run, including failed and dry runs.
  • --notify (desktop notification on Windows, macOS and Linux) and --notify-webhook (Slack, Discord, Teams, ntfy or your own endpoint) tell you when a long run ends.
  • commitrocket doctor checks Git, git-lfs, your config, the log folder, the remote and the repository.
  • Every run writes its own log file in the system's standard log folder (--level, --log-file).

Security

  • A config file found inside a repository can no longer turn on force, set the remote or branch, write reports or logs, send a webhook, or read pattern files. Those settings work only from a file you pass with --config or on the command line.
  • File names with characters like [ or * are treated literally and can no longer pull other files into a batch.
  • --remote and --branch values that look like Git options are rejected.
  • Credentials inside remote URLs are hidden in logs, errors, reports and notifications, and log and report files are readable only by you.
  • File names with line breaks are refused when creating LFS rules.
  • Square brackets in file names and Git messages no longer break or hide output.

Please report vulnerabilities privately, as described in SECURITY.md.

Fixes

  • Batches with thousands of files no longer fail on Windows with "The filename or extension is too long".
  • A --log-file or --report inside the repository is no longer committed, which previously made a run commit its own log forever.

Project

  • Issue and pull request templates, a security policy, a code of conduct and contributing guidelines.
  • Dependabot keeps dependencies, GitHub Actions and pre-commit hooks up to date.
  • CI runs lint and tests on Ubuntu (Python 3.11 to 3.15), Windows and macOS; releases publish to PyPI from version tags.

Notes for upgrading

  • If you keep remote, branch, force, report, log-file, notify-webhook, include-from or exclude-from in a repository's commitrocket.toml, you will now see a warning and they will be ignored. Pass the file explicitly with --config commitrocket.toml to use them.
  • --repo now defaults to the current folder.
  • --no-push cannot be combined with --use-lfs, because the large files would stay local while a later plain git push would publish pointers without their data.

Full documentation: README · Changelog: CHANGELOG.md

What's Changed

  • Add commitrocket package with batching, LFS, resume and CI by @coldsofttech in #1
  • Add community files, security hardening and Windows batch fix (0.1.1) by @coldsofttech in #2
  • chore(ci): bump the github-actions group with 3 updates by @dependabot[bot] in #3

New Contributors

Full Changelog: https://github.com/coldsofttech/CommitRocket/commits/v0.1.1