oidmap: Enhance the khash wrapper
tests: Add "describe" test repository

Built with the following script:

	#!/bin/sh

	test_tick () {
		sleep 10
	}

	test_tick &&
	echo one >file && git add file && git commit -m initial &&
	one=$(git rev-parse HEAD) &&

	git describe --always HEAD &&

	test_tick &&
	echo two >file && git add file && git commit -m second &&
	two=$(git rev-parse HEAD) &&

	test_tick &&
	echo three >file && git add file && git commit -m third &&

	test_tick &&
	echo A >file && git add file && git commit -m A &&
	test_tick &&
	git tag -a -m A A &&

	test_tick &&
	echo c >file && git add file && git commit -m c &&
	test_tick &&
	git tag c &&

	git reset --hard $two &&
	test_tick &&
	echo B >side && git add side && git commit -m B &&
	test_tick &&
	git tag -a -m B B &&

	test_tick &&
	git merge -m Merged c &&
	merged=$(git rev-parse HEAD) &&

	git reset --hard $two &&
	test_tick &&
	echo D >another && git add another && git commit -m D &&
	test_tick &&
	git tag -a -m D D &&
	test_tick &&
	git tag -a -m R R &&

	test_tick &&
	echo DD >another && git commit -a -m another &&

	test_tick &&
	git tag e &&

	test_tick &&
	echo DDD >another && git commit -a -m "yet another" &&

	test_tick &&
	git merge -m Merged $merged &&

	test_tick &&
	echo X >file && echo X >side && git add file side &&
	git commit -m x
object: introduce git_describe_object()
Added test for stashing files in ignored directories
Recurse ignored directories when stashing
Merge pull request #2581 from jacquesg/stash-ignored-directories

Stash ignored directories
the wiki, it is dead
Merge remote-tracking branch 'upstream/master' into cmn/describe
describe: rename _object() to _commit()

We don't describe arbitrary object, so let's give it the name of the one
object type we accept.
describe: split into gather and format steps

Instead of printing out to the buffer inside the information-gathering
phase, write the data to a intermediate result structure.

This allows us to split the options into gathering options and
formatting options, simplifying the gathering code.
describe: implement describing the workdir

When we describe the workdir, we perform a describe on HEAD and then
check to see if the worktree is dirty. If it is and we have a suffix
string, we append that to the buffer.
describe: implement abbreviated ids
describe: use globs in the tests

This makes us be closer to git's tests, and lets us better describe what
we expect from the output.
describe: rename git_describe_opts to git_describe_options

And implement the option init functions for this and the format options.
describe: make mingw happy

The MinGW compiler does not like it when we declare a typedef twice.
describe: document the API
remote: allow overriding the refspecs for download and fetch

With opportunistic ref updates, git has introduced the concept of having
base refspecs *and* refspecs that are active for a particular fetch.

Let's start by letting the user override the refspecs for download.
remote: use active refspec override in the tests

This lets us test this bit as well as getting closer to what they were
trying to do.
remote: don't DWIM refspecs unnecessarily

We can only DWIM when we've connected to the remote and have the list of
the remote's references. Adding or setting the refspecs should not
trigger an attempt to DWIM the refspecs as we typically cannot do it,
and even if we did, we would not use them for the current fetch.
remote: store passive refspecs

The configured/base fetch refspecs need to be taken into account in
order to implement opportunistic remote-tracking branch updates. DWIM
them and store them in the struct, but don't do anything with them yet.