{"id":17246756,"url":"https://github.com/xaizek/uncov","last_synced_at":"2025-04-14T05:32:16.977Z","repository":{"id":50052362,"uuid":"78450760","full_name":"xaizek/uncov","owner":"xaizek","description":"uncov(er) is a tool that collects and processes code coverage reports.","archived":false,"fork":false,"pushed_at":"2024-08-08T13:43:19.000Z","size":2022,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-27T19:52:01.841Z","etag":null,"topics":["agpl","command-line-app","command-line-tool","coverage","coverage-changes","coverage-report","coverage-reports","cpp","cpp11","gcov","test-coverage","web-interface"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xaizek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-09T17:12:18.000Z","updated_at":"2024-08-08T13:43:24.000Z","dependencies_parsed_at":"2024-08-08T16:08:59.093Z","dependency_job_id":null,"html_url":"https://github.com/xaizek/uncov","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaizek%2Funcov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaizek%2Funcov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaizek%2Funcov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaizek%2Funcov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xaizek","download_url":"https://codeload.github.com/xaizek/uncov/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248826800,"owners_count":21167751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agpl","command-line-app","command-line-tool","coverage","coverage-changes","coverage-report","coverage-reports","cpp","cpp11","gcov","test-coverage","web-interface"],"created_at":"2024-10-15T06:35:04.706Z","updated_at":"2025-04-14T05:32:16.092Z","avatar_url":"https://github.com/xaizek.png","language":"C++","readme":"**uncov**, _v0.5_, _2016 – 2024_\n\n_This file last updated on 20 January, 2024_\n\n1. [Description](#description)\n2. [Supported Environment](#supported-environment)\n3. [Usage/example/screenshots](#usage)\n4. [Credits](#credits)\n5. [License](#license)\n\n## Description ##\n\n`uncov` is a tool that collects and processes coverage reports.\n\nBy storing history of coverage reports it allows one to view how code coverage\nchanges over time, compare changes that happened and view current state of the\ncoverage.\n\nThe tool is deeply integrated with git repository of processed projects and thus\navoids generation of static reports.  Data is bound to repository information,\nbut can be freely shared by several copies of the same repository (builds\nreferring to unavailable git objects just won't be accessible).\n\nProvided command-line interface should be familiar to most of git users and\nhelps to avoid switching to a browser to verify code coverage.\n\nIt's also possible to display coverage information in a browser, say, on a CI\nserver.  This makes uncov something like self-hosted coveralls.io analogue (but\nnote that Web-interface is secondary in this case and isn't feature complete).\n\n### Features ###\n\n* Code highlighting.\n* Comparison of coverage.\n* Displaying parts of files that need attention with regard to coverage.\n* Can be used from Vim via the plugin provided.\n* Can be used on CI to display coverage in a browser (via Web-UI).\n\n### Structure ###\n\nStorage management tool itself is language independent and is relying on\ncomplementary tools to fetch and transform coverage data from language specific\ncoverage harness.\n\nImporter of coverage for C and C++ languages that collects data from `gcov` is\nprovided.\n\n### Adding support for a language ###\n\nSupport for other languages can be added by converting existing coverage tools\nor even using them as is.  The `new-json` subcommand accepts JSON that's used by\n[coveralls.io][coveralls] API, all what's needed is to extract this JSON and\npipe it to `uncov new-json` (some tools might already have a command-line option\nlike `--dump`, others could be extended by adding it).\n\n### Status ###\n\nOverall structure and basic elements are expected to remain in place, however\nthey aren't finalized and changes for the sake of improvement are possible.\nDatabases will be migrated if schema changes, so previously collected data won't\nbe lost.\n\n## Supported Environment ##\n\nExpected to work in Unix-like environments.\n\n### Prerequisites ###\n\n* [GNU Make][make].\n* C++11 compatible compiler.\n* [Boost][boost], tested with 1.55 and 1.59, but older versions might work.\n* [libgit2][libgit2].\n* [libsqlite3][sqlite].\n* libsource-highlight from [GNU Source-highlight][srchilite].\n* [zlib][zlib].\n* (optional) [tntnet][tntnet] for Web-UI.\n* (optional) [pandoc][pandoc] for regenerating man page.\n* (optional) [python][python] for collecting coverage for C and C++ using\n  deprecated `uncov-gcov` instead of a subcommand.\n\n### Ubuntu packages ###\n\n```\napt install -y make clang zlib1g-dev libsqlite3-dev libboost1.74-all-dev libsource-highlight-dev libgit2-dev\n# optionally, if you want to build Web-UI\napt install -y libcxxtools-dev libtntnet-dev`\n# optionally, if you intent to edit docs/*/*.md\napt install -y pandoc\n```\n\n## Usage ##\n\nUsing subcommand (should be faster and less problematic):\n\n    # drop coverage counters from previous run\n    find . -name '*.gcda' -delete\n    # \u003c\u003c run tests here \u003e\u003e\n    # collect coverage (--capture-worktree automatically makes stray commit if\n    # worktree is dirty)\n    uncov new-gcovi --exclude tests/ --exclude web/ --capture-worktree\n\nUsing deprecated Python script:\n\n    # reset coverage counters from previous runs\n    find . -name '*.gcda' -delete\n    # \u003c\u003c run tests here \u003e\u003e\n    # generage coverage for every object file found (change \".\" to build root)\n    find . -name '*.o' -exec gcov -p {} +\n    # collect coverage (--capture-worktree automatically makes stray commit if\n    # worktree is dirty)\n    uncov-gcov --root . --no-gcov --capture-worktree --exclude tests | uncov new\n    # remove coverage reports\n    find . -name '*.gcov' -delete\n\n### Example ###\n\nThe easiest way of checking out `uncov` is by using it on itself (assuming that\nyou have just built it or just happen to have all the necessary development\ndependencies).\n\nIn root of the project run `make self-coverage` and then do\n`release/uncov build` to see something similar to:\n\n![build](data/screenshots/example/build.png)\n\n`release/uncov dirs` shows coverage per directory:\n\n![dirs](data/screenshots/example/dirs.png)\n\n`release/uncov changed` shows files which have their coverage changed:\n\n![changed](data/screenshots/example/changed.png)\n\n`release/uncov show src/SubCommand.cpp` shows annotated `src/SubCommand.cpp`\nfile:\n\n![show](data/screenshots/example/show.png)\n\nWhen most of a file is covered, one probably wants to see just what's not yet\ncovered, this can be done with `release/uncov missed` command:\n\n![missed](data/screenshots/example/missed.png)\n\n### More Screenshots ###\n\nNot everything can be demonstrated by self-coverage example above, so here are\nsome other interesting things.  List of latest builds (`uncov builds`):\n\n![builds](data/screenshots/builds.png)\n\nResults of comparison (`uncov diff`):\n\n![diff](data/screenshots/diff.png)\n\nAnnotated source code in Web-UI:\n\n![Web-UI](data/screenshots/webui-file.png)\n\nAnnotated diff in Web-UI:\n\n![Web-UI](data/screenshots/webui-diff.png)\n\n### Web-UI Demo ###\n\nDeployed Web-interface can be seen [here](http://cov.vifm.info/).\n\n## Credits ##\n\n* [LCOV][lcov] project is the source of useful ideas and primary source of\n  inspiration.\n* [coveralls.io][coveralls] service is second project which significantly shaped\n  this tool.\n* Code of `uncov-gcov` is based on [cpp-coveralls][cpp-coveralls].\n* [gcov-marker.vim][vim-gcov-marker] was the source of idea of filling location\n  list with not covered lines in the plugin.\n\n## License ##\n\n![AGPLv3](data/agplv3.png)\n\nVersion 3 of the GNU Affero General Public License.\n\n\n[lcov]: http://ltp.sourceforge.net/coverage/lcov.php\n[coveralls]: https://coveralls.io/\n[cpp-coveralls]: https://github.com/eddyxu/cpp-coveralls\n[make]: https://www.gnu.org/software/make/\n[boost]: http://www.boost.org/\n[libgit2]: https://libgit2.github.com/\n[sqlite]: https://www.sqlite.org/\n[srchilite]: https://www.gnu.org/software/src-highlite/\n[zlib]: http://zlib.net/\n[tntnet]: http://www.tntnet.org/\n[pandoc]: http://pandoc.org/\n[python]: https://www.python.org/\n[vim-gcov-marker]: https://github.com/m42e/vim-gcov-marker\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxaizek%2Funcov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxaizek%2Funcov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxaizek%2Funcov/lists"}