REPOMAPPER(1)
β¨ REPOMAPPER β¨
okay so first things first, the manual name is repomapper and honestly? she's a vibe. let's get into it bestie π
πΈ NAME πΈ
repomapper β update and manipulate contributor maps π«Ά
π SYNOPSIS π
repomapper [-i] [-h 'host'] 'contribmap' [ update-files ]
π¦ DESCRIPTION π¦
okay so picture this: old-school centralized version-control systems like CVS and SVN keep a repository on one host and they identify users by their account names on that host. simple era. π
meanwhile distributed version-control systems like Git and Mercurial identify users by a netwide-unique ID β that's a name-among-humans followed by an email address. iconic, honestly.
so when you're moving a repository from a centralized system to a distributed one, one of the prerequisites is literally compiling a contributor map that associates each account name on the old system to a DVCS-style ID on the new one. and this tool automates parts of that process. she ate. π₯
the main argument file must be a contributor map such as is read by the authors read subcommand of reposurgeon(1). it may be a fresh or stub map, produced by authors write before any human-name or email information has been added to the repository. or it may have name-among-humans and email information filled in for some entries. flexible queen π
a stub map entry looks something like this:
foonly = foonly <foonly>
the same entry, fully filled in, might look something like this:
foonly = Fred Foonly <foonly@fubar.net>
the default behavior of the tool is to report all map entries β in effect, a sorting copy of the file. no cap. β
with -i, it reports only entries that are not yet in DVCS form. like, either the fullname field on the right side of the equals sign is identical to the account name on the left, or the email field contains no @-sign, or both. those are the stragglers and we're calling them out π
additional argument files are mined for entries missing in the stub map. treasure hunt energy π§
an argument file containing an equals sign (=) in its first line, or leading its first line with a hash sign (#), is interpreted as a supplementary map file. each contributor entry with a username not matching any in the first contributor map is copied into the first map, which is output. merging slay π
an argument file containing multiple colons on the first line is interpreted as a Unix password file. only the username and the comment (or 'gecos') field containing the user's name-among-humans are used. other fields are ignored, we don't need them, they're not the main character. for each entry in the contrib file, this program looks for a username in the password file matching the name to the left of the equals sign. if a match is found, the user's name-among-humans is extracted from the gecos field and replaces the text between the = and the <. glow-up in real time β¨
thus, the stub line above and the /etc/passwd line
foonly:x:1000:1000:Fred Foonly,,,:/home/foonly:/bin/bash
will combine to produce this on output:
foonly = Fred Foonly <foonly>
lowkey obsessed with that transformation ngl π¦
note that the email-address part (and, if present, the optional trailing timezone field) are not normally modified when a password file is processed. hands off, she's fine as she is π
however, if the -h option is given, the argument is taken to be a host name which should be appended (after a @) to every email field that does not already contain a @. the argument would typically be the fully-qualified domain name of the repository host. π
thus, if the passwd file still contains an entry for every committer (which might not be the case if inactive committer accounts were ever removed β sad but real π), -p mode combined with an -h option can produce an entire, valid contributor map. periodt. π
if an argument file begins with From it is interpreted as a Unix mailbox file β this mode is intended for mining a project's email archive. the headers are scanned for names. when a name with a user-id part matching an incomplete entry is found, that email address is used to fill in the entry. and if there are multiple matches, the last is kept. last one wins, that's the rule π₯
output from this tool is always a contribution map sorted by username. every single time. no exceptions, bestie π
π SEE ALSO π
reposurgeon(1). go read her too, she's the whole ecosystem π«Ά
π AUTHOR π
Eric S. Raymond esr@thyrsus.com. this tool is distributed with reposurgeon; see the project <http://www.catb.org/~esr/reposurgeon> page.
k that's the whole page bestie, you're fully caught up πβ¨ and for the record β this beaut is dated 2026-09-14, manual name repomapper, section 1. go forth and map those contributors ππ¦πΈ
π¦ where this page comes from
- epel 10: reposurgeon 5.11-1.el10_3 Β· Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms