Staging
v0.5.2
https://github.com/git/git
Revision d09e79cb1c474b3bb323356e6d1072922ab7ccb2 authored by Linus Torvalds on 16 November 2006, 19:47:22 UTC, committed by Junio C Hamano on 17 November 2006, 07:45:48 UTC
We used to complain that we cannot merge anything we fetched
with a local branch that does not exist yet.  Just treat the
case as a natural extension of fast forwarding and make the
local branch'es tip point at the same commit we just fetched.
After all an empty repository without an initial commit is an
ancestor of any commit.

[jc: I added a trivial test.  We've become sloppy but we should
 stick to the discipline of covering new behaviour with new
 tests. ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent 73fbd33
Raw File
Tip revision: d09e79cb1c474b3bb323356e6d1072922ab7ccb2 authored by Linus Torvalds on 16 November 2006, 19:47:22 UTC
git-pull: allow pulling into an empty repository
Tip revision: d09e79c
builtin-tar-tree.c
/*
 * Copyright (c) 2005, 2006 Rene Scharfe
 */
#include <time.h>
#include "cache.h"
#include "commit.h"
#include "tar.h"
#include "builtin.h"
#include "quote.h"

static const char tar_tree_usage[] =
"git-tar-tree [--remote=<repo>] <tree-ish> [basedir]\n"
"*** Note that this command is now deprecated; use git-archive instead.";

int cmd_tar_tree(int argc, const char **argv, const char *prefix)
{
	/*
	 * git-tar-tree is now a wrapper around git-archive --format=tar
	 *
	 * $0 --remote=<repo> arg... ==>
	 *	git-archive --format=tar --remote=<repo> arg...
	 * $0 tree-ish ==>
	 *	git-archive --format=tar tree-ish
	 * $0 tree-ish basedir ==>
	 * 	git-archive --format-tar --prefix=basedir tree-ish
	 */
	int i;
	const char **nargv = xcalloc(sizeof(*nargv), argc + 2);
	char *basedir_arg;
	int nargc = 0;

	nargv[nargc++] = "git-archive";
	nargv[nargc++] = "--format=tar";

	if (2 <= argc && !strncmp("--remote=", argv[1], 9)) {
		nargv[nargc++] = argv[1];
		argv++;
		argc--;
	}
	switch (argc) {
	default:
		usage(tar_tree_usage);
		break;
	case 3:
		/* base-path */
		basedir_arg = xmalloc(strlen(argv[2]) + 11);
		sprintf(basedir_arg, "--prefix=%s/", argv[2]);
		nargv[nargc++] = basedir_arg;
		/* fallthru */
	case 2:
		/* tree-ish */
		nargv[nargc++] = argv[1];
	}
	nargv[nargc] = NULL;

	fprintf(stderr,
		"*** git-tar-tree is now deprecated.\n"
		"*** Running git-archive instead.\n***");
	for (i = 0; i < nargc; i++) {
		fputc(' ', stderr);
		sq_quote_print(stderr, nargv[i]);
	}
	fputc('\n', stderr);
	return cmd_archive(nargc, nargv, prefix);
}

/* ustar header + extended global header content */
#define RECORDSIZE	(512)
#define HEADERSIZE (2 * RECORDSIZE)

int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix)
{
	char buffer[HEADERSIZE];
	struct ustar_header *header = (struct ustar_header *)buffer;
	char *content = buffer + RECORDSIZE;
	ssize_t n;

	n = xread(0, buffer, HEADERSIZE);
	if (n < HEADERSIZE)
		die("git-get-tar-commit-id: read error");
	if (header->typeflag[0] != 'g')
		return 1;
	if (memcmp(content, "52 comment=", 11))
		return 1;

	n = xwrite(1, content + 11, 41);
	if (n < 41)
		die("git-get-tar-commit-id: write error");

	return 0;
}
back to top