.appveyor.yml .circleci/Dockerfile.centos .circleci/Dockerfile.debian .circleci/Dockerfile.fedora .circleci/Dockerfile.pypy .circleci/Dockerfile.ubuntu .circleci/config.yml .circleci/create-virtualenv.sh .circleci/fix-permissions.sh .circleci/populate-wheelhouse.sh .circleci/prepare-image.sh .circleci/run-build-locally.sh .circleci/run-tests.sh .circleci/secret-env-cipher .circleci/setup-virtualenv.sh .coveragerc .github/CONTRIBUTING.rst .github/workflows/ci.yml .gitignore .lgtm.yml COPYING.GPL COPYING.TGPPL.rst CREDITS Dockerfile Dockerfile.dev MANIFEST.in Makefile NEWS.rst README.rst Tahoe.home docker-compose.yml docs/CODE_OF_CONDUCT.md docs/INSTALL.rst docs/Makefile docs/Makefile-old docs/OS-X.rst docs/README.md docs/_static/.empty docs/_templates/.empty docs/about.rst docs/accepting-donations.rst docs/anonymity-configuration.rst docs/architecture.rst docs/aspiration-contract.txt docs/backdoors.rst docs/backupdb.rst docs/build/build-pyOpenSSL.rst docs/cautions.rst docs/conf.py docs/configuration.rst docs/convergence-secret.rst docs/debian.rst docs/desert-island.rst docs/donations.rst docs/expenses.rst docs/filesystem-notes.rst docs/frontends/CLI.rst docs/frontends/FTP-and-SFTP.rst docs/frontends/download-status.rst docs/frontends/webapi.rst docs/garbage-collection.rst docs/helper.rst docs/historical/configuration.rst docs/historical/historical_known_issues.txt docs/historical/peer-selection-tahoe2.txt docs/historical/peer-selection-tahoe3.txt docs/historical/peer-selection.txt docs/how_to_make_a_tahoe-lafs_release.org docs/index.rst docs/key-value-store.rst docs/known_issues.rst docs/lease-tradeoffs.svg docs/logging.rst docs/magic-wormhole-invites.rst docs/man/man1/tahoe.1 docs/network-and-reliance-topology.svg docs/nodekeys.rst docs/performance.rst docs/proposed/GridID.txt docs/proposed/README.lossmodel docs/proposed/accounting-overview.txt docs/proposed/denver.txt docs/proposed/http-storage-node-protocol.rst docs/proposed/index.rst docs/proposed/leasedb.rst docs/proposed/lossmodel.lyx docs/proposed/mutable-DSA.svg docs/proposed/mutable-DSA.txt docs/proposed/mutsemi.svg docs/proposed/old-accounts-introducer.txt docs/proposed/old-accounts-pubkey.txt docs/running.rst docs/servers.rst docs/specifications/CHK-hashes.svg docs/specifications/Makefile docs/specifications/URI-extension.rst docs/specifications/backends/raic.rst docs/specifications/dirnodes.rst docs/specifications/file-encoding.rst docs/specifications/file-encoding1.svg docs/specifications/file-encoding2.svg docs/specifications/file-encoding3.svg docs/specifications/file-encoding4.svg docs/specifications/file-encoding5.svg docs/specifications/file-encoding6.svg docs/specifications/index.rst docs/specifications/mut.svg docs/specifications/mutable.rst docs/specifications/outline.rst docs/specifications/servers-of-happiness.rst docs/specifications/uri.rst docs/stats.rst docs/subtree1.svg docs/windows.rst docs/write_coordination.rst integration/README integration/__init__.py integration/conftest.py integration/install-tor.sh integration/test_aaa_aardvark.py integration/test_servers_of_happiness.py integration/test_streaming_logs.py integration/test_tor.py integration/test_web.py integration/util.py misc/awesome_weird_stuff/boodlegrid.tac misc/build_helpers/build-osx-pkg.sh misc/build_helpers/check-build.py misc/build_helpers/gen-package-table.py misc/build_helpers/icons/logo.ico misc/build_helpers/icons/logo.svg misc/build_helpers/icons/make-osx-icon.sh misc/build_helpers/icons/make-windows-icon.sh misc/build_helpers/osx/Contents/Info.plist misc/build_helpers/osx/Contents/MacOS/applet misc/build_helpers/osx/Contents/PkgInfo misc/build_helpers/osx/Contents/Resources/Scripts/main.scpt misc/build_helpers/osx/Contents/Resources/applet.icns misc/build_helpers/osx/Contents/Resources/applet.rsrc misc/build_helpers/osx/Contents/Resources/description.rtfd/TXT.rtf misc/build_helpers/osx/Distribution.xml misc/build_helpers/osx/scripts/postinstall misc/build_helpers/osx/scripts/preinstall misc/build_helpers/run-deprecations.py misc/build_helpers/show-tool-versions.py misc/build_helpers/test-git-ignore.py misc/build_helpers/test-osx-pkg.py misc/coding_tools/check-debugging.py misc/coding_tools/check-interfaces.py misc/coding_tools/check-miscaptures.py misc/coding_tools/check-umids.py misc/coding_tools/coverage.el misc/coding_tools/coverage2el.py misc/coding_tools/find-trailing-spaces.py misc/coding_tools/fixshebangs.py misc/coding_tools/graph-deps.py misc/coding_tools/make-canary-files.py misc/coding_tools/make_umid misc/incident-gatherer/classify_tahoe.py misc/operations_helpers/cpu-watcher-poll.py misc/operations_helpers/cpu-watcher-subscribe.py misc/operations_helpers/cpu-watcher.tac misc/operations_helpers/find-share-anomalies.py misc/operations_helpers/getmem.py misc/operations_helpers/munin/tahoe-conf misc/operations_helpers/munin/tahoe-stats.plugin-conf misc/operations_helpers/munin/tahoe_cpu_watcher misc/operations_helpers/munin/tahoe_diskleft misc/operations_helpers/munin/tahoe_disktotal misc/operations_helpers/munin/tahoe_diskusage misc/operations_helpers/munin/tahoe_diskused misc/operations_helpers/munin/tahoe_doomsday misc/operations_helpers/munin/tahoe_estimate_files misc/operations_helpers/munin/tahoe_files misc/operations_helpers/munin/tahoe_helperstats_active misc/operations_helpers/munin/tahoe_helperstats_fetched misc/operations_helpers/munin/tahoe_introstats misc/operations_helpers/munin/tahoe_nodememory misc/operations_helpers/munin/tahoe_overhead misc/operations_helpers/munin/tahoe_rootdir_space misc/operations_helpers/munin/tahoe_server_latency_ misc/operations_helpers/munin/tahoe_server_operations_ misc/operations_helpers/munin/tahoe_spacetime misc/operations_helpers/munin/tahoe_stats misc/operations_helpers/munin/tahoe_storagespace misc/operations_helpers/provisioning/provisioning.py misc/operations_helpers/provisioning/provisioning.xhtml misc/operations_helpers/provisioning/reliability.py misc/operations_helpers/provisioning/reliability.xhtml misc/operations_helpers/provisioning/run.py misc/operations_helpers/provisioning/tahoe.css misc/operations_helpers/provisioning/test_provisioning.py misc/operations_helpers/provisioning/util.py misc/operations_helpers/provisioning/web_reliability.py misc/operations_helpers/spacetime/diskwatcher.py misc/operations_helpers/spacetime/diskwatcher.tac misc/python3/depgraph.sh misc/python3/tahoe-depgraph.py misc/simulators/bench_spans.py misc/simulators/count_dirs.py misc/simulators/hashbasedsig.py misc/simulators/ringsim.py misc/simulators/simulate_load.py misc/simulators/simulator.py misc/simulators/sizes.py misc/simulators/storage-overhead.py newsfragments/.gitignore newsfragments/1792.feature newsfragments/2755.other newsfragments/3247.minor newsfragments/3254.minor newsfragments/3263.other newsfragments/3277.minor newsfragments/3278.minor newsfragments/3284.removed newsfragments/3287.minor newsfragments/3288.minor newsfragments/3289.minor newsfragments/3290.minor newsfragments/3291.minor newsfragments/3292.minor newsfragments/3293.minor newsfragments/3294.minor newsfragments/3296.installation newsfragments/3297.minor newsfragments/3298.minor newsfragments/3299.minor newsfragments/3300.minor newsfragments/3302.minor newsfragments/3303.minor newsfragments/3304.minor newsfragments/3305.minor newsfragments/3306.minor newsfragments/3308.minor newsfragments/3309.minor newsfragments/3312.bugfix newsfragments/3313.minor newsfragments/3315.minor newsfragments/3316.minor newsfragments/3317.feature newsfragments/3320.minor newsfragments/3323.removed newsfragments/3324.other newsfragments/3325.minor newsfragments/3326.minor newsfragments/3328.installation newsfragments/3329.minor newsfragments/3330.minor newsfragments/3331.minor newsfragments/3332.minor newsfragments/3333.minor newsfragments/3334.minor newsfragments/3335.minor newsfragments/3336.minor newsfragments/3338.minor newsfragments/3339.minor newsfragments/3340.minor newsfragments/3341.minor newsfragments/3342.minor newsfragments/3343.minor newsfragments/3344.minor newsfragments/3346.minor newsfragments/3348.bugfix newsfragments/3349.bugfix newsfragments/3351.minor newsfragments/3353.minor newsfragments/3354.minor newsfragments/3356.minor newsfragments/3357.minor newsfragments/3358.minor newsfragments/3359.minor newsfragments/3361.minor newsfragments/3364.minor newsfragments/3365.minor newsfragments/3366.minor newsfragments/3368.minor newsfragments/3370.minor newsfragments/3372.minor newsfragments/3373.minor newsfragments/3375.minor newsfragments/3376.minor newsfragments/3378.minor newsfragments/3380.minor newsfragments/3383.minor newsfragments/3386.minor newsfragments/3388.minor newsfragments/3389.minor nix/autobahn.nix nix/default.nix nix/eliot.nix nix/future.nix nix/nevow.nix nix/overlays.nix nix/pyutil.nix nix/tahoe-lafs.nix pyinstaller.spec release-tools/fetch-pr.py relnotes.txt setup.cfg setup.py src/allmydata/__init__.py src/allmydata/__main__.py src/allmydata/_auto_deps.py src/allmydata/blacklist.py src/allmydata/check_results.py src/allmydata/client.py src/allmydata/codec.py src/allmydata/control.py src/allmydata/crypto/__init__.py src/allmydata/crypto/aes.py src/allmydata/crypto/ed25519.py src/allmydata/crypto/error.py src/allmydata/crypto/rsa.py src/allmydata/crypto/util.py src/allmydata/deep_stats.py src/allmydata/dirnode.py src/allmydata/frontends/__init__.py src/allmydata/frontends/auth.py src/allmydata/frontends/ftpd.py src/allmydata/frontends/sftpd.py src/allmydata/hashtree.py src/allmydata/history.py src/allmydata/immutable/__init__.py src/allmydata/immutable/checker.py src/allmydata/immutable/downloader/__init__.py src/allmydata/immutable/downloader/common.py src/allmydata/immutable/downloader/fetcher.py src/allmydata/immutable/downloader/finder.py src/allmydata/immutable/downloader/node.py src/allmydata/immutable/downloader/segmentation.py src/allmydata/immutable/downloader/share.py src/allmydata/immutable/downloader/status.py src/allmydata/immutable/encode.py src/allmydata/immutable/filenode.py src/allmydata/immutable/happiness_upload.py src/allmydata/immutable/layout.py src/allmydata/immutable/literal.py src/allmydata/immutable/offloaded.py src/allmydata/immutable/repairer.py src/allmydata/immutable/upload.py src/allmydata/interfaces.py src/allmydata/introducer/__init__.py src/allmydata/introducer/client.py src/allmydata/introducer/common.py src/allmydata/introducer/interfaces.py src/allmydata/introducer/server.py src/allmydata/monitor.py src/allmydata/mutable/__init__.py src/allmydata/mutable/checker.py src/allmydata/mutable/common.py src/allmydata/mutable/filenode.py src/allmydata/mutable/layout.py src/allmydata/mutable/publish.py src/allmydata/mutable/repairer.py src/allmydata/mutable/retrieve.py src/allmydata/mutable/servermap.py src/allmydata/node.py src/allmydata/nodemaker.py src/allmydata/scripts/__init__.py src/allmydata/scripts/admin.py src/allmydata/scripts/backupdb.py src/allmydata/scripts/cli.py src/allmydata/scripts/common.py src/allmydata/scripts/common_http.py src/allmydata/scripts/create_node.py src/allmydata/scripts/debug.py src/allmydata/scripts/default_nodedir.py src/allmydata/scripts/run_common.py src/allmydata/scripts/runner.py src/allmydata/scripts/slow_operation.py src/allmydata/scripts/stats_gatherer.py src/allmydata/scripts/tahoe_add_alias.py src/allmydata/scripts/tahoe_backup.py src/allmydata/scripts/tahoe_check.py src/allmydata/scripts/tahoe_cp.py src/allmydata/scripts/tahoe_daemonize.py src/allmydata/scripts/tahoe_get.py src/allmydata/scripts/tahoe_invite.py src/allmydata/scripts/tahoe_ls.py src/allmydata/scripts/tahoe_manifest.py src/allmydata/scripts/tahoe_mkdir.py src/allmydata/scripts/tahoe_mv.py src/allmydata/scripts/tahoe_put.py src/allmydata/scripts/tahoe_restart.py src/allmydata/scripts/tahoe_run.py src/allmydata/scripts/tahoe_start.py src/allmydata/scripts/tahoe_status.py src/allmydata/scripts/tahoe_stop.py src/allmydata/scripts/tahoe_unlink.py src/allmydata/scripts/tahoe_webopen.py src/allmydata/stats.py src/allmydata/storage/__init__.py src/allmydata/storage/common.py src/allmydata/storage/crawler.py src/allmydata/storage/expirer.py src/allmydata/storage/immutable.py src/allmydata/storage/lease.py src/allmydata/storage/mutable.py src/allmydata/storage/server.py src/allmydata/storage/shares.py src/allmydata/storage_client.py src/allmydata/test/__init__.py src/allmydata/test/_twisted_9607.py src/allmydata/test/check_grid.py src/allmydata/test/check_load.py src/allmydata/test/check_memory.py src/allmydata/test/check_speed.py src/allmydata/test/cli/__init__.py src/allmydata/test/cli/common.py src/allmydata/test/cli/test_alias.py src/allmydata/test/cli/test_backup.py src/allmydata/test/cli/test_check.py src/allmydata/test/cli/test_cli.py src/allmydata/test/cli/test_cp.py src/allmydata/test/cli/test_create.py src/allmydata/test/cli/test_create_alias.py src/allmydata/test/cli/test_daemonize.py src/allmydata/test/cli/test_invite.py src/allmydata/test/cli/test_list.py src/allmydata/test/cli/test_mv.py src/allmydata/test/cli/test_put.py src/allmydata/test/cli/test_start.py src/allmydata/test/cli/test_status.py src/allmydata/test/cli_node_api.py src/allmydata/test/common.py src/allmydata/test/common_py3.py src/allmydata/test/common_util.py src/allmydata/test/common_web.py src/allmydata/test/data/pycryptopp-rsa-2048-priv.txt src/allmydata/test/data/pycryptopp-rsa-2048-pub.txt src/allmydata/test/data/pycryptopp-rsa-2048-sig.txt src/allmydata/test/eliotutil.py src/allmydata/test/matchers.py src/allmydata/test/mutable/__init__.py src/allmydata/test/mutable/test_checker.py src/allmydata/test/mutable/test_datahandle.py src/allmydata/test/mutable/test_different_encoding.py src/allmydata/test/mutable/test_exceptions.py src/allmydata/test/mutable/test_filehandle.py src/allmydata/test/mutable/test_filenode.py src/allmydata/test/mutable/test_interoperability.py src/allmydata/test/mutable/test_multiple_encodings.py src/allmydata/test/mutable/test_multiple_versions.py src/allmydata/test/mutable/test_problems.py src/allmydata/test/mutable/test_repair.py src/allmydata/test/mutable/test_roundtrip.py src/allmydata/test/mutable/test_servermap.py src/allmydata/test/mutable/test_update.py src/allmydata/test/mutable/test_version.py src/allmydata/test/mutable/util.py src/allmydata/test/no_network.py src/allmydata/test/plugins/tahoe_lafs_dropin.py src/allmydata/test/python3_tests.py src/allmydata/test/status.py src/allmydata/test/storage_plugin.py src/allmydata/test/test_abbreviate.py src/allmydata/test/test_auth.py src/allmydata/test/test_backupdb.py src/allmydata/test/test_base32.py src/allmydata/test/test_base62.py src/allmydata/test/test_checker.py src/allmydata/test/test_client.py src/allmydata/test/test_codec.py src/allmydata/test/test_configutil.py src/allmydata/test/test_connections.py src/allmydata/test/test_crawler.py src/allmydata/test/test_crypto.py src/allmydata/test/test_deepcheck.py src/allmydata/test/test_deferredutil.py src/allmydata/test/test_dictutil.py src/allmydata/test/test_dirnode.py src/allmydata/test/test_download.py src/allmydata/test/test_eliotutil.py src/allmydata/test/test_encode.py src/allmydata/test/test_encodingutil.py src/allmydata/test/test_filenode.py src/allmydata/test/test_ftp.py src/allmydata/test/test_happiness.py src/allmydata/test/test_hashtree.py src/allmydata/test/test_hashutil.py src/allmydata/test/test_helper.py src/allmydata/test/test_humanreadable.py src/allmydata/test/test_hung_server.py src/allmydata/test/test_i2p_provider.py src/allmydata/test/test_immutable.py src/allmydata/test/test_import.py src/allmydata/test/test_introducer.py src/allmydata/test/test_iputil.py src/allmydata/test/test_json_metadata.py src/allmydata/test/test_log.py src/allmydata/test/test_multi_introducers.py src/allmydata/test/test_netstring.py src/allmydata/test/test_no_network.py src/allmydata/test/test_node.py src/allmydata/test/test_observer.py src/allmydata/test/test_pipeline.py src/allmydata/test/test_python2_regressions.py src/allmydata/test/test_python3.py src/allmydata/test/test_repairer.py src/allmydata/test/test_runner.py src/allmydata/test/test_sftp.py src/allmydata/test/test_spans.py src/allmydata/test/test_statistics.py src/allmydata/test/test_stats.py src/allmydata/test/test_storage.py src/allmydata/test/test_storage_client.py src/allmydata/test/test_storage_web.py src/allmydata/test/test_system.py src/allmydata/test/test_testing.py src/allmydata/test/test_time_format.py src/allmydata/test/test_tor_provider.py src/allmydata/test/test_upload.py src/allmydata/test/test_uri.py src/allmydata/test/test_util.py src/allmydata/test/test_version.py src/allmydata/test/test_websocket_logs.py src/allmydata/test/web/__init__.py src/allmydata/test/web/common.py src/allmydata/test/web/matchers.py src/allmydata/test/web/test_grid.py src/allmydata/test/web/test_introducer.py src/allmydata/test/web/test_logs.py src/allmydata/test/web/test_private.py src/allmydata/test/web/test_root.py src/allmydata/test/web/test_status.py src/allmydata/test/web/test_token.py src/allmydata/test/web/test_util.py src/allmydata/test/web/test_web.py src/allmydata/testing/__init__.py src/allmydata/testing/web.py src/allmydata/unknown.py src/allmydata/uri.py src/allmydata/util/__init__.py src/allmydata/util/_python3.py src/allmydata/util/abbreviate.py src/allmydata/util/assertutil.py src/allmydata/util/base32.py src/allmydata/util/base62.py src/allmydata/util/configutil.py src/allmydata/util/connection_status.py src/allmydata/util/consumer.py src/allmydata/util/dbutil.py src/allmydata/util/deferredutil.py src/allmydata/util/dictutil.py src/allmydata/util/eliotutil.py src/allmydata/util/encodingutil.py src/allmydata/util/fileutil.py src/allmydata/util/gcutil.py src/allmydata/util/happinessutil.py src/allmydata/util/hashutil.py src/allmydata/util/humanreadable.py src/allmydata/util/i2p_provider.py src/allmydata/util/idlib.py src/allmydata/util/iputil.py src/allmydata/util/log.py src/allmydata/util/mathutil.py src/allmydata/util/namespace.py src/allmydata/util/netstring.py src/allmydata/util/observer.py src/allmydata/util/pipeline.py src/allmydata/util/pollmixin.py src/allmydata/util/progress.py src/allmydata/util/rrefutil.py src/allmydata/util/sibpath.py src/allmydata/util/spans.py src/allmydata/util/statistics.py src/allmydata/util/time_format.py src/allmydata/util/tor_provider.py src/allmydata/util/verlib.py src/allmydata/util/yamlutil.py src/allmydata/version_checks.py src/allmydata/web/__init__.py src/allmydata/web/_autobahn_1151.py src/allmydata/web/_nevow_106.py src/allmydata/web/check-and-repair-results.xhtml src/allmydata/web/check-results.xhtml src/allmydata/web/check_results.py src/allmydata/web/common.py src/allmydata/web/deep-check-and-repair-results.xhtml src/allmydata/web/deep-check-results.xhtml src/allmydata/web/directory.py src/allmydata/web/directory.xhtml src/allmydata/web/download-status.xhtml src/allmydata/web/filenode.py src/allmydata/web/helper.xhtml src/allmydata/web/info.py src/allmydata/web/info.xhtml src/allmydata/web/introducer.xhtml src/allmydata/web/introweb.py src/allmydata/web/literal-check-results.xhtml src/allmydata/web/logs.py src/allmydata/web/manifest.xhtml src/allmydata/web/map-update-status.xhtml src/allmydata/web/operations.py src/allmydata/web/private.py src/allmydata/web/publish-status.xhtml src/allmydata/web/rename-form.xhtml src/allmydata/web/retrieve-status.xhtml src/allmydata/web/root.py src/allmydata/web/static/css/bootstrap.css src/allmydata/web/static/css/new-tahoe.css src/allmydata/web/static/icon.png src/allmydata/web/static/img/connected-no.png src/allmydata/web/static/img/connected-no.svg src/allmydata/web/static/img/connected-not-configured.png src/allmydata/web/static/img/connected-not-configured.svg src/allmydata/web/static/img/connected-yes.png src/allmydata/web/static/img/connected-yes.svg src/allmydata/web/static/img/logo.png src/allmydata/web/static/tahoe.css src/allmydata/web/statistics.xhtml src/allmydata/web/status.py src/allmydata/web/status.xhtml src/allmydata/web/storage.py src/allmydata/web/storage_plugins.py src/allmydata/web/storage_status.xhtml src/allmydata/web/unlinked.py src/allmydata/web/upload-results.xhtml src/allmydata/web/upload-status.xhtml src/allmydata/web/welcome.xhtml src/allmydata/webish.py src/allmydata/windows/__init__.py src/allmydata/windows/fixups.py src/allmydata/windows/registry.py static/tahoe.py towncrier.pyproject.toml tox.ini ws_client.py <<<<<< network # path=/tmp/project/misc/coding_tools/coverage.el (defvar coverage-annotation-file ".coverage.el") (defvar coverage-annotations nil) (defun find-coverage-annotation-file () (let ((dir (file-name-directory buffer-file-name)) (olddir "/")) (while (and (not (equal dir olddir)) (not (file-regular-p (concat dir coverage-annotation-file)))) (setq olddir dir dir (file-name-directory (directory-file-name dir)))) (and (not (equal dir olddir)) (concat dir coverage-annotation-file)) )) (defun load-coverage-annotations () (let* ((annotation-file (find-coverage-annotation-file)) (coverage (with-temp-buffer (insert-file-contents annotation-file) (let ((form (read (current-buffer)))) (eval form))))) (setq coverage-annotations coverage) coverage )) (defun coverage-unannotate () (save-excursion (dolist (ov (overlays-in (point-min) (point-max))) (delete-overlay ov)) (setq coverage-this-buffer-is-annotated nil) (message "Removed annotations") )) ;; in emacs22, it will be possible to put the annotations in the fringe. Set ;; a display property for one of the characters in the line, using ;; (right-fringe BITMAP FACE), where BITMAP should probably be right-triangle ;; or so, and FACE should probably be '(:foreground "red"). We can also ;; create new bitmaps, with faces. To do tartans will require a lot of ;; bitmaps, and you've only got about 8 pixels to work with. ;; unfortunately emacs21 gives us less control over the fringe. We can use ;; overlays to put letters on the left or right margins (in the text area, ;; overriding actual program text), and to modify the text being displayed ;; (by changing its background color, or adding a box around each word). (defun coverage-annotate (show-code) (let ((allcoverage (load-coverage-annotations)) (filename-key (expand-file-name buffer-file-truename)) thiscoverage code-lines covered-lines uncovered-code-lines ) (while (and (not (gethash filename-key allcoverage nil)) (string-match "/" filename-key)) ;; eat everything up to and including the first slash, then look again (setq filename-key (substring filename-key (+ 1 (string-match "/" filename-key))))) (setq thiscoverage (gethash filename-key allcoverage nil)) (if thiscoverage (progn (setq coverage-this-buffer-is-annotated t) (setq code-lines (nth 0 thiscoverage) covered-lines (nth 1 thiscoverage) uncovered-code-lines (nth 2 thiscoverage) ) (save-excursion (dolist (ov (overlays-in (point-min) (point-max))) (delete-overlay ov)) (if show-code (dolist (line code-lines) (goto-line line) ;;(add-text-properties (point) (line-end-position) '(face bold) ) (overlay-put (make-overlay (point) (line-end-position)) ;'before-string "C" ;'face '(background-color . "green") 'face '(:background "dark green") ) )) (dolist (line uncovered-code-lines) (goto-line line) (overlay-put (make-overlay (point) (line-end-position)) ;'before-string "D" ;'face '(:background "blue") ;'face '(:underline "blue") 'face '(:box "red") ) ) (message (format "Added annotations: %d uncovered lines" (safe-length uncovered-code-lines))) ) ) (message "unable to find coverage for this file")) )) (defun coverage-toggle-annotations (show-code) (interactive "P") (if coverage-this-buffer-is-annotated (coverage-unannotate) (coverage-annotate show-code)) ) (setq coverage-this-buffer-is-annotated nil) (make-variable-buffer-local 'coverage-this-buffer-is-annotated) (define-minor-mode coverage-annotation-minor-mode "Minor mode to annotate code-coverage information" nil " CA" '( ("\C-c\C-a" . coverage-toggle-annotations) ) () ; forms run on mode entry/exit ) (defun maybe-enable-coverage-mode () (if (string-match "/src/allmydata/" (buffer-file-name)) (coverage-annotation-minor-mode t) )) (add-hook 'python-mode-hook 'maybe-enable-coverage-mode) <<<<<< EOF