Commit graph

328 commits

Author SHA1 Message Date
Junio C Hamano f61c2c970c refs.c::do_for_each_ref(): Finish error message lines with "\n"
We used fprintf() to show an error message without terminating
it with LF; use error() for that.

cf. c401cb48e7

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-09 12:59:16 -08:00
Johannes Schindelin c401cb48e7 Warn about invalid refs
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-01 01:15:12 -08:00
Junio C Hamano bd2afde8a3 Give no terminating LF to error() function.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-22 19:10:26 -08:00
Pavel Roskin 2fabd21733 Disable USE_SYMLINK_HEAD by default
Disable USE_SYMLINK_HEAD by default.  Recommend using it only for
compatibility with older software.

Treat USE_SYMLINK_HEAD like other optional defines - check whether it's
defined, not its value.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-19 23:14:31 -08:00
Junio C Hamano f7087e2e7c Revert "We do not like "HEAD" as a new branch name"
This reverts ee34518d62 commit.
2005-12-17 23:10:56 -08:00
Junio C Hamano 8872f27b87 Revert "refs.c: off-by-one fix."
This reverts 06bf6ac424 commit.
2005-12-17 23:10:56 -08:00
Junio C Hamano 68283999f8 Forbid pattern maching characters in refnames.
by marking '?', '*', and '[' as bad_ref_char().

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-16 18:23:52 -08:00
Junio C Hamano 06bf6ac424 refs.c: off-by-one fix.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-15 18:52:51 -08:00
Johannes Schindelin ee34518d62 We do not like "HEAD" as a new branch name
This makes git-check-ref-format fail for "HEAD". Since the check is only
executed when creating refs, the existing symbolic ref is safe.

Otherwise these commands, most likely are pilot errors, would do
pretty funky stuff:

	git checkout -b HEAD
	git pull . other:HEAD

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-15 17:56:32 -08:00
Junio C Hamano 64224caf88 refs.c: make sure leading directories exist before writing a ref.
Otherwise cloning a repository with hierarchical branch/tag
over http would fail.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-07 17:48:53 -08:00
Junio C Hamano 0870ca7fab Do not DWIM in userpath library under strict mode.
This should force git-daemon administrator's job a bit harder
because the exact paths need to be given in the whitelist, but
at the same time makes the auditing easier.

This moves validate_symref() from refs.c to path.c, because we
need to link path.c with git-daemon for its "enter_repo()", but
we do not want to link the daemon with the rest of git libraries
and its requirements.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-19 20:50:38 -08:00
Johannes Schindelin f8348be3be Add config variable core.symrefsonly
This allows you to force git to avoid symlinks for refs. Just add
something like

	[core]
		symrefsonly = true

to .git/config.

Don´t forget to "git checkout your_branch", or it does not do anything...

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-15 11:42:29 -08:00
Johannes Schindelin 303958dc42 create_symref: if symlink fails, fall back to writing a "symbolic ref"
There are filesystems out there which do not understand symlinks, even if
the OS is perfectly capable of writing them. So, do not fail right away,
but try to write a symbolic ref first. If that fails, you can die().

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-25 23:46:15 -07:00
Junio C Hamano 03feddd6e8 git-check-ref-format: reject funny ref names.
Update check_ref_format() function to reject ref names that:

 * has a path component that begins with a ".", or
 * has a double dots "..", or
 * has ASCII control character, "~", "^", ":" or SP, anywhere, or
 * ends with a "/".

Use it in 'git-checkout -b', 'git-branch', and 'git-tag' to make sure
that newly created refs are well-formed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-15 11:23:39 -07:00
Linus Torvalds 4546738b58 Unlocalized isspace and friends
Do our own ctype.h, just to get the sane semantics: we want
locale-independence, _and_ we want the right signed behaviour. Plus we
only use a very small subset of ctype.h anyway (isspace, isalpha,
isdigit and isalnum).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-14 17:17:27 -07:00
Jonas Fonseca 85912b0673 [PATCH] Fix symbolic ref validation
Use the correct buffer when validating 'ref: refs/...'

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-05 10:50:59 -07:00
Junio C Hamano 8098a178b2 Add git-symbolic-ref
This adds the counterpart of git-update-ref that lets you read
and create "symbolic refs".  By default it uses a symbolic link
to represent ".git/HEAD -> refs/heads/master", but it can be compiled
to use the textfile symbolic ref.

