ssh: add capability detection at startup
Because older servers don't return any output for unknown commands,
it's tricky to add new commands. The approach is this: we add a
"hello" command that reports any interesting capabilities (and other
things that might be of interest in the future). To detect whether
this new command is supported, we issue both it and our startup
detection command ("between") at the beginning of a connection.
adding a
adding b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from ../b
searching for changes
warning: repository is unrelated
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
%% -R/--repository
changeset: 0:8580ff50825a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: a
changeset: 0:b6c483daf290
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: b
%% abbrev of long option
changeset: 1:b6c483daf290
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: b
%% --cwd
changeset: 0:8580ff50825a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: a
%% -y/--noninteractive - just be sure it is parsed
0:8580ff50825a
0:8580ff50825a
%% -q/--quiet
0:8580ff50825a
0:b6c483daf290
0:8580ff50825a
1:b6c483daf290
%% -v/--verbose
changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files: b
description:
b
changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files: a
description:
a
changeset: 0:b6c483daf2907ce5825c0bb50f5716226281cc1a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files: b
description:
b
%% --config
quuxfoo
abort: malformed --config option:
abort: malformed --config option: a.b
abort: malformed --config option: a
abort: malformed --config option: a.=
abort: malformed --config option: .b=
%% --debug
changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a
tag: tip
parent: -1:0000000000000000000000000000000000000000
parent: -1:0000000000000000000000000000000000000000
manifest: 1:23226e7a252cacdc2d99e4fbdc3653441056de49
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files+: b
description:
b
changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab
parent: -1:0000000000000000000000000000000000000000
parent: -1:0000000000000000000000000000000000000000
manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files+: a
description:
a
%% --traceback
%% --time
Time: real x.x secs (user x.x+x.x sys x.x+x.x)
%% --version
Mercurial Distributed SCM (version xxx)
%% -h/--help
Mercurial Distributed SCM
list of commands (use "hg help -v" to show aliases and global options):
add add the specified files on the next commit
annotate show changeset information per file line
archive create unversioned archive of a repository revision
backout reverse effect of earlier changeset
bundle create a changegroup file
cat output the latest or given revisions of files
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
copy mark files as copied for the next commit
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
grep search for a pattern in specified files and revisions
heads show current repository heads
help show help for a given command or all commands
identify print information about the working copy
import import an ordered set of patches
incoming show new changesets found in source
init create a new repository in the given directory
locate locate files matching specific patterns
log show revision history of entire repository or files
manifest output the latest or given revision of the project manifest
merge Merge working directory with another revision
outgoing show changesets not found in destination
parents show the parents of the working dir or revision
paths show definition of symbolic path names
pull pull changes from the specified source
push push changes to the specified destination
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
revert revert files or dirs to their states as of some revision
rollback roll back the last transaction in this repository
root print the root (top) of the current working dir
serve export the repository via HTTP
status show changed files in the working directory
tag add a tag for the current tip or a given revision
tags list repository tags
tip show the tip revision
unbundle apply a changegroup file
update update or merge working directory
verify verify the integrity of the repository
version output version and copyright information
Mercurial Distributed SCM
list of commands (use "hg help -v" to show aliases and global options):
add add the specified files on the next commit
annotate show changeset information per file line
archive create unversioned archive of a repository revision
backout reverse effect of earlier changeset
bundle create a changegroup file
cat output the latest or given revisions of files
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
copy mark files as copied for the next commit
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
grep search for a pattern in specified files and revisions
heads show current repository heads
help show help for a given command or all commands
identify print information about the working copy
import import an ordered set of patches
incoming show new changesets found in source
init create a new repository in the given directory
locate locate files matching specific patterns
log show revision history of entire repository or files
manifest output the latest or given revision of the project manifest
merge Merge working directory with another revision
outgoing show changesets not found in destination
parents show the parents of the working dir or revision
paths show definition of symbolic path names
pull pull changes from the specified source
push push changes to the specified destination
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
revert revert files or dirs to their states as of some revision
rollback roll back the last transaction in this repository
root print the root (top) of the current working dir
serve export the repository via HTTP
status show changed files in the working directory
tag add a tag for the current tip or a given revision
tags list repository tags
tip show the tip revision
unbundle apply a changegroup file
update update or merge working directory
verify verify the integrity of the repository
version output version and copyright information
%% not tested: --debugger