Skip to main content

Git to Sapling CLI shim

Project description

gitsl

CI PyPI Python

Git to Sapling CLI shim - translates git commands to their Sapling (sl) equivalents.

Installation

pip install gitsl

Requires Python 3.8 or later. Requires Sapling to be installed and available as sl.

Quick Start

Use familiar git commands in any Sapling repository:

# Check status (outputs git-compatible format)
gitsl status --porcelain

# View recent commits
gitsl log --oneline -5

# Stage and commit changes
gitsl add -A
gitsl commit -m "Your message"

gitsl translates these to equivalent Sapling commands automatically.

Supported Commands

Command Status Translation
init Full sl init
status Full sl status with output transformation
log Full sl log with flag translation
diff Full sl diff
add Full sl add / sl addremove
commit Full sl commit
rev-parse Partial Only --short HEAD via sl whereami

Commands not listed are unsupported.

Command Reference

git status

Flag Supported Behavior
(none) Yes Passthrough to sl status
--porcelain Yes Output transformed to git XY format
--short / -s Yes Output transformed to git XY format
other flags Partial Passed through to sl

Status code translation:

Sapling Git Meaning
M M Modified in working tree
A A Added (staged)
R D Removed (staged deletion)
? ?? Untracked
! D Missing (deleted from disk)

git log

Flag Supported Translation
(none) Yes sl log
--oneline Yes sl log -T "{node|short} {desc|firstline}\n"
-N (e.g., -5) Yes sl log -l N
-n N Yes sl log -l N
-nN Yes sl log -l N
--max-count=N Yes sl log -l N
--format No Not implemented
--graph No Not implemented

git add

Flag Supported Translation
<files> Yes sl add <files>
-A / --all Yes sl addremove
-u / --update Yes Marks deleted files with sl remove --mark
-p / --patch No Not implemented

git diff, git init, git commit

All flags passed through to sl equivalents unchanged.

git rev-parse

Flag Supported Translation
--short HEAD Yes sl whereami (truncated to 7 chars)
other variants No Returns error

Unsupported Commands

Commands not listed above will print a message to stderr and exit with code 0:

gitsl: unsupported command: git checkout main

This exit behavior prevents gitsl from breaking tools that expect git commands to succeed.

For unsupported operations, use Sapling commands directly. See the Sapling Git Cheat Sheet for translations.

Why Some Commands Are Unsupported

Command Reason
checkout Sapling uses goto with different semantics
branch Sapling uses bookmarks, different model
merge Sapling prefers rebase workflow
rebase Complex flag translation, use sl rebase directly
stash Use sl shelve / sl unshelve directly
push / pull / fetch Remote operations differ significantly

Debug Mode

Set GITSL_DEBUG=1 to see what command would be executed without running it:

$ GITSL_DEBUG=1 gitsl status --porcelain
[DEBUG] Command: status
[DEBUG] Args: ['--porcelain']
[DEBUG] Would execute: sl status

How It Works

gitsl intercepts git commands and translates them to Sapling equivalents:

  1. Parses the git command and flags
  2. Translates to corresponding sl command
  3. Transforms output to git-compatible format where needed (status, log)
  4. Returns sl's exit code

For commands without translation, gitsl prints a message to stderr and exits 0.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gitsl-1.0.1.tar.gz (209.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gitsl-1.0.1-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file gitsl-1.0.1.tar.gz.

File metadata

  • Download URL: gitsl-1.0.1.tar.gz
  • Upload date:
  • Size: 209.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gitsl-1.0.1.tar.gz
Algorithm Hash digest
SHA256 518f99cb5e5f79acea52d73edd8b1a7cb97cce5a27d4ee46b3535572d2860202
MD5 4e808d0566192b945b2b3b08ea4f63bb
BLAKE2b-256 fc3ac6da3c4337647e7aced6684171aca2c78ab28b556d7a45778f8755d2508e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitsl-1.0.1.tar.gz:

Publisher: release.yml on VladimirMakaev/gitsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gitsl-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: gitsl-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gitsl-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2aba05190dbc439e5029fb12c6d92e4a88955a79551d64b44fe5d917d91fabda
MD5 0e028c1f4a286cd15795fdf4213935c8
BLAKE2b-256 afb6c33188840f3e091a788c3b37af76214bfc9552013f26e4882f713313275d

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitsl-1.0.1-py3-none-any.whl:

Publisher: release.yml on VladimirMakaev/gitsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page