##// END OF EJS Templates
win32: add a method to trigger the Crypto API to complete a certificate chain...
win32: add a method to trigger the Crypto API to complete a certificate chain I started a thread[1] on the mailing list awhile ago, but the short version is that Windows doesn't ship with a full list of certificates[2]. Even if the server sends the whole chain, if Windows doesn't have the appropriate certificate pre-installed in its "Third-Party Root Certification Authorities" store, connections mysteriously fail with: abort: error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) Windows expects the application to call the methods invoked here as part of the certificate verification, triggering a call out to Windows update if necessary, to complete the trust chain. The python bug to add this support[3] hasn't had any recent activity, and isn't targeting py27 anyway. The only work around that I could find (besides figuring out the certificate and walking through the import wizard) is to browse to the site in Internet Explorer. Opening the page with FireFox or Chrome didn't work. That's a pretty obscure way to fix a pretty obscure problem. We go to great lengths to demystify various SSL errors, but this case is clearly lacking. Let's try to make things easier to diagnose and fix. When I had trouble figuring out how to get ctypes to work with all of the API pointers, I found that there are other python projects[4] using this API to achieve the same thing. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-April/096501.html [2] https://support.microsoft.com/en-us/help/931125/how-to-get-a-root-certificate-update-for-windows [3] https://bugs.python.org/issue20916 [4] https://github.com/nvaccess/nvda/blob/3b86bce2066b1934df14b96f2e83369900860ecf/source/updateCheck.py#L511

File last commit:

