diff options
-rw-r--r-- | builtin-branch.c | 4 | ||||
-rw-r--r-- | builtin-mailinfo.c | 4 | ||||
-rw-r--r-- | builtin-mailsplit.c | 4 | ||||
-rw-r--r-- | builtin-revert.c | 2 | ||||
-rw-r--r-- | builtin-stripspace.c | 2 | ||||
-rw-r--r-- | builtin.h | 3 | ||||
-rw-r--r-- | commit.c | 9 | ||||
-rw-r--r-- | commit.h | 2 | ||||
-rwxr-xr-x | contrib/gitview/gitview | 11 | ||||
-rw-r--r-- | daemon.c | 2 | ||||
-rw-r--r-- | diff.c | 4 | ||||
-rw-r--r-- | diff.h | 2 | ||||
-rwxr-xr-x | git-checkout.sh | 3 | ||||
-rwxr-xr-x | git-clone.sh | 2 | ||||
-rwxr-xr-x | git-cvsserver.perl | 11 | ||||
-rw-r--r-- | quote.c | 14 | ||||
-rw-r--r-- | quote.h | 2 | ||||
-rw-r--r-- | revision.c | 16 | ||||
-rw-r--r-- | revision.h | 3 | ||||
-rw-r--r-- | sha1_name.c | 2 | ||||
-rwxr-xr-x | t/t5701-clone-local.sh | 46 | ||||
-rwxr-xr-x | t/t7201-co.sh | 40 | ||||
-rwxr-xr-x | t/t9400-git-cvsserver-server.sh | 34 | ||||
-rw-r--r-- | upload-pack.c | 2 | ||||
-rw-r--r-- | wt-status.c | 2 | ||||
-rw-r--r-- | xdiff/xemit.c | 4 |
26 files changed, 166 insertions, 64 deletions
diff --git a/builtin-branch.c b/builtin-branch.c index 67f46c1ae2..da480519d7 100644 --- a/builtin-branch.c +++ b/builtin-branch.c @@ -55,7 +55,7 @@ static int parse_branch_color_slot(const char *var, int ofs) die("bad config variable '%s'", var); } -int git_branch_config(const char *var, const char *value) +static int git_branch_config(const char *var, const char *value) { if (!strcmp(var, "color.branch")) { branch_use_color = git_config_colorbool(var, value); @@ -72,7 +72,7 @@ int git_branch_config(const char *var, const char *value) return git_default_config(var, value); } -const char *branch_get_color(enum color_branch ix) +static const char *branch_get_color(enum color_branch ix) { if (branch_use_color) return branch_colors[ix]; diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index c95e477e83..489c2c58c0 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -851,8 +851,8 @@ static void handle_info(void) fprintf(fout, "\n"); } -int mailinfo(FILE *in, FILE *out, int ks, const char *encoding, - const char *msg, const char *patch) +static int mailinfo(FILE *in, FILE *out, int ks, const char *encoding, + const char *msg, const char *patch) { keep_subject = ks; metainfo_charset = encoding; diff --git a/builtin-mailsplit.c b/builtin-mailsplit.c index c938425555..43fc373a15 100644 --- a/builtin-mailsplit.c +++ b/builtin-mailsplit.c @@ -159,8 +159,8 @@ out: return ret; } -int split_mbox(const char *file, const char *dir, int allow_bare, - int nr_prec, int skip) +static int split_mbox(const char *file, const char *dir, int allow_bare, + int nr_prec, int skip) { char name[PATH_MAX]; int ret = -1; diff --git a/builtin-revert.c b/builtin-revert.c index 80c348c401..8f02ed7bd1 100644 --- a/builtin-revert.c +++ b/builtin-revert.c @@ -107,7 +107,7 @@ static char *get_oneline(const char *message) return result; } -char *get_encoding(const char *message) +static char *get_encoding(const char *message) { const char *p = message, *eol; diff --git a/builtin-stripspace.c b/builtin-stripspace.c index f0d4d9e2d1..62bd4b547b 100644 --- a/builtin-stripspace.c +++ b/builtin-stripspace.c @@ -26,7 +26,7 @@ static int cleanup(char *line) return 1; } -void stripspace(FILE *in, FILE *out) +static void stripspace(FILE *in, FILE *out) { int empties = -1; int incomplete = 0; @@ -7,9 +7,6 @@ extern const char git_version_string[]; extern const char git_usage_string[]; extern void help_unknown_cmd(const char *cmd); -extern int mailinfo(FILE *in, FILE *out, int ks, const char *encoding, const char *msg, const char *patch); -extern int split_mbox(const char *file, const char *dir, int allow_bare, int nr_prec, int skip); -extern void stripspace(FILE *in, FILE *out); extern int write_tree(unsigned char *sha1, int missing_ok, const char *prefix); extern void prune_packed_objects(int); @@ -1116,15 +1116,6 @@ struct commit *pop_commit(struct commit_list **stack) return item; } -int count_parents(struct commit * commit) -{ - int count; - struct commit_list * parents = commit->parents; - for (count = 0; parents; parents = parents->next,count++) - ; - return count; -} - void topo_sort_default_setter(struct commit *c, void *data) { c->util = data; @@ -73,8 +73,6 @@ struct commit *pop_commit(struct commit_list **stack); void clear_commit_marks(struct commit *commit, unsigned int mark); -int count_parents(struct commit * commit); - /* * Performs an in-place topological sort of list supplied. * diff --git a/contrib/gitview/gitview b/contrib/gitview/gitview index 3dc1ef50c7..098cb01353 100755 --- a/contrib/gitview/gitview +++ b/contrib/gitview/gitview @@ -259,10 +259,13 @@ class CellRendererGraph(gtk.GenericCellRenderer): self.set_colour(ctx, colour, 0.0, 0.5) ctx.show_text(name) -class Commit: +class Commit(object): """ This represent a commit object obtained after parsing the git-rev-list output """ + __slots__ = ['children_sha1', 'message', 'author', 'date', 'committer', + 'commit_date', 'commit_sha1', 'parent_sha1'] + children_sha1 = {} def __init__(self, commit_lines): @@ -339,7 +342,7 @@ class Commit: fp.close() return diff -class AnnotateWindow: +class AnnotateWindow(object): """Annotate window. This object represents and manages a single window containing the annotate information of the file @@ -519,7 +522,7 @@ class AnnotateWindow: self.io_watch_tag = gobject.io_add_watch(fp, gobject.IO_IN, self.data_ready) -class DiffWindow: +class DiffWindow(object): """Diff window. This object represents and manages a single window containing the differences between two revisions on a branch. @@ -674,7 +677,7 @@ class DiffWindow: fp.close() dialog.destroy() -class GitView: +class GitView(object): """ This is the main class """ version = "0.9" @@ -439,7 +439,7 @@ static void parse_extra_args(struct interp *table, char *extra_args, int buflen) } } -void fill_in_extra_table_entries(struct interp *itable) +static void fill_in_extra_table_entries(struct interp *itable) { char *hp; @@ -2103,6 +2103,8 @@ static int opt_arg(const char *arg, int arg_short, const char *arg_long, int *va return 1; } +static int diff_scoreopt_parse(const char *opt); + int diff_opt_parse(struct diff_options *options, const char **av, int ac) { const char *arg = av[0]; @@ -2274,7 +2276,7 @@ static int parse_num(const char **cp_p) return (int)((num >= scale) ? MAX_SCORE : (MAX_SCORE * num / scale)); } -int diff_scoreopt_parse(const char *opt) +static int diff_scoreopt_parse(const char *opt) { int opt1, opt2, cmd; @@ -155,8 +155,6 @@ extern void diff_unmerge(struct diff_options *, unsigned mode, const unsigned char *sha1); -extern int diff_scoreopt_parse(const char *opt); - #define DIFF_SETUP_REVERSE 1 #define DIFF_SETUP_USE_CACHE 2 #define DIFF_SETUP_USE_SIZE_CACHE 4 diff --git a/git-checkout.sh b/git-checkout.sh index d561c88dcb..33f1e87c0c 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -63,12 +63,13 @@ while [ "$#" != "0" ]; do echo "unknown flag $arg" exit 1 fi - new="$rev" new_name="$arg" if git-show-ref --verify --quiet -- "refs/heads/$arg" then + rev=$(git-rev-parse --verify "refs/heads/$arg^0") branch="$arg" fi + new="$rev" elif rev=$(git-rev-parse --verify "$arg^{tree}" 2>/dev/null) then # checking out selected paths from a tree-ish. diff --git a/git-clone.sh b/git-clone.sh index 5bfd8d1556..3a410624d3 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -20,7 +20,7 @@ usage() { get_repo_base() { ( cd "`/bin/pwd`" && - cd "$1" && + cd "$1" || cd "$1.git" && { cd .git pwd diff --git a/git-cvsserver.perl b/git-cvsserver.perl index 2b4825a8ee..d41b29f30b 100755 --- a/git-cvsserver.perl +++ b/git-cvsserver.perl @@ -167,6 +167,17 @@ sub req_Root my ( $cmd, $data ) = @_; $log->debug("req_Root : $data"); + unless ($data =~ m#^/#) { + print "error 1 Root must be an absolute pathname\n"; + return 0; + } + + if ($state->{CVSROOT} + && ($state->{CVSROOT} ne $data)) { + print "error 1 Conflicting roots specified\n"; + return 0; + } + $state->{CVSROOT} = $data; $ENV{GIT_DIR} = $state->{CVSROOT} . "/"; @@ -20,7 +20,7 @@ static inline int need_bs_quote(char c) return (c == '\'' || c == '!'); } -size_t sq_quote_buf(char *dst, size_t n, const char *src) +static size_t sq_quote_buf(char *dst, size_t n, const char *src) { char c; char *bp = dst; @@ -62,18 +62,6 @@ void sq_quote_print(FILE *stream, const char *src) fputc('\'', stream); } -char *sq_quote(const char *src) -{ - char *buf; - size_t cnt; - - cnt = sq_quote_buf(NULL, 0, src) + 1; - buf = xmalloc(cnt); - sq_quote_buf(buf, cnt, src); - - return buf; -} - char *sq_quote_argv(const char** argv, int count) { char *buf, *to; @@ -28,9 +28,7 @@ * excluding the final null regardless of the buffer size. */ -extern char *sq_quote(const char *src); extern void sq_quote_print(FILE *stream, const char *src); -extern size_t sq_quote_buf(char *dst, size_t n, const char *src); extern char *sq_quote_argv(const char** argv, int count); /* diff --git a/revision.c b/revision.c index 0a29b53673..b12c25e2b0 100644 --- a/revision.c +++ b/revision.c @@ -114,12 +114,7 @@ void mark_parents_uninteresting(struct commit *commit) } } -void add_pending_object(struct rev_info *revs, struct object *obj, const char *name) -{ - add_pending_object_with_mode(revs, obj, name, S_IFINVALID); -} - -void add_pending_object_with_mode(struct rev_info *revs, struct object *obj, const char *name, unsigned mode) +static void add_pending_object_with_mode(struct rev_info *revs, struct object *obj, const char *name, unsigned mode) { if (revs->no_walk && (obj->flags & UNINTERESTING)) die("object ranges do not make sense when not walking revisions"); @@ -129,6 +124,11 @@ void add_pending_object_with_mode(struct rev_info *revs, struct object *obj, con (struct commit *)obj, name); } +void add_pending_object(struct rev_info *revs, struct object *obj, const char *name) +{ + add_pending_object_with_mode(revs, obj, name, S_IFINVALID); +} + static struct object *get_reference(struct rev_info *revs, const char *name, const unsigned char *sha1, unsigned int flags) { struct object *object; @@ -262,7 +262,7 @@ static void file_change(struct diff_options *options, options->has_changes = 1; } -int rev_compare_tree(struct rev_info *revs, struct tree *t1, struct tree *t2) +static int rev_compare_tree(struct rev_info *revs, struct tree *t1, struct tree *t2) { if (!t1) return REV_TREE_NEW; @@ -276,7 +276,7 @@ int rev_compare_tree(struct rev_info *revs, struct tree *t1, struct tree *t2) return tree_difference; } -int rev_same_tree_as_empty(struct rev_info *revs, struct tree *t1) +static int rev_same_tree_as_empty(struct rev_info *revs, struct tree *t1) { int retval; void *tree; diff --git a/revision.h b/revision.h index 2845167746..f46b4d55a2 100644 --- a/revision.h +++ b/revision.h @@ -106,8 +106,6 @@ struct rev_info { #define REV_TREE_DIFFERENT 2 /* revision.c */ -extern int rev_same_tree_as_empty(struct rev_info *, struct tree *t1); -extern int rev_compare_tree(struct rev_info *, struct tree *t1, struct tree *t2); extern void init_revisions(struct rev_info *revs, const char *prefix); extern int setup_revisions(int argc, const char **argv, struct rev_info *revs, const char *def); @@ -131,6 +129,5 @@ extern void add_object(struct object *obj, const char *name); extern void add_pending_object(struct rev_info *revs, struct object *obj, const char *name); -extern void add_pending_object_with_mode(struct rev_info *revs, struct object *obj, const char *name, unsigned mode); #endif diff --git a/sha1_name.c b/sha1_name.c index 7df01af788..858f08c34a 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -682,8 +682,6 @@ int get_sha1_with_mode(const char *name, unsigned char *sha1, unsigned *mode) namelen = namelen - (cp - name); if (!active_cache) read_cache(); - if (active_nr < 0) - return -1; pos = cache_name_pos(cp, namelen); if (pos < 0) pos = -pos - 1; diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh new file mode 100755 index 0000000000..b0933274db --- /dev/null +++ b/t/t5701-clone-local.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +test_description='test local clone' +. ./test-lib.sh + +D=`pwd` + +test_expect_success 'preparing origin repository' ' + : >file && git add . && git commit -m1 && + git clone --bare . a.git && + git clone --bare . x +' + +test_expect_success 'local clone without .git suffix' ' + cd "$D" && + git clone -l -s a b && + cd b && + git fetch +' + +test_expect_success 'local clone with .git suffix' ' + cd "$D" && + git clone -l -s a.git c && + cd c && + git fetch +' + +test_expect_success 'local clone from x' ' + cd "$D" && + git clone -l -s x y && + cd y && + git fetch +' + +test_expect_success 'local clone from x.git that does not exist' ' + cd "$D" && + if git clone -l -s x.git z + then + echo "Oops, should have failed" + false + else + echo happy + fi +' + +test_done diff --git a/t/t7201-co.sh b/t/t7201-co.sh index 5fa6a45577..ed2e9ee3c6 100755 --- a/t/t7201-co.sh +++ b/t/t7201-co.sh @@ -190,4 +190,44 @@ test_expect_success 'checkout to detach HEAD with HEAD^0' ' fi ' +test_expect_success 'checkout with ambiguous tag/branch names' ' + + git tag both side && + git branch both master && + git reset --hard && + git checkout master && + + git checkout both && + H=$(git rev-parse --verify HEAD) && + M=$(git show-ref -s --verify refs/heads/master) && + test "z$H" = "z$M" && + name=$(git symbolic-ref HEAD 2>/dev/null) && + test "z$name" = zrefs/heads/both + +' + +test_expect_success 'checkout with ambiguous tag/branch names' ' + + git reset --hard && + git checkout master && + + git tag frotz side && + git branch frotz master && + git reset --hard && + git checkout master && + + git checkout tags/frotz && + H=$(git rev-parse --verify HEAD) && + S=$(git show-ref -s --verify refs/heads/side) && + test "z$H" = "z$S" && + if name=$(git symbolic-ref HEAD 2>/dev/null) + then + echo "Bad -- should have detached" + false + else + : happy + fi + +' + test_done diff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh index e9ef315173..41dcf646d1 100755 --- a/t/t9400-git-cvsserver-server.sh +++ b/t/t9400-git-cvsserver-server.sh @@ -110,6 +110,40 @@ test_expect_success 'pserver authentication failure (login/non-anonymous user)' tail -n1 log | grep -q "^I HATE YOU$"' +# misuse pserver authentication for testing of req_Root + +cat >request-relative <<EOF +BEGIN AUTH REQUEST +gitcvs.git +anonymous + +END AUTH REQUEST +EOF + +cat >request-conflict <<EOF +BEGIN AUTH REQUEST +$SERVERDIR +anonymous + +END AUTH REQUEST +Root $WORKDIR +EOF + +test_expect_success 'req_Root failure (relative pathname)' \ + 'if cat request-relative | git-cvsserver pserver >log 2>&1 + then + echo unexpected success + false + else + true + fi && + tail log | grep -q "^error 1 Root must be an absolute pathname$"' + +test_expect_success 'req_Root failure (conflicting roots)' \ + 'cat request-conflict | git-cvsserver pserver >log 2>&1 && + tail log | grep -q "^error 1 Conflicting roots specified$"' + + #-------------- # CONFIG TESTS #-------------- diff --git a/upload-pack.c b/upload-pack.c index 0e881c85b5..fe96ef15c4 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -62,7 +62,7 @@ static ssize_t send_client_data(int fd, const char *data, ssize_t sz) return safe_write(fd, data, sz); } -FILE *pack_pipe = NULL; +static FILE *pack_pipe = NULL; static void show_commit(struct commit *commit) { if (commit->object.flags & BOUNDARY) diff --git a/wt-status.c b/wt-status.c index 4bfe8f15d8..52054201c2 100644 --- a/wt-status.c +++ b/wt-status.c @@ -198,7 +198,7 @@ static void wt_read_cache(struct wt_status *s) read_cache(); } -void wt_status_print_initial(struct wt_status *s) +static void wt_status_print_initial(struct wt_status *s) { int i; char buf[PATH_MAX]; diff --git a/xdiff/xemit.c b/xdiff/xemit.c index 78b1d4b8bb..4b6e639112 100644 --- a/xdiff/xemit.c +++ b/xdiff/xemit.c @@ -99,8 +99,8 @@ static void xdl_find_func(xdfile_t *xf, long i, char *buf, long sz, long *ll) { } -int xdl_emit_common(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, - xdemitconf_t const *xecfg) { +static int xdl_emit_common(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, + xdemitconf_t const *xecfg) { xdfile_t *xdf = &xe->xdf1; const char *rchg = xdf->rchg; long ix; |