{"id":19592590,"url":"https://github.com/source-foundry/ufodiff","last_synced_at":"2025-04-27T14:33:47.768Z","repository":{"id":22446661,"uuid":"96272532","full_name":"source-foundry/ufodiff","owner":"source-foundry","description":"UFO source file diff application","archived":false,"fork":false,"pushed_at":"2023-02-17T12:56:48.000Z","size":225,"stargazers_count":27,"open_issues_count":7,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-14T20:43:14.045Z","etag":null,"topics":["diff","font","json-data","source-code","typeface","ufo","ufo-source"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/source-foundry.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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},"funding":{"github":"chrissimpkins","liberapay":"chrissimpkins"}},"created_at":"2017-07-05T03:19:23.000Z","updated_at":"2024-05-30T08:19:04.000Z","dependencies_parsed_at":"2024-11-11T08:39:58.345Z","dependency_job_id":"6c2e7262-3ff6-420d-a5ed-591a0fb29f8f","html_url":"https://github.com/source-foundry/ufodiff","commit_stats":{"total_commits":172,"total_committers":6,"mean_commits":"28.666666666666668","dds":0.2093023255813954,"last_synced_commit":"548a1c427322a05ba9b592d62f6f10eb565029d9"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/source-foundry%2Fufodiff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/source-foundry%2Fufodiff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/source-foundry%2Fufodiff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/source-foundry%2Fufodiff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/source-foundry","download_url":"https://codeload.github.com/source-foundry/ufodiff/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251154776,"owners_count":21544559,"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":["diff","font","json-data","source-code","typeface","ufo","ufo-source"],"created_at":"2024-11-11T08:36:13.459Z","updated_at":"2025-04-27T14:33:45.928Z","avatar_url":"https://github.com/source-foundry.png","language":"Python","funding_links":["https://github.com/sponsors/chrissimpkins","https://liberapay.com/chrissimpkins"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://github.com/source-foundry/ufodiff/blob/images/images/ufodiff-logo-2-crunch.png?raw=true\"\u003e\n\n[![PyPI](https://img.shields.io/pypi/v/ufodiff?color=blueviolet\u0026label=PyPI\u0026logo=python\u0026logoColor=white)](https://pypi.org/project/ufodiff)\n[![Build Status](https://travis-ci.com/source-foundry/ufodiff.svg?branch=master)](https://travis-ci.com/source-foundry/ufodiff)\n[![Build status](https://ci.appveyor.com/api/projects/status/o2vdn1uf7uxau3o7/branch/master?svg=true)](https://ci.appveyor.com/project/chrissimpkins/ufodiff/branch/master)\n![Python Lints](https://github.com/source-foundry/ufodiff/workflows/Python%20Lints/badge.svg)\n[![codecov](https://codecov.io/gh/source-foundry/ufodiff/branch/master/graph/badge.svg)](https://codecov.io/gh/source-foundry/ufodiff)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/23e4187ff4474576b7e3334075180202)](https://app.codacy.com/app/SourceFoundry/ufodiff)\n\nufodiff is a command line UFO source file diff tool for collaborative typeface development projects.\n\nIt examines git repositories for changes to files that are part of the UFO source spec only (i.e. all file changes in the repository external to the UFO source code are not considered by the tool). It supports reporting of UFO source file additions, deletions, and modifications as well as colored and uncolored text diffs for UFO source files that were modified between branches or across one or more commits.\n\nUFO versions 2 and 3 are fully supported in the current release.\n\n\u003cimg src=\"https://github.com/source-foundry/ufodiff/blob/images/images/diff-delta-crunch.png?raw=true\"\u003e\n\n## Contents\n\n- [Contents](#contents)\n- [Install](#install)\n- [Quickstart Examples](#quickstart-examples)\n    - [Plain Text](#plain-text)\n    - [Markdown](#markdown)\n    - [JSON](#json)\n    - [Colored text diff](#colored-text-diff)\n      - [_For terminals with ANSI color code support_](#for-terminals-with-ansi-color-code-support)\n    - [Uncolored text diff](#uncolored-text-diff)\n- [Usage](#usage)\n    - [View Results in Terminal](#view-results-in-terminal)\n    - [Piping Data to Other Applications](#piping-data-to-other-applications)\n    - [File Writes](#file-writes)\n  - [ufodiff Subcommands](#ufodiff-subcommands)\n    - [Subcommand List](#subcommand-list)\n- [Issues](#issues)\n- [License](#license)\n\n## Install\n\nInstallation with `pip` is recommended:\n\n`$ pip install ufodiff`\n\nUpgrade a previous installation with:\n\n`$ pip install --upgrade ufodiff`\n\n## Quickstart Examples\n\n\u003ch3\u003e\u003ca href=\"\"\u003eList UFO source file additions, deletions, and modifications\u003c/h3\u003e\n\n#### Plain Text\n\nFor the last two commits:\n\n```\n$ ufodiff delta all commits:2\n```\n\nFor the last five commits:\n\n```\n$ ufodiff delta all commits:5\n```\n\nFor the last five commits, only from the Test-Regular.ufo source directory (note: not a filepath to source, only include UFO directory name):\n\n```\n$ ufodiff delta all commits:5 Test-Regular.ufo\n```\n\nBetween the current branch and the `development` branch\n\n```\n# ufodiff delta all branch:development\n```\n\n#### Markdown\n\nFor the last two commits in current branch:\n\n```\n$ ufodiff deltamd all commits:2\n```\n\nFor the last five commits in current branch:\n\n```\n$ ufodiff deltamd all commits:5\n```\n\nFor the last five commits in current branch, only from the Test-Regular.ufo source directory (note: not a filepath to source, only include UFO directory name):\n\n```\n$ ufodiff deltamd all commits:5 Test-Regular.ufo\n```\n\nBetween the current branch and the `development` branch\n\n```\n# ufodiff deltamd all branch:development\n```\n\n#### JSON\n\nFor the last two commits in current branch:\n\n```\n$ ufodiff deltajson all commits:2\n```\n\nFor the last five commits in current branch:\n\n```\n$ ufodiff deltajson all commits:5\n```\n\nFor the last five commits in current branch, only from the Test-Regular.ufo source directory (note: not a filepath to source, only include UFO directory name):\n\n```\n$ ufodiff deltajson all commits:5 Test-Regular.ufo\n```\n\nBetween the current branch and the `development` branch\n\n```\n# ufodiff deltajson all branch:development\n```\n\n\u003ch3\u003e\u003ca href=\"\"\u003eText diff UFO source files\u003c/h3\u003e\n\n#### Colored text diff\n\n##### _For terminals with ANSI color code support_\n\nAll modified UFO files, last two commits:\n\n```\n$ ufodiff diff commits:2\n```\n\nAll modified UFO files, last five commits:\n\n```\n$ ufodiff diff commits:5\n```\n\nAll modified files, current branch vs. development branch:\n\n```\n$ ufodiff diff branch:development\n```\n\n#### Uncolored text diff\n\nAll modified UFO files, last two commits:\n\n```\n$ ufodiff diffnc commits:2\n```\n\nAll modified UFO files, last five commits:\n\n```\n$ ufodiff diffnc commits:5\n```\n\nAll modified files, current branch vs. development branch:\n\n```\n$ ufodiff diffnc branch:development\n```\n\n## Usage\n\n`ufodiff` is a command line executable. Application features are accessed via subcommands to the `ufodiff` executable.\n\nExecute `ufodiff` inside the git repository where you develop your typeface. It will recursively test for the repository root from up to 4 levels of repository directory depth. If you are receiving exceptions due to inability to instantiate your git repository object, try bumping your working directory\nup a few levels closer to the root. There are otherwise no restrictions to where `ufodiff` is executed inside the repository. The source directory does not need to be the current working directory.\n\n#### View Results in Terminal\n\nBy default, data are displayed in your terminal. Use one of the following approaches to either pipe data to another application or write data to a file.\n\n#### Piping Data to Other Applications\n\nOn Unix/Linux/OS X platforms, use the `|` idiom to pipe the standard output stream from `ufodiff` to another application for further processing like this:\n\n```\n$ ufodiff deltajson all commits:3 | anotherapp --dosomething-with-json\n```\n\n#### File Writes\n\nOn Unix/Linux/OS X platforms, use the `\u003e` idiom to write the data in the standard output stream to a filepath like this:\n\n```\n$ ufodiff delta all commits:1 \u003e myfont_delta.txt\n```\n\n### ufodiff Subcommands\n\n#### Subcommand List\n\n- [delta](#delta)\n- [deltajson](#deltajson)\n- [deltamd](#deltamd)\n- [diff](#diff)\n- [diffnc](#diffnc)\n\nThe commit history for all commands is compared with the `HEAD~N` git idiom. The branch comparisons across all commands are performed with the `test_branch..current_branch` git idiom.\n\n\u003ch3 id=\"delta\"\u003e\u003ca href=\"\"\u003edelta\u003c/a\u003e\u003c/h3\u003e\n\n`ufo delta` generates file modification, addition, and deletion reports over a user specified number of commits or across git branches. The data are streamed in plain text format through standard output with indicators for the type of file change.\n\nThe file change indicators include:\n\n- **[A]** file added\n- **[D]** file deleted\n- **[M]** file modified\n\nFor Markdown formatted data, see the `deltamd` command. For JSON formatted data, see the `deltajson` subcommand.\n\nThe syntax is:\n\n```\nufodiff delta [all] [commits:[N] | branch:[name]] \u003coptional UFO filter\u003e\n```\n\nwhere `N` is an integer value that represents the number of commits in the git commit history to examine and `name` is the name of an existing git branch in the repository. These are mutually exclusive arguments.\n\n_Examples_:\n\n```\n$ ufodiff delta all commits:3\n$ ufodiff delta all commits:5\n$ ufodiff delta all commits:3 Test-Regular.ufo\n$ ufodiff delta all branch:development\n$ ufodiff delta all branch:development Test-Regular.ufo\n```\n\nIncrease or decrease the integer value after the `commits:` argument to change the depth of the git commit history that you want to examine. Include an existing git branch name following the `branch:` argument to perform a branch vs. branch comparison.\n\nAdd one or more optional UFO source base directory names (e.g. Font-Regular.ufo) as last positional arguments in your command to filter the delta analysis by individual source directories.\n\n\u003ch3 id=\"deltajson\"\u003e\u003ca href=\"\"\u003e deltajson\u003c/a\u003e\u003c/h3\u003e\n\n`ufo deltajson` generates file modification, addition, and deletion reports over a user specified number of commits or across git branches. The data are streamed in JSON format through standard output.\n\nFor plain text formatted data, see the `delta` subcommand. For Markdown formatted data, see the `deltamd` command.\n\nThe syntax is:\n\n```\nufodiff deltajson [all] [commits:[N] | branch:[name]] \u003coptional UFO filter\u003e\n```\n\nwhere `N` is an integer value that represents the number of commits in the git commit history to examine and `name` is the name of an existing git branch in the repository. These are mutually exclusive arguments.\n\n_Examples_:\n\n```\n$ ufodiff deltajson all commits:3\n$ ufodiff deltajson all commits:5\n$ ufodiff deltajson all commits:3 Test-Regular.ufo\n$ ufodiff deltajson all branch:development\n$ ufodiff deltajson all branch:development Test-Regular.ufo\n```\n\nJSON data for commit history analyses are formatted as:\n\n```json\n{\n  \"commits\": [\"25087a1ab\", \"27fdb2e48\", \"6edab459e\"],\n  \"added\": [\"filepath 1\", \"filepath 2\", \"filepath 3\"],\n  \"deleted\": [\"filepath 1\", \"filepath 2\", \"filepath 3\"],\n  \"modified\": [\"filepath 1\", \"filepath 2\", \"filepath 3\"]\n}\n```\n\nJSON data for branch vs. branch analyses are formatted as:\n\n```json\n{\n  \"branches\": [\"branch 1\", \"branch 2\"],\n  \"added\": [\"filepath 1\", \"filepath 2\", \"filepath 3\"],\n  \"deleted\": [\"filepath 1\", \"filepath 2\", \"filepath 3\"],\n  \"modified\": [\"filepath 1\", \"filepath 2\", \"filepath 3\"]\n}\n```\n\nIncrease or decrease the integer value after the `commits:` argument to change the depth of the git commit history that you want to examine. Include an existing git branch name following the `branch:` argument to perform a branch vs. branch comparison.\n\nAdd one or more optional UFO source base directory name (e.g. Font-Regular.ufo) as last positional arguments in your command to filter the delta analysis by individual source directories.\n\n\u003ch3 id=\"deltamd\"\u003e\u003ca href=\"\"\u003e deltamd\u003c/a\u003e\u003c/h3\u003e\n\n`ufodiff deltamd` generates file modification, addition, and deletion reports over a user specified number of commits or across git branches. The data are streamed in Github flavored Markdown format through standard output.\n\nFor plain text formatted data, see the `delta` command. For JSON formatted data, see the `deltajson` command.\n\nThe syntax is:\n\n```\nufodiff deltamd [all] [commits:[N] | branch:[name]] \u003coptional UFO filter\u003e\n```\n\nwhere `N` is an integer value that represents the number of commits in the git commit history to examine and `name` is an existing git branch name for a branch vs. branch comparison.\n\n_Examples_:\n\n```\n$ ufodiff deltamd all commits:3\n$ ufodiff deltamd all commits:5\n$ ufodiff deltamd all commits:3 Test-Regular.ufo\n```\n\nIncrease or decrease the integer value after the `commits:` argument to change the depth of the git commit history that you want to examine. Include an existing git branch name following the `branch:` argument to perform a branch vs. branch comparison.\n\nAdd one or more optional UFO source base directory name (e.g. Font-Regular.ufo) as last positional arguments in your command to filter the delta analysis by individual source directories.\n\n\u003ch3 id=\"diff\"\u003e\u003ca href=\"\"\u003e diff\u003c/a\u003e\u003c/h3\u003e\n\n`ufodiff diff` provides colored text diffs for all UFO files that were modified across one or more commits in the working branch, or between the HEAD of the working branch and any other branch in the repository.\n\nFor uncolored diffs, see the `diffnc` command.\n\nThe command syntax is:\n\n```\nufodiff diff [commits:[N] | branch:[name]]\n```\n\nwhere `N` is an integer value that represents the number of commits in the git commit history to examine and `name` is the name of an existing git branch in the repository. These are mutually exclusive arguments.\n\n_Examples_:\n\n```\n$ ufodiff diff commits:2\n$ ufodiff diff branch:master\n```\n\n\u003ch3 id=\"diffnc\"\u003e\u003ca href=\"\"\u003e diffnc\u003c/a\u003e\u003c/h3\u003e\n\n`ufodiff diffnc` provides uncolored text diffs for all UFO files that were modified across one or more commits in the working branch, or between the HEAD of the working branch and any other branch in the repository.\n\nFor colored diffs intended for use in terminals that support ANSI color codes, see the `diff` command.\n\nThe command syntax is:\n\n```\nufodiff diffnc [commits:[N] | branch:[name]]\n```\n\nwhere `N` is an integer value that represents the number of commits in the git commit history to examine and `name` is the name of an existing git branch in the repository. These are mutually exclusive arguments.\n\n_Examples_:\n\n```\n$ ufodiff diffnc commits:2\n$ ufodiff diffnc branch:master\n```\n\n## Issues\n\nPlease submit bug reports and feature requests as an [issue report](https://github.com/source-foundry/ufodiff/issues/new) on our Github repository.\n\n## License\n\n[MIT License](https://github.com/source-foundry/ufodiff/blob/master/docs/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsource-foundry%2Fufodiff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsource-foundry%2Fufodiff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsource-foundry%2Fufodiff/lists"}