r33274:68f3e819 default
r33492:14af0439 default
Show More
test-completion.t
381 lines | 8.9 KiB | text/troff | Tads3Lexer
Show all commands except debug commands
$ hg debugcomplete
add
addremove
annotate
archive
backout
bisect
bookmarks
branch
branches
bundle
cat
clone
commit
config
copy
diff
export
files
forget
graft
grep
heads
help
identify
import
incoming
init
locate
log
manifest
merge
outgoing
parents
paths
phase
pull
push
recover
remove
rename
resolve
revert
rollback
root
serve
status
summary
tag
tags
tip
unbundle
update
verify
version
Show all commands that start with "a"
$ hg debugcomplete a
add
addremove
annotate
archive
Do not show debug commands if there are other candidates
$ hg debugcomplete d
diff
Show debug commands if there are no other candidates
$ hg debugcomplete debug
debugancestor
debugapplystreamclonebundle
debugbuilddag
debugbundle
debugcheckstate
debugcolor
debugcommands
debugcomplete
debugconfig
debugcreatestreamclonebundle
debugdag
debugdata
debugdate
debugdeltachain
debugdirstate
debugdiscovery
debugextensions
debugfileset
debugfsinfo
debuggetbundle
debugignore
debugindex
debugindexdot
debuginstall
debugknown
debuglabelcomplete
debuglocks
debugmergestate
debugnamecomplete
debugobsolete
debugpathcomplete
debugpickmergetool
debugpushkey
debugpvec
debugrebuilddirstate
debugrebuildfncache
debugrename
debugrevlog
debugrevspec
debugsetparents
debugsub
debugsuccessorssets
debugtemplate
debugupdatecaches
debugupgraderepo
debugwalk
debugwireargs
Do not show the alias of a debug command if there are other candidates
(this should hide rawcommit)
$ hg debugcomplete r
recover
remove
rename
resolve
revert
rollback
root
Show the alias of a debug command if there are no other candidates
$ hg debugcomplete rawc
Show the global options
$ hg debugcomplete --options | sort
--color
--config
--cwd
--debug
--debugger
--encoding
--encodingmode
--help
--hidden
--noninteractive
--pager
--profile
--quiet
--repository
--time
--traceback
--verbose
--version
-R
-h
-q
-v
-y
Show the options for the "serve" command
$ hg debugcomplete --options serve | sort
--accesslog
--address
--certificate
--cmdserver
--color
--config
--cwd
--daemon
--daemon-postexec
--debug
--debugger
--encoding
--encodingmode
--errorlog
--help
--hidden
--ipv6
--name
--noninteractive
--pager
--pid-file
--port
--prefix
--profile
--quiet
--repository
--stdio
--style
--subrepos
--templates
--time
--traceback
--verbose
--version
--web-conf
-6
-A
-E
-R
-S
-a
-d
-h
-n
-p
-q
-t
-v
-y
Show an error if we use --options with an ambiguous abbreviation
$ hg debugcomplete --options s
hg: command 's' is ambiguous:
serve showconfig status summary
[255]
Show all commands + options
$ hg debugcommands
add: include, exclude, subrepos, dry-run
annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, ignore-all-space, ignore-space-change, ignore-blank-lines, include, exclude, template
clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd, insecure
commit: addremove, close-branch, amend, secret, edit, interactive, include, exclude, message, logfile, date, user, subrepos
diff: rev, change, text, git, binary, nodates, noprefix, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, root, include, exclude, subrepos
export: output, switch-parent, rev, text, git, binary, nodates
forget: include, exclude
init: ssh, remotecmd, insecure
log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, branch, prune, patch, git, limit, no-merges, stat, graph, style, template, include, exclude
merge: force, rev, preview, tool
pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure
push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
remove: after, force, subrepos, include, exclude
serve: accesslog, daemon, daemon-postexec, errorlog, port, address, prefix, name, web-conf, webdir-conf, pid-file, stdio, cmdserver, templates, style, ipv6, certificate, subrepos
status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, change, include, exclude, subrepos, template
summary: remote
update: clean, check, merge, date, rev, tool
addremove: similarity, subrepos, include, exclude, dry-run
archive: no-decode, prefix, rev, type, subrepos, include, exclude
backout: merge, commit, no-commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user
bisect: reset, good, bad, skip, extend, command, noupdate
bookmarks: force, rev, delete, rename, inactive, template
branch: force, clean
branches: active, closed, template
bundle: force, rev, branch, base, all, type, ssh, remotecmd, insecure
cat: output, rev, decode, include, exclude, template
config: untrusted, edit, local, global, template
copy: after, force, include, exclude, dry-run
debugancestor:
debugapplystreamclonebundle:
debugbuilddag: mergeable-file, overwritten-file, new-file
debugbundle: all, part-type, spec
debugcheckstate:
debugcolor: style
debugcommands:
debugcomplete: options
debugcreatestreamclonebundle:
debugdag: tags, branches, dots, spaces
debugdata: changelog, manifest, dir
debugdate: extended
debugdeltachain: changelog, manifest, dir, template
debugdirstate: nodates, datesort
debugdiscovery: old, nonheads, ssh, remotecmd, insecure
debugextensions: template
debugfileset: rev
debugfsinfo:
debuggetbundle: head, common, type
debugignore:
debugindex: changelog, manifest, dir, format
debugindexdot: changelog, manifest, dir
debuginstall: template
debugknown:
debuglabelcomplete:
debuglocks: force-lock, force-wlock
debugmergestate:
debugnamecomplete:
debugobsolete: flags, record-parents, rev, exclusive, index, delete, date, user, template
debugpathcomplete: full, normal, added, removed
debugpickmergetool: rev, changedelete, include, exclude, tool
debugpushkey:
debugpvec:
debugrebuilddirstate: rev, minimal
debugrebuildfncache:
debugrename: rev
debugrevlog: changelog, manifest, dir, dump
debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized
debugsetparents:
debugsub: rev
debugsuccessorssets: closest
debugtemplate: rev, define
debugupdatecaches:
debugupgraderepo: optimize, run
debugwalk: include, exclude
debugwireargs: three, four, five, ssh, remotecmd, insecure
files: rev, print0, include, exclude, template, subrepos
graft: rev, continue, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
grep: print0, all, text, follow, ignore-case, files-with-matches, line-number, rev, user, date, template, include, exclude
heads: rev, topo, active, closed, style, template
help: extension, command, keyword, system
identify: rev, num, id, branch, tags, bookmarks, ssh, remotecmd, insecure, template
import: strip, base, edit, force, no-commit, bypass, partial, exact, prefix, import-branch, message, logfile, date, user, similarity
incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
locate: rev, print0, fullpath, include, exclude
manifest: rev, all, template
outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
parents: rev, style, template
paths: template
phase: public, draft, secret, force, rev
recover:
rename: after, force, include, exclude, dry-run
resolve: all, list, mark, unmark, no-status, tool, include, exclude, template
revert: all, date, rev, no-backup, interactive, include, exclude, dry-run
rollback: dry-run, force
root:
tag: force, local, rev, remove, edit, message, date, user
tags: template
tip: patch, git, style, template
unbundle: update
verify:
version: template
$ hg init a
$ cd a
$ echo fee > fee
$ hg ci -q -Amfee
$ hg tag fee
$ mkdir fie
$ echo dead > fie/dead
$ echo live > fie/live
$ hg bookmark fo
$ hg branch -q fie
$ hg ci -q -Amfie
$ echo fo > fo
$ hg branch -qf default
$ hg ci -q -Amfo
$ echo Fum > Fum
$ hg ci -q -AmFum
$ hg bookmark Fum
Test debugpathcomplete
$ hg debugpathcomplete f
fee
fie
fo
$ hg debugpathcomplete -f f
fee
fie/dead
fie/live
fo
$ hg rm Fum
$ hg debugpathcomplete -r F
Fum
Test debugnamecomplete
$ hg debugnamecomplete
Fum
default
fee
fie
fo
tip
$ hg debugnamecomplete f
fee
fie
fo
Test debuglabelcomplete, a deprecated name for debugnamecomplete that is still
used for completions in some shells.
$ hg debuglabelcomplete
Fum
default
fee
fie
fo
tip
$ hg debuglabelcomplete f
fee
fie
fo