Go to file
Patrick Steinhardt c98d762ed9 global: ensure that object IDs are always padded
The `oidcmp()` and `oideq()` functions only compare the prefix length as
specified by the given hash algorithm. This mandates that the object IDs
have a valid hash algorithm set, or otherwise we wouldn't be able to
figure out that prefix. As we do not have a hash algorithm in many
cases, for example when handling null object IDs, this assumption cannot
always be fulfilled. We thus have a fallback in place that instead uses
`the_repository` to derive the hash function. This implicit dependency
is hidden away from callers and can be quite surprising, especially in
contexts where there may be no repository.

In theory, we can adapt those functions to always memcmp(3P) the whole
length of their hash arrays. But there exist a couple of sites where we
populate `struct object_id`s such that only the prefix of its hash that
is actually used by the hash algorithm is populated. The remaining bytes
are left uninitialized. The fact that those bytes are uninitialized also
leads to warnings under Valgrind in some places where we copy those
bytes.

Refactor callsites where we populate object IDs to always initialize all
bytes. This also allows us to get rid of `oidcpy_with_padding()`, for
one because the input is now fully initialized, and because `oidcpy()`
will now always copy the whole hash array.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-06-14 10:26:32 -07:00
.github Merge branch 'fixes/2.45.1/2.44' into jc/fix-2.45.1-and-friends-for-maint 2024-05-24 16:59:12 -07:00
Documentation Merge branch 'ps/ref-storage-migration' into ps/use-the-repository 2024-06-13 09:39:08 -07:00
block-sha1
builtin hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
ci Merge branch 'ps/ci-python-2-deprecation' into maint-2.45 2024-05-31 15:28:19 -07:00
compat Merge branch 'ma/win32-unix-domain-socket' into maint-2.45 2024-05-31 15:28:21 -07:00
contrib Merge branch 'kn/osxkeychain-skip-idempotent-store' 2024-05-28 11:17:11 -07:00
ewah
git-gui
gitk-git
gitweb
mergetools Switch grep from non-portable BRE to portable ERE 2024-05-17 12:13:18 -07:00
negotiator
oss-fuzz
perl
po
refs hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
reftable Merge branch 'ps/ref-storage-migration' into ps/use-the-repository 2024-06-13 09:39:08 -07:00
sha1
sha1collisiondetection@855827c583
sha1dc
sha256
t hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
templates
trace2
xdiff
.cirrus.yml
.clang-format
.editorconfig
.gitattributes
.gitignore builtin/refs: new command to migrate ref storage formats 2024-06-06 09:04:34 -07:00
.gitlab-ci.yml
.gitmodules
.mailmap
.tsan-suppressions
CODE_OF_CONDUCT.md
COPYING
GIT-VERSION-GEN Git 2.45.2 2024-05-30 17:18:43 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'gt/unit-test-oidtree' into ps/use-the-repository 2024-06-13 09:39:46 -07:00
README.md
RelNotes Git 2.45.2 2024-05-30 17:18:43 -07:00
SECURITY.md
abspath.c
abspath.h
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c add-patch: enforce only one-letter response to prompts 2024-05-22 14:46:31 -07:00
advice.c
advice.h
alias.c config: plug various memory leaks 2024-05-27 11:20:00 -07:00
alias.h
alloc.c
alloc.h
apply.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
apply.h
archive-tar.c
archive-zip.c
archive.c
archive.h
attr.c Merge branch 'ps/leakfixes' 2024-06-06 12:49:23 -07:00
attr.h config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
banned.h
base85.c
base85.h
bisect.c
bisect.h
blame.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
blame.h
blob.c
blob.h
bloom.c
bloom.h
branch.c Merge branch 'kn/ref-transaction-symref' 2024-05-20 11:20:04 -07:00
branch.h
builtin.h builtin/refs: new command to migrate ref storage formats 2024-06-06 09:04:34 -07:00
bulk-checkin.c
bulk-checkin.h
bundle-uri.c
bundle-uri.h
bundle.c
bundle.h
cache-tree.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
cache-tree.h
cbtree.c
cbtree.h
chdir-notify.c
chdir-notify.h
check-builtins.sh
checkout.c checkout: clarify memory ownership in `unique_tracking_name()` 2024-05-27 11:19:58 -07:00
checkout.h checkout: clarify memory ownership in `unique_tracking_name()` 2024-05-27 11:19:58 -07:00
chunk-format.c
chunk-format.h
color.c
color.h
column.c
column.h
combine-diff.c refs: refactor `resolve_gitlink_ref()` to accept a repository 2024-05-17 10:33:38 -07:00
command-list.txt builtin/refs: new command to migrate ref storage formats 2024-06-06 09:04:34 -07:00
commit-graph.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
commit-graph.h
commit-reach.c commit-reach: fix memory leak in `ahead_behind()` 2024-05-27 11:20:01 -07:00
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c
commit.h
common-main.c
config.c Merge branch 'ps/leakfixes' 2024-06-06 12:49:23 -07:00
config.h Merge branch 'ps/leakfixes' 2024-06-06 12:49:23 -07:00
config.mak.dev
config.mak.in
config.mak.uname
configure.ac
connect.c
connect.h
connected.c
connected.h
convert.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
convert.h convert: refactor code to clarify ownership of check_roundtrip_encoding 2024-05-27 11:19:59 -07:00
copy.c Merge branch 'fixes/2.45.1/2.41' into fixes/2.45.1/2.42 2024-05-24 16:57:43 -07:00
copy.h Merge branch 'fixes/2.45.1/2.40' into fixes/2.45.1/2.41 2024-05-24 16:57:02 -07:00
credential.c
credential.h
csum-file.c hash: require hash algorithm in `hasheq()`, `hashcmp()` and `hashclr()` 2024-06-14 10:26:32 -07:00
csum-file.h
ctype.c
daemon.c
date.c
date.h
decorate.c
decorate.h t/: migrate helper/test-example-decorate to the unit testing framework 2024-05-28 13:53:36 -07:00
delta-islands.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
delta-islands.h
delta.h
detect-compiler
diagnose.c
diagnose.h
diff-delta.c
diff-lib.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
diff-merges.c
diff-merges.h
diff-no-index.c
diff.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore-rotate.c
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
dir.h dir.c: always copy input to add_pattern() 2024-06-05 09:51:42 -07:00
editor.c
editor.h
entry.c
entry.h
environment.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
environment.h config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c Merge branch 'ps/leakfixes' 2024-06-06 12:49:23 -07:00
fetch-pack.h
fmt-merge-msg.c
fmt-merge-msg.h
fsck.c Merge branch 'ps/leakfixes' 2024-06-06 12:49:23 -07:00
fsck.h Merge branch 'fixes/2.45.1/2.42' into fixes/2.45.1/2.43 2024-05-24 16:58:11 -07:00
fsmonitor--daemon.h
fsmonitor-ipc.c
fsmonitor-ipc.h
fsmonitor-ll.h
fsmonitor-path-utils.h
fsmonitor-settings.c config: clarify memory ownership in `git_config_pathname()` 2024-05-27 11:19:59 -07:00
fsmonitor-settings.h
fsmonitor.c
fsmonitor.h
generate-cmdlist.sh
generate-configlist.sh
generate-hooklist.sh
gettext.c
gettext.h
git-archimport.perl
git-compat-util.h
git-curl-compat.h
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl Merge branch 'fixes/2.45.1/2.40' into fixes/2.45.1/2.41 2024-05-24 16:57:02 -07:00
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git-zlib.c
git-zlib.h
git.c builtin/refs: new command to migrate ref storage formats 2024-06-06 09:04:34 -07:00
git.rc
gpg-interface.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
gpg-interface.h
graph.c
graph.h
grep.c
grep.h
hash-ll.h global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
hash-lookup.c hash: require hash algorithm in `hasheq()`, `hashcmp()` and `hashclr()` 2024-06-14 10:26:32 -07:00
hash-lookup.h
hash.h global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
hashmap.c
hashmap.h
help.c
help.h
hex-ll.c
hex-ll.h
hex.c global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
hex.h
hook.c Merge branch 'fixes/2.45.1/2.41' into fixes/2.45.1/2.42 2024-05-24 16:57:43 -07:00
hook.h
http-backend.c
http-fetch.c
http-push.c global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
http-walker.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
http.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
http.h
ident.c
ident.h
imap-send.c Merge branch 'jc/t1517-more' 2024-06-12 13:37:14 -07:00
iterator.h
json-writer.c strbuf: introduce strbuf_addstrings() to repeatedly add a string 2024-05-29 09:09:39 -07:00
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c
list-objects-filter-options.h
list-objects-filter.c
list-objects-filter.h
list-objects.c
list-objects.h
list.h
lockfile.c
lockfile.h
log-tree.c
log-tree.h
loose.c
loose.h
ls-refs.c refs: pass repo when peeling objects 2024-05-17 10:33:39 -07:00
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
mailmap.h config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
match-trees.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
match-trees.h
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ll.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
merge-ll.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c
merge-ort.h
merge-recursive.c
merge-recursive.h
merge.c
merge.h
mergesort.h
midx-write.c Merge branch 'tb/midx-write-cleanup' 2024-06-07 10:57:23 -07:00
midx.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
midx.h midx: replace `get_midx_rev_filename()` with a generic helper 2024-05-30 13:43:52 -07:00
name-hash.c
name-hash.h
notes-cache.c
notes-cache.h
notes-merge.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
notes-merge.h
notes-utils.c
notes-utils.h
notes.c global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
notes.h
object-file-convert.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
object-file-convert.h
object-file.c global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
object-file.h
object-name.c
object-name.h
object-store-ll.h
object-store.h
object.c refs: pass repo when peeling objects 2024-05-17 10:33:39 -07:00
object.h Merge branch 'ps/refs-without-the-repository-updates' 2024-05-30 14:15:13 -07:00
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
oidtree.h
pack-bitmap-write.c hash: require hash algorithm in `hasheq()`, `hashcmp()` and `hashclr()` 2024-06-14 10:26:32 -07:00
pack-bitmap.c hash: require hash algorithm in `hasheq()`, `hashcmp()` and `hashclr()` 2024-06-14 10:26:32 -07:00
pack-bitmap.h
pack-check.c hash: require hash algorithm in `hasheq()`, `hashcmp()` and `hashclr()` 2024-06-14 10:26:32 -07:00
pack-mtimes.c
pack-mtimes.h
pack-objects.c
pack-objects.h
pack-revindex.c midx: replace `get_midx_rev_filename()` with a generic helper 2024-05-30 13:43:52 -07:00
pack-revindex.h
pack-write.c hash: require hash algorithm in `hasheq()`, `hashcmp()` and `hashclr()` 2024-06-14 10:26:32 -07:00
pack.h
packfile.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
packfile.h
pager.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
pager.h
parallel-checkout.c global: ensure that object IDs are always padded 2024-06-14 10:26:32 -07:00
parallel-checkout.h
parse-options-cb.c
parse-options.c
parse-options.h
parse.c
parse.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c Merge branch 'ps/undecided-is-not-necessarily-sha1' 2024-05-30 14:15:11 -07:00
path.h
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
preload-index.h
pretty.c config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c Merge branch 'th/quiet-lazy-fetch-from-promisor' 2024-06-06 12:49:24 -07:00
promisor-remote.h config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
prompt.c
prompt.h
protocol-caps.c
protocol-caps.h
protocol.c
protocol.h
prune-packed.c
prune-packed.h
quote.c
quote.h
range-diff.c
range-diff.h
reachable.c
reachable.h
read-cache-ll.h
read-cache.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
read-cache.h
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c Merge branch 'ps/refs-without-the-repository-updates' 2024-05-30 14:15:13 -07:00
ref-filter.h
reflog-walk.c refs: remove `dwim_log()` 2024-05-17 10:33:39 -07:00
reflog-walk.h
reflog.c refs: remove `dwim_log()` 2024-05-17 10:33:39 -07:00
reflog.h
refs.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
refs.h refs: implement logic to migrate between ref storage formats 2024-06-06 09:04:33 -07:00
refspec.c
refspec.h
remote-curl.c Merge branch 'ps/undecided-is-not-necessarily-sha1' 2024-05-30 14:15:11 -07:00
remote.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
remote.h config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
replace-object.c refs: convert iteration over replace refs to accept ref store 2024-05-17 10:33:38 -07:00
replace-object.h
repo-settings.c
repository.c Merge branch 'ps/ref-storage-migration' into ps/use-the-repository 2024-06-13 09:39:08 -07:00
repository.h refs: convert ref storage format to an enum 2024-06-06 09:04:31 -07:00
rerere.c
rerere.h
reset.c Merge branch 'kn/ref-transaction-symref' 2024-05-20 11:20:04 -07:00
reset.h
resolve-undo.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
resolve-undo.h
revision.c
revision.h
run-command.c run-command: show prepared command 2024-05-31 15:47:55 -07:00
run-command.h
sane-ctype.h
scalar.c scalar: make enlistment delete to work on all POSIX platforms 2024-05-17 12:16:25 -07:00
send-pack.c
send-pack.h
sequencer.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
sequencer.h
serve.c
serve.h
server-info.c
server-info.h
setup.c Merge branch 'ps/ref-storage-migration' into ps/use-the-repository 2024-06-13 09:39:08 -07:00
setup.h refs: convert ref storage format to an enum 2024-06-06 09:04:31 -07:00
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c
shallow.h
shared.mak
shell.c
shortlog.h
sideband.c
sideband.h
sigchain.c
sigchain.h
simple-ipc.h
sparse-index.c
sparse-index.h
split-index.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
split-index.h
stable-qsort.c
statinfo.c
statinfo.h
strbuf.c Merge branch 'gt/t-hash-unit-test' 2024-06-12 13:37:15 -07:00
strbuf.h strbuf: introduce strbuf_addstrings() to repeatedly add a string 2024-05-29 09:09:39 -07:00
streaming.c
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h
strvec.c strvec: add functions to replace and remove strings 2024-05-27 11:20:02 -07:00
strvec.h strvec: add functions to replace and remove strings 2024-05-27 11:20:02 -07:00
sub-process.c
sub-process.h
submodule-config.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
submodule-config.h
submodule.c refs: pass repo when retrieving submodule ref store 2024-05-17 10:33:37 -07:00
submodule.h
symlinks.c
symlinks.h
tag.c refs: pass repo when peeling objects 2024-05-17 10:33:39 -07:00
tag.h refs: pass repo when peeling objects 2024-05-17 10:33:39 -07:00
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c Merge branch 'la/hide-trailer-info' 2024-05-23 11:04:27 -07:00
trailer.h Merge branch 'la/hide-trailer-info' 2024-05-23 11:04:27 -07:00
transport-helper.c transport-helper: fix leaking helper name 2024-05-27 11:19:57 -07:00
transport-internal.h
transport.c transport-helper: fix leaking helper name 2024-05-27 11:19:57 -07:00
transport.h
tree-diff.c
tree-walk.c hash: require hash algorithm in `oidread()` and `oidclr()` 2024-06-14 10:26:32 -07:00
tree-walk.h
tree.c
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c refs: refactor `resolve_gitlink_ref()` to accept a repository 2024-05-17 10:33:38 -07:00
unpack-trees.h
upload-pack.c Merge branch 'ps/leakfixes' 2024-06-06 12:49:23 -07:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c
userdiff.h config: clarify memory ownership in `git_config_string()` 2024-05-27 11:20:00 -07:00
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
versioncmp.h
walker.c Merge branch 'kn/ref-transaction-symref' 2024-05-20 11:20:04 -07:00
walker.h
wildmatch.c
wildmatch.h
worktree.c worktree: don't store main worktree twice 2024-06-06 09:04:33 -07:00
worktree.h refs: retrieve worktree ref stores via associated repository 2024-05-17 10:33:38 -07:00
wrap-for-bin.sh
wrapper.c
wrapper.h
write-or-die.c
write-or-die.h
ws.c
ws.h
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h

README.md

Build status

Git - fast, scalable, distributed revision control system

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 version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

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

See Documentation/gittutorial.txt to get started, then see Documentation/giteveryday.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).

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 and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (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