Repository navigation
v0.2.0
To upgrade from 0.1.0:
citesync checkhas five new error rules:contributor-mismatch,date-mismatch,swhid-mismatch,zenodo-license-listandfile-missing. To turn any of them off for now, list it underignore(docs/rules.md).codemeta-versionno longer defaults to 3.0. To keep checking codemeta.json's@contextas before, setcodemeta-version = "3.0".- Use citesync through its command line or the pre-commit hook. Its Python modules are internal and may change in any release.
write-manifeststakes onlyversion,author,contributor,license,codeRepositoryandkeywords, the fields a manifest holds. Take any other field off the list.- The text output changed: each finding starts with
file:line:coland has ahelp:line under it, a failing check ends with anN fixableline, andcitesync writeends withN fixed, M left in K files. In GitHub output, each annotation ends with itshelp:line and the::notice::line gives write's new count, so scripts should read--format jsoninstead (docs/output.md).
Added
citesync initwrites a CITATION.cff from codemeta.json, .zenodo.json and the package manifests when a repo has none. It passescitesync checkwhen those files already agree, andcitesync writefixes the rest (docs/init.md).- Contributors are compared across codemeta.json, .zenodo.json and package.json, the same way as authors (
contributor-mismatch). - Release dates are compared across CITATION.cff, codemeta.json and .zenodo.json (
date-mismatch). - Software Heritage identifiers (SWHIDs) are compared across CITATION.cff, codemeta.json and .zenodo.json, and
citesync writefixes them (swhid-mismatch, docs/check.md). version-behind-tagwarns when the source's version is older than the repo's newest git tag.--format sarifprints a SARIF log that GitHub code scanning can upload.citesync writecreates codemeta.json when thefilessetting lists it and it doesn't exist yet.citesync --helplists the exit codes and where config is read from.citesyncwith no command prints the help.- Two rules for repos where Zenodo reads CITATION.cff:
zenodo-license-listandzenodo-drops-field. - A keyword that differs from another file's only in hyphens, underscores or spaces is named as such, and
citesync writegives it the source's spelling.keywords-ignore-separators = truetreats such keywords as equal. - A failing
citesync checksays how many findingscitesync writewould fix, andcitesync writehow many it fixed and left (docs/check.md). -vnames each manifest check left out, and why (manifest-skipped).citesync configprints the repo root in use.--color auto|always|neversets colour whateverNO_COLORandFORCE_COLORsay, and-Vis short for--version.- Each finding on a key gives the key's line and column, so an editor or code scanning can jump to it (docs/output.md).
- A mistyped rule id,
--formatvalue orwrite-manifestsfield gets a "did you mean" suggestion. On Python before 3.14, option values get none.
Changed
- Breaking:
codemeta-versionhas no default. When it's unset, any CodeMeta version passes andcitesync writeleaves@contextalone. - Breaking: a file listed in the
filessetting that doesn't exist is afile-missingerror. 0.1.0 skipped it. - The field mapping comes from codemeta-drift 0.3.0, which adds contributors, release dates and SWHIDs.
citesync checkstarts about a third faster.- Breaking:
write-manifests = "all"means the six manifest fields, and naming any other field is a config error. - A keyword finding between citation files lists the missing and extra words, not both files' lists.
- A missing source file names the directory citesync looked in. Run outside any citation files, citesync uses the git root, and
--rootmust be a directory. - A bad
ignoreentry is named in the error, and an unquotedcodemeta-version = 3.0says to write it as a string (docs/config.md). - The warning about an unused
ignoreentry is quiet under-q.
Fixed
citesync writedropped an author's ORCID when the source renamed them and had no ORCID for them. It now leaves that file's authors for you to edit (docs/write.md).citesync writewrote a CITATION.cff entity (an author with only a name) to codemeta.json as aPerson. It's now anOrganization.citesync writereformatted the existing entries of a JSON author list when it added an author.python -m citesyncfailed with "No module namedcitesync.__main__".- With
doi: ""in CITATION.cff, the DOI underidentifierswas ignored. - codemeta.json entries written with
typeandidinstead of@typeand@idwere ignored. - A name in one string, such as codemeta.json
name, written family name first (Tu Youyou,屠呦呦) was anauthor-mismatchagainst CITATION.cff's given and family names, andcitesync writerewrote it. - A title with an accent typed two different ways didn't match itself.
citesync writefolded an author'sname-particleandname-suffixintofamily-nameswhen it changed the given name.- GitHub annotations didn't attach to their files when the root was a subdirectory of the git repo.
- codemeta.json keywords given as one string weren't split on full-width (
,) or ideographic (、) commas. - A manifest or .zenodo.json that starts with a byte order mark gave a confusing parser error.
- A file behind a symlink that points out of the repo was read, and
writecould change it. It's nowunreadable. - Control characters in a file could retitle the terminal or hide lines. They now print as
\xNN. - Printing non-ASCII text to a stdout that isn't UTF-8, such as a Windows pipe, crashed.
- Some inputs made
citesync checkrun for minutes, such as an author string with a long run of spaces or a keyword list thousands long. - A repository URL with whitespace before a trailing slash, such as
https://example.org/r /, kept that whitespace when read. citesync writedropped the comments above a---line at the top of CITATION.cff.- An author with an ORCID and no name was written to pyproject.toml, Cargo.toml or package.json as an empty entry, one more on each run.
citesync writenow leaves that list for a hand edit and says why. citesync writeturned every line end of a file with both LF and CRLF line ends into CRLF, even when it changed nothing else. It now keeps the more common one (docs/write.md).