Go to file
Junio C Hamano 388c7f8a27 mailmap: remove email copy and length limitation
In map_user(), we have email pointer that points at the beginning of
an e-mail address, but the buffer is not terminated with a NUL after
the e-mail address.  It typically has ">" after the address, and it
could have even more if it comes from author/committer line in a
commit object.  Or it may not have ">" after it.

We used to copy the e-mail address proper into a temporary buffer
before asking the string-list API to find the e-mail address in the
mailmap, because string_list_lookup() function only takes a NUL
terminated full string.

Introduce a helper function lookup_prefix that takes the email
pointer and the length, and finds a matching entry in the string
list used for the mailmap, by doing the following:

 - First ask string_list_find_insert_index() where in its sorted
   list the e-mail address we have (including the possible trailing
   junk ">...") would be inserted.

 - It could find an exact match (e.g. we had a clean e-mail address
   without any trailing junk).  We can return the item in that case.

 - Or it could return the index of an item that sorts after the
   e-mail address we have.

 - If we did not find an exact match against a clean e-mail address,
   then the record we are looking for in the mailmap has to exist
   before the index returned by the function (i.e. "email>junk"
   always sorts later than "email").  Iterate, starting from that
   index, down the map->items[] array until we find the exact record
   we are looking for, or we see a record with a key that definitely
   sorts earlier than the e-mail we are looking for (i.e. when we
   are looking for "email" in "email>junk", a record in the mailmap
   that begins with "emaik" strictly sorts before "email", if such a
   key existed in the mailmap).

This, together with the earlier enhancement to support
case-insensitive sorting, allow us to remove an extra copy of email
buffer to downcase it.

