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()
Allow to propagate checkout callbacks to git HARD reset

Signed-off-by: Sven Strickroth <email@cs-ware.de>
Can read large file larger than 2GB on Windows
When updating FETCH_HEAD, do not treat it as error if the remote of current branch is from another remote
Add network::fetchlocal multi remotes test
Fix warnings in thread-utils.h when building without -DTHREADSAFE=ON

The compiler was generating a bunch of warnings for
git_mutex_init and git_mutex_lock when GIT_THREADS
was not defined (i.e. when not using -DTHREADSAFE=ON).

Also remove an unused variable from tests/path/core.c.
Provide host name to certificate_check_cb

Signed-off-by: Sven Strickroth <email@cs-ware.de>
Join typedef and struct definitions in single file.
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.