Fallback created for git commands not standard handled by this module
This commit is contained in:
+79
-11
@@ -16,19 +16,39 @@ read credentials or other answers from the terminal.
|
||||
@section{Command interface}
|
||||
|
||||
@defform[(git command argument ...)]{
|
||||
Runs a registered Git @racket[command]. The arguments are passed to the command.
|
||||
Registered command symbols are @racket['init], @racket['status], @racket['add],
|
||||
@racket['commit], @racket['push], @racket['pull], @racket['fetch],
|
||||
@racket['config], @racket['branch], @racket['remote], @racket['stash], @racket['restore], @racket['reset], @racket['revert], @racket['rebase], @racket['merge], @racket['cherry-pick], @racket['mergetool], @racket['switch], @racket['clone],
|
||||
@racket['tag],
|
||||
@racket['log], @racket['rev-list], @racket['diff],
|
||||
@racket['show], @racket['grep], @racket['help], @racket['version], and
|
||||
Runs a Git @racket[command]. When the command has a registered git-cli wrapper,
|
||||
that wrapper is used. Registered wrappers can provide structured Racket results,
|
||||
argument handling, or other command-specific behavior.
|
||||
|
||||
Registered command symbols include @racket['init], @racket['status],
|
||||
@racket['add], @racket['commit], @racket['push], @racket['pull],
|
||||
@racket['fetch], @racket['config], @racket['branch], @racket['remote],
|
||||
@racket['stash], @racket['restore], @racket['reset], @racket['revert],
|
||||
@racket['rebase], @racket['merge], @racket['cherry-pick],
|
||||
@racket['mergetool], @racket['switch], @racket['clone], @racket['tag],
|
||||
@racket['log], @racket['rev-list], @racket['diff], @racket['show],
|
||||
@racket['grep], @racket['help], @racket['version], and
|
||||
@racket['new-version].
|
||||
|
||||
Most registered commands invoke the Git command with the same name. Some
|
||||
commands process the result into a Racket value, such as @racket['status],
|
||||
@racket['grep], @racket['log] with @tt{--list}, @racket['version], and
|
||||
@racket['new-version].
|
||||
When no wrapper is registered, the command and arguments are passed directly to
|
||||
the installed Git executable through @racket[run-git]. The result is handled by
|
||||
the same standard result processing used by ordinary pass-through wrappers:
|
||||
normal Git output is displayed and a successful command returns @racket[#t];
|
||||
a non-zero exit status raises a git-cli error.
|
||||
|
||||
This makes dedicated wrappers optional for Git commands where git-cli does not
|
||||
add useful behavior.
|
||||
|
||||
@racketblock[
|
||||
(git 'blame "main.rkt")
|
||||
(git* clean -n)
|
||||
(git* worktree list)
|
||||
(git* archive --format=zip HEAD)
|
||||
]
|
||||
|
||||
Some registered commands process the result into a Racket value, such as
|
||||
@racket['status], @racket['grep], @racket['log] with @tt{--list},
|
||||
@racket['version], and @racket['new-version].
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +69,9 @@ converted from its literal syntax.
|
||||
(git* switch (eval branch))
|
||||
]
|
||||
|
||||
Because @racket[git] falls back to direct Git execution for commands without a
|
||||
registered wrapper, @racket[git*] can also be used with those commands.
|
||||
|
||||
@racket[gt] is retained as a compatibility alias for @racket[git*].
|
||||
}
|
||||
|
||||
@@ -183,6 +206,7 @@ The available editors can also be returned without prompting.
|
||||
|
||||
@racketblock[
|
||||
(git* config editor --list)
|
||||
(git* config editor --downloads)
|
||||
]
|
||||
|
||||
Each item contains the short editor name, description, command and a boolean
|
||||
@@ -193,6 +217,7 @@ be restored.
|
||||
|
||||
@racketblock[
|
||||
(git* config editor vscode)
|
||||
(git* config editor notepad++)
|
||||
(git* config editor auto)
|
||||
]
|
||||
|
||||
@@ -216,6 +241,49 @@ detected editor and returns its command. An exception is raised when no
|
||||
well-known GUI editor can be found.
|
||||
}
|
||||
|
||||
@defproc[(editor-downloads) list?]{
|
||||
Returns official download pointers for optional GUI editors as
|
||||
@racket[(name description url)] items. No network request is performed.
|
||||
}
|
||||
|
||||
On Windows, Notepad++ is detected both on @tt{PATH} and in the normal Program
|
||||
Files locations. git-cli invokes it with @tt{-multiInst -nosession}.
|
||||
|
||||
@subsection{git-cli merge tool configuration}
|
||||
|
||||
The @racket[git-config] procedure also recognizes the git-cli-specific
|
||||
@tt{mergetool} operation.
|
||||
|
||||
@racketblock[
|
||||
(git* config mergetool)
|
||||
(git* config mergetool --list)
|
||||
(git* config mergetool --downloads)
|
||||
(git* config mergetool winmerge)
|
||||
(git* config mergetool auto)
|
||||
]
|
||||
|
||||
With no additional argument an interactive selection is displayed.
|
||||
@tt{--list} returns @racket[(name description path current?)] items and
|
||||
@tt{--downloads} returns official download pointers. A detected merge tool can
|
||||
be selected by its short Git tool name. @tt{auto} clears the explicit git-cli
|
||||
selection and restores automatic detection.
|
||||
|
||||
@defproc[(find-mergetools) list?]{
|
||||
Returns all well-known graphical merge tools found on the current platform as
|
||||
@racket[(name description path)] items.
|
||||
}
|
||||
|
||||
@defproc[(mergetool-downloads) list?]{
|
||||
Returns official download pointers for optional merge tools as
|
||||
@racket[(name description url)] items. No network request is performed.
|
||||
}
|
||||
|
||||
@defproc[(set-mergetool-auto!) string?]{
|
||||
Clears the explicit git-cli merge tool selection and returns the first
|
||||
automatically detected Git merge tool name. An exception is raised when no
|
||||
well-known merge tool can be found.
|
||||
}
|
||||
|
||||
@defproc[(git-branch [argument any/c] ...) (or/c boolean? list?)]{
|
||||
Runs @tt{git branch} with the supplied arguments. This can be used to list,
|
||||
create, rename, or delete branches according to the options supported by the
|
||||
|
||||
Reference in New Issue
Block a user