A part of this is based on Antoine Pelisse's previous work.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-01-10 12:32:35 -08:00
Documentation Sync with 1.8.0.2 2012-12-10 13:07:12 -08:00
block-sha1 Merge branch 'jn/block-sha1' into maint 2012-08-06 15:40:00 -07:00
builtin Use split_ident_line to parse author and committer 2013-01-07 15:59:32 -08:00
compat Merge branch 'nd/maint-compat-fnmatch-fix' into maint 2012-11-27 13:29:00 -08:00
contrib Merge branch 'fc/remote-hg' 2012-11-29 12:53:50 -08:00
git-gui git-gui 0.17.0 2012-10-17 15:55:46 -07:00
git_remote_helpers
…
gitk-git Merge branch 'da/gitk-reload-tag-contents' into maint-1.7.11 2012-09-14 20:45:55 -07:00
gitweb Merge branch 'pp/gitweb-config-underscore' 2012-11-29 12:52:17 -08:00
mergetools Merge branch 'da/mergetools-p4' into maint 2012-11-18 19:31:40 -08:00
perl git svn: work around SVN 1.7 mishandling of svn:special changes 2012-10-10 20:02:33 +00:00
po Merge branch git://github.com/ralfth/git-po-de 2012-12-07 17:30:02 +08:00
ppc
…
t Makefile: whitespace style fixes in macro definitions 2012-12-10 08:35:56 -08:00
templates
…
vcs-svn remote-svn: add incremental import 2012-10-07 14:10:17 -07:00
xdiff
…
.gitattributes
…
.gitignore Merge branch 'fa/remote-svn' 2012-10-25 06:42:02 -04:00
.mailmap Update mailmap for a handful of folks 2012-09-03 16:24:23 -07:00
COPYING
…
GIT-VERSION-GEN Git 1.8.0.2 2012-12-10 13:05:47 -08:00
INSTALL
…
LGPL-2.1
…
Makefile Makefile: whitespace style fixes in macro definitions 2012-12-10 08:35:56 -08:00
README
…
RelNotes Start preparing for 1.8.0.2 2012-11-28 13:40:02 -08:00
abspath.c real_path(): properly handle nonexistent top-level paths 2012-09-06 16:19:58 -07:00
aclocal.m4
…
advice.c Merge branch 'jk/maint-advise-vaddf' into maint 2012-07-30 13:05:25 -07:00
advice.h
…
alias.c
…
alloc.c
…
archive-tar.c
…
archive-zip.c archive-zip: write extended timestamp 2012-09-24 10:22:03 -07:00
archive.c Reduce translations by using same terminologies 2012-08-22 12:02:28 -07:00
archive.h
…
argv-array.c Merge branch 'fa/remote-svn' 2012-10-25 06:42:02 -04:00
argv-array.h Merge branch 'fa/remote-svn' 2012-10-25 06:42:02 -04:00
attr.c Merge branch 'nd/attr-match-optim-more' 2012-11-09 12:42:25 -05:00
attr.h
…
base85.c
…
bisect.c Move estimate_bisect_steps to libgit.a 2012-10-29 03:08:30 -04:00
bisect.h Move print_commit_list to libgit.a 2012-10-29 03:08:30 -04:00
blob.c
…
blob.h
…
branch.c
…
branch.h
…
builtin.h Move setup_diff_pager to libgit.a 2012-10-29 03:08:30 -04:00
bulk-checkin.c
…
bulk-checkin.h
…
bundle.c
…
bundle.h
…
cache-tree.c
…
cache-tree.h
…
cache.h ident: keep separate "explicit" flags for author and committer 2012-11-15 17:47:24 -08:00
check-builtins.sh
…
check-racy.c
…
check_bindir
…
color.c
…
color.h
…
column.c
…
column.h
…
combine-diff.c Merge branch 'jk/maint-null-in-trees' into maint-1.7.11 2012-09-10 15:24:54 -07:00
command-list.txt command-list: mention git-credential-* helpers 2012-08-08 12:11:54 -07:00
commit.c Move print_commit_list to libgit.a 2012-10-29 03:08:30 -04:00
commit.h Merge branch 'jc/prettier-pretty-note' 2012-11-15 10:25:05 -08:00
config.c Merge branch 'jk/config-ignore-duplicates' 2012-11-21 13:16:44 -08:00
config.mak.in Makefile: whitespace style fixes in macro definitions 2012-12-10 08:35:56 -08:00
configure.ac Merge branch 'sl/maint-configure-messages' 2012-11-04 08:00:13 -05:00
connect.c Merge branch 'jc/capabilities' into maint 2012-09-11 11:06:45 -07:00
connected.c
…
connected.h
…
convert.c
…
convert.h
…
copy.c
…
credential-cache--daemon.c
…
credential-cache.c
…
credential-store.c
…
credential.c credential: convert "url" attribute into its parsed subparts 2012-07-18 13:26:58 -07:00
credential.h
…
csum-file.c
…
csum-file.h
…
ctype.c
…
daemon.c daemon: --access-hook option 2012-08-15 11:01:55 -07:00
date.c Merge branch 'jc/maint-filter-branch-epoch-date' into maint 2012-07-30 13:04:18 -07:00
decorate.c
…
decorate.h
…
delta.h
…
diff-delta.c
…
diff-lib.c diff: do not use null sha1 as a sentinel value 2012-07-29 15:04:32 -07:00
diff-no-index.c Merge branch 'tr/void-diff-setup-done' into maint-1.7.11 2012-09-11 10:53:40 -07:00
diff.c Merge branch 'lt/diff-stat-show-0-lines' 2012-11-29 12:53:54 -08:00
diff.h Move setup_diff_pager to libgit.a 2012-10-29 03:08:30 -04:00
diffcore-break.c
…
diffcore-delta.c
…
diffcore-order.c
…
diffcore-pickaxe.c pickaxe: use textconv for -S counting 2012-10-28 08:48:17 -04:00
diffcore-rename.c Merge branch 'jk/maint-null-in-trees' into maint-1.7.11 2012-09-10 15:24:54 -07:00
diffcore.h Merge branch 'jk/maint-null-in-trees' into maint-1.7.11 2012-09-10 15:24:54 -07:00
dir.c Merge branch 'nd/attr-match-optim-more' 2012-11-09 12:42:25 -05:00
dir.h attr: more matching optimizations from .gitignore 2012-10-15 14:57:17 -07:00
editor.c
…
entry.c
…
environment.c git on Mac OS and precomposed unicode 2012-07-08 22:03:46 -07:00
exec_cmd.c
…
exec_cmd.h
…
fast-import.c Merge branch 'jc/merge-bases' 2012-09-11 11:36:05 -07:00
fetch-pack.c fetch-pack: move core code to libgit.a 2012-10-29 03:40:29 -04:00
fetch-pack.h filter_refs(): delete matched refs from sought list 2012-09-12 11:46:31 -07:00
fixup-builtins
…
fmt-merge-msg.h
…
fsck.c Merge branch 'jk/maint-null-in-trees' into maint-1.7.11 2012-09-10 15:24:54 -07:00
fsck.h
…
generate-cmdlist.sh
…
gettext.c fetch: align per-ref summary report in UTF-8 locales 2012-09-14 12:45:50 -07:00
gettext.h Merge branch 'nd/fetch-status-alignment' 2012-09-18 14:35:55 -07:00
git-add--interactive.perl
…
git-am.sh Merge branch 'nd/am-i18n-fix' 2012-09-07 11:09:04 -07:00
git-archimport.perl
…
git-bisect.sh
…
git-compat-util.h Merge branch 'js/format-2047' into maint 2012-11-20 09:57:44 -08:00
git-cvsexportcommit.perl
…
git-cvsimport.perl cvsimport: work around perl tzset issue 2012-11-04 08:02:41 -05:00
git-cvsserver.perl cvsserver status: provide real sticky info 2012-10-16 16:16:27 -07:00
git-difftool--helper.sh
…
git-difftool.perl difftool: silence warning 2012-08-21 15:27:15 -07:00
git-filter-branch.sh filter-branch: use git-sh-setup's ident parsing functions 2012-10-18 15:43:49 -07:00
git-instaweb.sh
…
git-lost-found.sh
…
git-merge-octopus.sh
…
git-merge-one-file.sh
…
git-merge-resolve.sh
…
git-mergetool--lib.sh Merge branch 'da/mergetool-custom' 2012-10-01 12:58:57 -07:00
git-mergetool.sh mergetool: style fixes 2012-08-23 21:30:51 -07:00
git-p4.py Merge branch 'pw/maint-p4-rcs-expansion-newline' into maint 2012-11-28 12:04:50 -08:00
git-parse-remote.sh push/pull: adjust missing upstream help text to changed interface 2012-11-08 11:32:38 -05:00
git-pull.sh git-pull: Avoid merge-base on detached head 2012-10-25 05:32:11 -04:00
git-quiltimport.sh
…
git-rebase--am.sh
…
git-rebase--interactive.sh Merge branch 'aw/rebase-i-edit-todo' 2012-09-29 22:28:12 -07:00
git-rebase--merge.sh
…
git-rebase.sh rebase -i: Teach "--edit-todo" action 2012-09-17 20:59:14 -07:00
git-relink.perl
…
git-remote-testgit.py
…
git-repack.sh
…
git-request-pull.sh
…
git-send-email.perl Merge branch 'km/send-email-remove-cruft-in-address' 2012-11-29 12:52:49 -08:00
git-sh-i18n.sh
…
git-sh-setup.sh git-sh-setup: refactor ident-parsing functions 2012-10-18 15:40:13 -07:00
git-stash.sh Merge branch 'ph/stash-rerere' into maint-1.7.11 2012-09-11 11:10:12 -07:00
git-submodule.sh Merge branch 'wtk/submodule-doc-fixup' 2012-11-21 13:25:42 -08:00
git-svn.perl git-svn: use path accessor for Git::SVN objects 2012-10-05 22:48:12 +00:00
git-web--browse.sh
…
git.c Move setup_diff_pager to libgit.a 2012-10-29 03:08:30 -04:00
git.spec.in
…
gpg-interface.c
…
gpg-interface.h
…
graph.c graph.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -07:00
graph.h graph.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -07:00
grep.c Merge branch 'nd/grep-true-path' into maint 2012-11-18 19:32:30 -08:00
grep.h Merge branch 'nd/grep-true-path' into maint 2012-11-18 19:32:30 -08:00
hash.c
…
hash.h
…
help.c help.c::exclude_cmds(): plug a leak 2012-07-25 11:08:59 -07:00
help.h
…
hex.c
…
http-backend.c
…
http-fetch.c
…
http-push.c Merge branch 'jc/merge-bases' 2012-09-11 11:36:05 -07:00
http-walker.c Rename static function fetch_pack() to http_fetch_pack() 2012-09-12 11:46:31 -07:00
http.c Merge branch 'sz/maint-curl-multi-timeout' 2012-11-09 12:50:56 -05:00
http.h http: do not set up curl auth after a 401 2012-10-12 09:45:15 -07:00
ident.c ident: keep separate "explicit" flags for author and committer 2012-11-15 17:47:24 -08:00
imap-send.c
…
kwset.c
…
kwset.h
…
levenshtein.c
…
levenshtein.h
…
list-objects.c
…
list-objects.h
…
ll-merge.c Merge branch 'jc/ll-merge-binary-ours' into maint 2012-10-17 10:26:51 -07:00
ll-merge.h
…
lockfile.c
…
log-tree.c format-patch: add a blank line between notes and diffstat 2012-11-13 15:02:46 -08:00
log-tree.h
…
mailmap.c mailmap: remove email copy and length limitation 2013-01-10 12:32:35 -08:00
mailmap.h
…
match-trees.c
…
merge-file.c
…
merge-file.h
…
merge-recursive.c Merge branch 'rj/path-cleanup' 2012-09-14 11:53:53 -07:00
merge-recursive.h Move try_merge_command and checkout_fast_forward to libgit.a 2012-10-29 03:08:30 -04:00
merge.c Move try_merge_command and checkout_fast_forward to libgit.a 2012-10-29 03:08:30 -04:00
mergesort.c
…
mergesort.h
…
name-hash.c
…
notes-cache.c
…
notes-cache.h
…
notes-merge.c Sync with 1.7.11.6 2012-09-11 11:23:54 -07:00
notes-merge.h
…
notes.c Merge branch 'jc/same-encoding' into maint 2012-12-07 14:10:56 -08:00
notes.h format_note(): simplify API 2012-10-17 22:42:40 -07:00
object.c
…
object.h
…
pack-check.c
…
pack-refs.c
…
pack-refs.h
…
pack-revindex.c
…
pack-revindex.h
…
pack-write.c
…
pack.h
…
pager.c Move setup_diff_pager to libgit.a 2012-10-29 03:08:30 -04:00
parse-options-cb.c
…
parse-options.c git on Mac OS and precomposed unicode 2012-07-08 22:03:46 -07:00
parse-options.h i18n: mark "style" in OPT_COLUMN() for translation 2012-08-20 12:23:14 -07:00
patch-delta.c
…
patch-ids.c diff_setup_done(): return void 2012-08-03 12:11:07 -07:00
patch-ids.h
…
path.c path.c: Use vsnpath() in the implementation of git_path() 2012-09-04 13:34:46 -07:00
pkt-line.c
…
pkt-line.h
…
preload-index.c
…
pretty.c Use split_ident_line to parse author and committer 2013-01-07 15:59:32 -08:00
progress.c
…
progress.h
…
prompt.c
…
prompt.h
…
quote.c
…
quote.h
…
reachable.c
…
reachable.h
…
read-cache.c read-cache.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
reflog-walk.c
…
reflog-walk.h
…
refs.c Merge branch 'jh/update-ref-d-through-symref' into maint 2012-11-27 13:28:45 -08:00
refs.h
…
remote-curl.c Merge branch 'jk/maint-http-half-auth-fetch' 2012-11-21 11:59:29 -08:00
remote-testsvn.c remote-svn: add marks-file regeneration 2012-10-07 14:10:17 -07:00
remote.c Merge branch 'mm/status-push-pull-advise' 2012-12-03 09:28:43 -08:00
remote.h
…
replace_object.c
…
rerere.c rerere.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -07:00
rerere.h rerere.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -07:00
resolve-undo.c
…
resolve-undo.h
…
revision.c Merge branch 'jc/prettier-pretty-note' 2012-11-15 10:25:05 -08:00
revision.h format-patch --notes: show notes after three-dashes 2012-10-17 22:42:40 -07:00
run-command.c Merge branch 'jk/no-more-pre-exec-callback' 2012-10-25 06:41:15 -04:00
run-command.h
…
send-pack.c send-pack: move core code to libgit.a 2012-10-29 03:08:30 -04:00
send-pack.h
…
sequencer.c Merge branch 'jc/same-encoding' into maint 2012-12-07 14:10:56 -08:00
sequencer.h Merge branch 'jc/make-static' 2012-09-18 14:37:46 -07:00
server-info.c
…
setup.c Merge branch 'maint-1.7.11' into maint 2012-09-10 15:31:06 -07:00
sh-i18n--envsubst.c
…
sha1-array.c sha1-array.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
sha1-array.h sha1-array.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
sha1-lookup.c
…
sha1-lookup.h
…
sha1_file.c link_alt_odb_entries(): take (char *, len) rather than two pointers 2012-11-08 12:06:53 -05:00
sha1_name.c Merge branch 'jc/sha1-name-more' 2012-07-22 12:55:07 -07:00
shallow.c
…
shell.c
…
shortlog.h
…
show-index.c
…
sideband.c
…
sideband.h
…
sigchain.c
…
sigchain.h
…
strbuf.c strbuf_split*(): rename "delim" parameter to "terminator" 2012-11-04 06:46:55 -05:00
strbuf.h strbuf_split*(): document functions 2012-11-04 06:46:55 -05:00
streaming.c
…
streaming.h
…
string-list.c string-list: allow case-insensitive string list 2013-01-07 15:59:32 -08:00
string-list.h string-list: allow case-insensitive string list 2013-01-07 15:59:32 -08:00
submodule.c submodule: display summary header in bold 2012-11-18 19:18:13 -08:00
submodule.h submodule: display summary header in bold 2012-11-18 19:18:13 -08:00
symlinks.c symlinks.c: mark private file-scope symbols as static 2012-09-15 22:58:21 -07:00
tag.c
…
tag.h
…
tar.h
…
test-chmtime.c
…
test-ctype.c
…
test-date.c
…
test-delta.c
…
test-dump-cache-tree.c
…
test-genrandom.c
…
test-index-version.c
…
test-line-buffer.c vcs-svn: drop no-op reset methods 2012-07-05 23:26:51 -05:00
test-match-trees.c
…
test-mergesort.c
…
test-mktemp.c
…
test-parse-options.c
…
test-path-utils.c
…
test-regex.c test-regex: Add a test to check for a bug in the regex routines 2012-09-02 18:57:21 -07:00
test-revision-walking.c
…
test-run-command.c
…
test-scrap-cache-tree.c
…
test-sha1.c
…
test-sha1.sh
…
test-sigchain.c
…
test-string-list.c test-string-list.c: Fix some sparse warnings 2012-09-15 23:33:58 -07:00
test-subprocess.c
…
test-svn-fe.c remote-svn: add incremental import 2012-10-07 14:10:17 -07:00
thread-utils.c
…
thread-utils.h
…
trace.c trace.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
transport-helper.c When debug==1, start fast-import with "--stats" instead of "--quiet" 2012-10-07 14:10:17 -07:00
transport.c filter_refs(): delete matched refs from sought list 2012-09-12 11:46:31 -07:00
transport.h send-pack: move core code to libgit.a 2012-10-29 03:08:30 -04:00
tree-diff.c Merge branch 'tr/void-diff-setup-done' into maint-1.7.11 2012-09-11 10:53:40 -07:00
tree-walk.c Merge branch 'nd/tree-walk-enum-cleanup' 2012-11-09 12:51:03 -05:00
tree-walk.h
…
tree.c Strip namelen out of ce_flags into a ce_namelen field 2012-07-11 09:42:45 -07:00
tree.h
…
unimplemented.sh
…
unix-socket.c
…
unix-socket.h
…
unpack-trees.c Merge branch 'tg/ce-namelen-field' 2012-07-23 20:55:21 -07:00
unpack-trees.h
…
upload-pack.c upload-pack: use peel_ref for ref advertisements 2012-10-04 20:34:29 -07:00
url.c
…
url.h
…
usage.c usage.c: detect recursion in die routines and bail out immediately 2012-11-15 18:04:54 -08:00
userdiff.c Add userdiff patterns for Ada 2012-09-16 21:54:47 -07:00
userdiff.h
…
utf8.c Merge branch 'jc/same-encoding' into maint 2012-12-07 14:10:56 -08:00
utf8.h reencode_string(): introduce and use same_encoding() 2012-11-04 08:10:33 -05:00
varint.c
…
varint.h
…
version.c include agent identifier in capability string 2012-08-03 13:03:34 -07:00
version.h include agent identifier in capability string 2012-08-03 13:03:34 -07:00
walker.c
…
walker.h
…
wrap-for-bin.sh
…
wrapper.c warn_on_inaccessible(): a helper to warn on inaccessible paths 2012-08-21 14:52:07 -07:00
write_or_die.c maybe_flush_or_die: move a too-loose Windows specific error 2012-10-17 00:33:42 -07:00
ws.c
…
wt-status.c wt-status.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
wt-status.h wt-status.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
xdiff-interface.c
…
xdiff-interface.h
…
zlib.c
…

README

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org (read
Documentation/SubmittingPatches for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
available at http://marc.theaimsgroup.com/?l=git and other archival
sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.