The places that did 'readlink .git/HEAD' and 'ln -s refs/heads/blah
.git/HEAD' have been converted to use new git-symbolic-ref command, so
that they can deal with either implementation.

Signed-off-by: Junio C Hamano <junio@twinsun.com>
2005-10-01 23:19:33 -07:00
Junio C Hamano a876ed83be Use resolve_ref() to implement read_ref().
Symbolic refs are understood by resolve_ref(), so existing read_ref()
users will automatically understand them as well.

Signed-off-by: Junio C Hamano <junio@twinsun.com>
2005-10-01 23:19:33 -07:00
Linus Torvalds ca8db1424d [PATCH] Allow reading "symbolic refs" that point to other refs
This extends the ref reading to understand a "symbolic ref": a ref file
that starts with "ref: " and points to another ref file, and thus
introduces the notion of ref aliases.

This is in preparation of allowing HEAD to eventually not be a symlink,
but one of these symbolic refs instead.

[jc: Linus originally required the prefix to be "ref: " five bytes
 and nothing else, but I changed it to allow and strip any number of
 leading whitespaces to match what update-ref.c does.]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-01 23:19:32 -07:00
Matt Draisey a7e66ae3f7 [PATCH] Make do_each_ref() follow symlinks.
Because there is no reason not to, and this makes things a bit
safer when running "git prune".

[jc: I do not necessarily agree with the reasoning of the
original author that it is a good way to keep "git prune" from
stomping on objects to have a symlink that points at .git/refs
of the repository A in the .git/refs of the repository B when
repository A borrows object database from repository B.  For one
thing, the object database that everybody borrows objects from
may not even have its own .git/refs hierarchy.  Come to think of
it, maybe we should disallow symlink inside .git/refs hierarchy;
we update the files there by creat/rename pair, so having
symlinks would not work anyway when you do anything that would
update them.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-16 18:33:51 -07:00
Timo Sirainen 4ec99bf080 [PATCH] -Werror fixes
GCC's format __attribute__ is good for checking errors, especially
with -Wformat=2 parameter. This fixes most of the reported problems
against 2005-08-09 snapshot.
2005-08-09 22:28:19 -07:00
Linus Torvalds 99a0a6e09f Make "for_each_ref()" always use the "canonical" refname.
It always uses a git-relative pathname, ie "refs/heads/master" instead of
".git/refs/heads/master" or whatever your GIT_DIR might be.

This way when we send refs back-and-forth between repositories, there's
never any question about GIT_DIR on either side.
2005-07-08 13:56:05 -07:00
Linus Torvalds 2f34ba32dd Fix silly thinko in "head_ref()"
It did a "for_each_ref()" in addition to the HEAD case, which was a
left-over from an early broken test.
2005-07-05 15:45:00 -07:00
Linus Torvalds 723c31fea2 Add "git_path()" and "head_ref()" helper functions.
"git_path()" returns a static pathname pointer into the git directory
using a printf-like format specifier.

"head_ref()" works like "for_each_ref()", except for just the HEAD.
2005-07-05 11:31:32 -07:00
Linus Torvalds 6cada6a98d Clean up output of "for_each_ref()" when GIT_DIR is "."
Remove the "./" at the head, it just looks much nicer.
2005-07-04 15:28:19 -07:00
Linus Torvalds 944d858969 Fix up "for_each_ref()" to be more usable, and use it in git-fsck-cache
It needed to take the GIT_DIR information into account, something that
the original receive-pack usage just never cared about.
2005-07-03 10:01:38 -07:00
Linus Torvalds 8a65ff7666 Generalize the "show each ref" code in receice-pack
This turns it into a generic "do xyz for each ref" library function.
2005-07-02 20:23:36 -07:00
Daniel Barkalow 95fc75129a [PATCH] Operations on refs
This patch adds code to read a hash out of a specified file under
{GIT_DIR}/refs/, and to write such files atomically and optionally with an
compare and lock.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-06-06 17:09:45 -07:00