diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt index ec43c0b3a8..9e0dcf8d3f 100644 --- a/Documentation/git-rev-list.txt +++ b/Documentation/git-rev-list.txt @@ -10,6 +10,7 @@ SYNOPSIS -------- [verse] 'git-rev-list' [ \--max-count=number ] + [ \--skip=number ] [ \--max-age=timestamp ] [ \--min-age=timestamp ] [ \--sparse ] @@ -139,6 +140,10 @@ limiting may be applied. Limit the number of commits output. +--skip='number':: + + Skip 'number' commits before starting to show the commit output. + --since='date', --after='date':: Show commits more recent than a specific date. diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 4eac314f3a..eca1ff2175 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v1.4.4.1.GIT +DEF_VER=v1.4.4.GIT LF=' ' diff --git a/Makefile b/Makefile index 2c19c4de9e..fe015d1615 100644 --- a/Makefile +++ b/Makefile @@ -82,10 +82,6 @@ all: # Define NO_ACCURATE_DIFF if your diff program at least sometimes misses # a missing newline at the end of the file. # -# Define COLLISION_CHECK below if you believe that SHA1's -# 1461501637330902918203684832716283019655932542976 hashes do not give you -# sufficient guarantee that no collisions between objects will ever happen. -# # Define USE_NSEC below if you want git to care about sub-second file mtimes # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely diff --git a/archive-tar.c b/archive-tar.c index ff0f6e2929..af47fdc955 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -1,7 +1,6 @@ /* * Copyright (c) 2005, 2006 Rene Scharfe */ -#include #include "cache.h" #include "commit.h" #include "strbuf.h" diff --git a/archive-zip.c b/archive-zip.c index 36e922a1f2..f31b8ed823 100644 --- a/archive-zip.c +++ b/archive-zip.c @@ -1,7 +1,6 @@ /* * Copyright (c) 2006 Rene Scharfe */ -#include #include "cache.h" #include "commit.h" #include "blob.h" diff --git a/blob.c b/blob.c index d1af2e62f1..9776beac58 100644 --- a/blob.c +++ b/blob.c @@ -1,6 +1,5 @@ #include "cache.h" #include "blob.h" -#include const char *blob_type = "blob"; diff --git a/builtin-add.c b/builtin-add.c index aa2f0f32af..0359fa67bd 100644 --- a/builtin-add.c +++ b/builtin-add.c @@ -3,8 +3,6 @@ * * Copyright (C) 2006 Linus Torvalds */ -#include - #include "cache.h" #include "builtin.h" #include "dir.h" diff --git a/builtin-apply.c b/builtin-apply.c index 436d9e1880..1c35837068 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -6,7 +6,6 @@ * This applies patches on top of some (arbitrary) version of the SCM. * */ -#include #include "cache.h" #include "cache-tree.h" #include "quote.h" diff --git a/builtin-archive.c b/builtin-archive.c index a8a1f079bf..391cf43911 100644 --- a/builtin-archive.c +++ b/builtin-archive.c @@ -2,7 +2,6 @@ * Copyright (c) 2006 Franck Bui-Huu * Copyright (c) 2006 Rene Scharfe */ -#include #include "cache.h" #include "builtin.h" #include "archive.h" diff --git a/builtin-blame.c b/builtin-blame.c index 211bdb3a75..4a1accf13c 100644 --- a/builtin-blame.c +++ b/builtin-blame.c @@ -15,10 +15,6 @@ #include "revision.h" #include "xdiff-interface.h" -#include -#include -#include - static char blame_usage[] = "git-blame [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S ] [-M] [-C] [-C] [commit] [--] file\n" " -c, --compatibility Use the same output mode as git-annotate (Default: off)\n" diff --git a/builtin-branch.c b/builtin-branch.c index 011ef3a265..903d5cf056 100644 --- a/builtin-branch.c +++ b/builtin-branch.c @@ -5,8 +5,8 @@ * Based on git-branch.sh by Junio C Hamano. */ -#include "color.h" #include "cache.h" +#include "color.h" #include "refs.h" #include "commit.h" #include "builtin.h" diff --git a/builtin-for-each-ref.c b/builtin-for-each-ref.c index 227aa3cd7f..af72a12a57 100644 --- a/builtin-for-each-ref.c +++ b/builtin-for-each-ref.c @@ -6,7 +6,6 @@ #include "tree.h" #include "blob.h" #include "quote.h" -#include /* Quoting styles */ #define QUOTE_NONE 0 diff --git a/builtin-grep.c b/builtin-grep.c index 9873e3d1db..3b1b1cbbfa 100644 --- a/builtin-grep.c +++ b/builtin-grep.c @@ -10,10 +10,7 @@ #include "tag.h" #include "tree-walk.h" #include "builtin.h" -#include #include "grep.h" -#include -#include /* * git grep pathspecs are somewhat different from diff-tree pathspecs; diff --git a/builtin-log.c b/builtin-log.c index 17014f70a2..8df3c1394a 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -11,8 +11,6 @@ #include "log-tree.h" #include "builtin.h" #include "tag.h" -#include -#include static int default_show_root = 1; diff --git a/builtin-ls-files.c b/builtin-ls-files.c index bc79ce40fc..21c2a6e2d9 100644 --- a/builtin-ls-files.c +++ b/builtin-ls-files.c @@ -5,8 +5,6 @@ * * Copyright (C) Linus Torvalds, 2005 */ -#include - #include "cache.h" #include "quote.h" #include "dir.h" diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index b8d7dbc0b7..e6472293d4 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -2,15 +2,6 @@ * Another stupid program, this one parsing the headers of an * email to figure out authorship and subject */ -#define _GNU_SOURCE -#include -#include -#include -#include -#ifndef NO_ICONV -#include -#endif -#include "git-compat-util.h" #include "cache.h" #include "builtin.h" diff --git a/builtin-mailsplit.c b/builtin-mailsplit.c index 91a699d34d..3bca855aae 100644 --- a/builtin-mailsplit.c +++ b/builtin-mailsplit.c @@ -4,13 +4,6 @@ * It just splits a mbox into a list of files: "0001" "0002" .. * so you can process them further from there. */ -#include -#include -#include -#include -#include -#include -#include #include "cache.h" #include "builtin.h" diff --git a/builtin-mv.c b/builtin-mv.c index d14a4a7f5c..737af350b8 100644 --- a/builtin-mv.c +++ b/builtin-mv.c @@ -3,8 +3,6 @@ * * Copyright (C) 2006 Johannes Schindelin */ -#include - #include "cache.h" #include "builtin.h" #include "dir.h" diff --git a/builtin-name-rev.c b/builtin-name-rev.c index 618aa314d2..b4f15cc38a 100644 --- a/builtin-name-rev.c +++ b/builtin-name-rev.c @@ -1,4 +1,3 @@ -#include #include "builtin.h" #include "cache.h" #include "commit.h" diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index a2dc7d1d9d..807be8c3f8 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -12,8 +12,6 @@ #include "diff.h" #include "revision.h" #include "list-objects.h" -#include -#include static const char pack_usage[] = "\ git-pack-objects [{ -q | --progress | --all-progress }] \n\ diff --git a/builtin-repo-config.c b/builtin-repo-config.c index 4885930ca4..90633119d4 100644 --- a/builtin-repo-config.c +++ b/builtin-repo-config.c @@ -1,6 +1,5 @@ #include "builtin.h" #include "cache.h" -#include static const char git_config_set_usage[] = "git-repo-config [ --global ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --list"; diff --git a/builtin-runstatus.c b/builtin-runstatus.c index 0b63037dd0..4b489b1214 100644 --- a/builtin-runstatus.c +++ b/builtin-runstatus.c @@ -1,5 +1,5 @@ -#include "wt-status.h" #include "cache.h" +#include "wt-status.h" extern int wt_status_use_color; diff --git a/builtin-shortlog.c b/builtin-shortlog.c index 3fc43dd7dd..edb40429ec 100644 --- a/builtin-shortlog.c +++ b/builtin-shortlog.c @@ -4,7 +4,6 @@ #include "diff.h" #include "path-list.h" #include "revision.h" -#include static const char shortlog_usage[] = "git-shortlog [-n] [-s] [... ]"; diff --git a/builtin-show-branch.c b/builtin-show-branch.c index a38ac34efb..b9d9781d4d 100644 --- a/builtin-show-branch.c +++ b/builtin-show-branch.c @@ -1,5 +1,3 @@ -#include -#include #include "cache.h" #include "commit.h" #include "refs.h" diff --git a/builtin-stripspace.c b/builtin-stripspace.c index 09cc9108cd..f0d4d9e2d1 100644 --- a/builtin-stripspace.c +++ b/builtin-stripspace.c @@ -1,6 +1,3 @@ -#include -#include -#include #include "builtin.h" /* diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c index 4d4cfec878..11e62fc141 100644 --- a/builtin-tar-tree.c +++ b/builtin-tar-tree.c @@ -1,7 +1,6 @@ /* * Copyright (c) 2005, 2006 Rene Scharfe */ -#include #include "cache.h" #include "commit.h" #include "tar.h" diff --git a/builtin-unpack-objects.c b/builtin-unpack-objects.c index e6d7574844..d351e02649 100644 --- a/builtin-unpack-objects.c +++ b/builtin-unpack-objects.c @@ -8,8 +8,6 @@ #include "tag.h" #include "tree.h" -#include - static int dry_run, quiet, recover, has_errors; static const char unpack_usage[] = "git-unpack-objects [-n] [-q] [-r] < pack-file"; diff --git a/builtin-upload-archive.c b/builtin-upload-archive.c index 45c92e163c..e4156f8f48 100644 --- a/builtin-upload-archive.c +++ b/builtin-upload-archive.c @@ -1,9 +1,6 @@ /* * Copyright (c) 2006 Franck Bui-Huu */ -#include -#include -#include #include "cache.h" #include "builtin.h" #include "archive.h" diff --git a/color.c b/color.c index d8c8399d59..09d82eec3d 100644 --- a/color.c +++ b/color.c @@ -1,8 +1,5 @@ -#include "color.h" #include "cache.h" -#include "git-compat-util.h" - -#include +#include "color.h" #define COLOR_RESET "\033[m" diff --git a/compat/mmap.c b/compat/mmap.c index a4d2e507f7..0fd46e793d 100644 --- a/compat/mmap.c +++ b/compat/mmap.c @@ -1,7 +1,3 @@ -#include -#include -#include -#include #include "../git-compat-util.h" void *gitfakemmap(void *start, size_t length, int prot , int flags, int fd, off_t offset) diff --git a/compat/setenv.c b/compat/setenv.c index b7d7678598..3a22ea7b75 100644 --- a/compat/setenv.c +++ b/compat/setenv.c @@ -1,5 +1,4 @@ -#include -#include +#include "../git-compat-util.h" int gitsetenv(const char *name, const char *value, int replace) { diff --git a/compat/strlcpy.c b/compat/strlcpy.c index b66856a3a5..4024c36030 100644 --- a/compat/strlcpy.c +++ b/compat/strlcpy.c @@ -1,4 +1,4 @@ -#include +#include "../git-compat-util.h" size_t gitstrlcpy(char *dest, const char *src, size_t size) { diff --git a/compat/unsetenv.c b/compat/unsetenv.c index 3a5e4ec04a..eb29f5e084 100644 --- a/compat/unsetenv.c +++ b/compat/unsetenv.c @@ -1,5 +1,4 @@ -#include -#include +#include "../git-compat-util.h" void gitunsetenv (const char *name) { diff --git a/config.c b/config.c index 6a4224e98c..1662a4626e 100644 --- a/config.c +++ b/config.c @@ -6,7 +6,6 @@ * */ #include "cache.h" -#include #define MAXNAME (256) @@ -749,7 +748,7 @@ out_free: int git_config_rename_section(const char *old_name, const char *new_name) { int ret = 0; - const char *config_filename; + char *config_filename; struct lock_file *lock = xcalloc(sizeof(struct lock_file), 1); int out_fd; char buf[1024]; @@ -762,11 +761,15 @@ int git_config_rename_section(const char *old_name, const char *new_name) } config_filename = xstrdup(config_filename); out_fd = hold_lock_file_for_update(lock, config_filename, 0); - if (out_fd < 0) - return error("Could not lock config file!"); + if (out_fd < 0) { + ret = error("Could not lock config file!"); + goto out; + } - if (!(config_file = fopen(config_filename, "rb"))) - return error("Could not open config file!"); + if (!(config_file = fopen(config_filename, "rb"))) { + ret = error("Could not open config file!"); + goto out; + } while (fgets(buf, sizeof(buf), config_file)) { int i; @@ -806,8 +809,11 @@ int git_config_rename_section(const char *old_name, const char *new_name) } write(out_fd, buf, strlen(buf)); } + fclose(config_file); if (close(out_fd) || commit_lock_file(lock) < 0) - return error("Cannot commit config file!"); + ret = error("Cannot commit config file!"); + out: + free(config_filename); return ret; } diff --git a/configure.ac b/configure.ac index 34e34789bd..e153d53823 100644 --- a/configure.ac +++ b/configure.ac @@ -316,10 +316,6 @@ GIT_PARSE_WITH(iconv)) ## --enable-FEATURE[=ARG] and --disable-FEATURE # -# Define COLLISION_CHECK below if you believe that SHA1's -# 1461501637330902918203684832716283019655932542976 hashes do not give you -# sufficient guarantee that no collisions between objects will ever happen. -# # Define USE_NSEC below if you want git to care about sub-second file mtimes # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely diff --git a/connect.c b/connect.c index f7edba82c4..66daa11a57 100644 --- a/connect.c +++ b/connect.c @@ -3,12 +3,6 @@ #include "pkt-line.h" #include "quote.h" #include "refs.h" -#include -#include -#include -#include -#include -#include static char *server_capabilities; diff --git a/convert-objects.c b/convert-objects.c index 881258311a..a630132985 100644 --- a/convert-objects.c +++ b/convert-objects.c @@ -1,7 +1,3 @@ -#define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */ -#define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */ -#define _GNU_SOURCE -#include #include "cache.h" #include "blob.h" #include "commit.h" diff --git a/daemon.c b/daemon.c index e66bb802da..b129b83e40 100644 --- a/daemon.c +++ b/daemon.c @@ -1,20 +1,10 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "pkt-line.h" #include "cache.h" +#include "pkt-line.h" #include "exec_cmd.h" #include "interpolate.h" +#include + #ifndef HOST_NAME_MAX #define HOST_NAME_MAX 256 #endif diff --git a/date.c b/date.c index 1825922732..7acb8cbd91 100644 --- a/date.c +++ b/date.c @@ -4,9 +4,6 @@ * Copyright (C) Linus Torvalds, 2005 */ -#include -#include - #include "cache.h" static time_t my_mktime(struct tm *tm) diff --git a/diff-delta.c b/diff-delta.c index fa16d06c8d..9f998d0a73 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -18,11 +18,8 @@ * licensing gets turned into GPLv2 within this project. */ -#include -#include -#include "delta.h" - #include "git-compat-util.h" +#include "delta.h" /* maximum hash entry list for the same hash bucket */ #define HASH_LIMIT 64 diff --git a/diff.c b/diff.c index 3f937a2dc5..26916c3c0a 100644 --- a/diff.c +++ b/diff.c @@ -1,9 +1,6 @@ /* * Copyright (C) 2005 Junio C Hamano */ -#include -#include -#include #include "cache.h" #include "quote.h" #include "diff.h" @@ -1237,7 +1234,7 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int * objects however would tend to be slower as they need * to be individually opened and inflated. */ - if (FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1, NULL)) + if (!FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1, NULL)) return 0; len = strlen(name); diff --git a/diffcore-order.c b/diffcore-order.c index aef6da6044..7ad0946185 100644 --- a/diffcore-order.c +++ b/diffcore-order.c @@ -4,7 +4,6 @@ #include "cache.h" #include "diff.h" #include "diffcore.h" -#include static char **order; static int order_cnt; diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index cfcce315ba..de44adabf0 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -5,8 +5,6 @@ #include "diff.h" #include "diffcore.h" -#include - static unsigned int contains(struct diff_filespec *one, const char *needle, unsigned long len, regex_t *regexp) diff --git a/dir.c b/dir.c index e6a61ee913..16401d8017 100644 --- a/dir.c +++ b/dir.c @@ -5,9 +5,6 @@ * Copyright (C) Linus Torvalds, 2005-2006 * Junio Hamano, 2005-2006 */ -#include -#include - #include "cache.h" #include "dir.h" diff --git a/entry.c b/entry.c index b2ea0efa82..88df713947 100644 --- a/entry.c +++ b/entry.c @@ -1,5 +1,3 @@ -#include -#include #include "cache.h" #include "blob.h" diff --git a/fetch-pack.c b/fetch-pack.c index 3bb8242cc1..c527bf9e96 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -5,7 +5,6 @@ #include "tag.h" #include "exec_cmd.h" #include "sideband.h" -#include static int keep_pack; static int quiet; diff --git a/fetch.c b/fetch.c index 663b4b2f42..f69be82f10 100644 --- a/fetch.c +++ b/fetch.c @@ -1,6 +1,5 @@ -#include "fetch.h" - #include "cache.h" +#include "fetch.h" #include "commit.h" #include "tree.h" #include "tree-walk.h" diff --git a/fsck-objects.c b/fsck-objects.c index 46b628cb94..409aea02b4 100644 --- a/fsck-objects.c +++ b/fsck-objects.c @@ -1,6 +1,3 @@ -#include -#include - #include "cache.h" #include "commit.h" #include "tree.h" diff --git a/git-compat-util.h b/git-compat-util.h index 0272d043d0..bc296b3a45 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -11,6 +11,11 @@ #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) +#define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */ +#define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */ +#define _GNU_SOURCE +#define _BSD_SOURCE + #include #include #include @@ -22,9 +27,27 @@ #include #include #include -#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef NO_ICONV +#include +#endif /* On most systems would have given us this, but * not on some systems (e.g. GNU/Hurd). diff --git a/git-cvsserver.perl b/git-cvsserver.perl index 2a8447e253..df395126b8 100755 --- a/git-cvsserver.perl +++ b/git-cvsserver.perl @@ -946,7 +946,7 @@ sub req_update $log->debug("Temporary directory for merge is $dir"); - my $return = system("git merge-file", $file_local, $file_old, $file_new); + my $return = system("git", "merge-file", $file_local, $file_old, $file_new); $return >>= 8; if ( $return == 0 ) diff --git a/git.c b/git.c index 016ee8adb7..73cf4d4e01 100644 --- a/git.c +++ b/git.c @@ -1,20 +1,8 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "git-compat-util.h" +#include "builtin.h" #include "exec_cmd.h" #include "cache.h" #include "quote.h" -#include "builtin.h" - const char git_usage_string[] = "git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate] [--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]"; diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 4059894e0b..ebbc397ee8 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -2915,8 +2915,10 @@ sub git_summary { my $owner = git_get_project_owner($project); my $refs = git_get_references(); - my @taglist = git_get_tags_list(15); - my @headlist = git_get_heads_list(15); + # These get_*_list functions return one more to allow us to see if + # there are more ... + my @taglist = git_get_tags_list(16); + my @headlist = git_get_heads_list(16); my @forklist; my ($check_forks) = gitweb_check_feature('forks'); @@ -2952,6 +2954,8 @@ sub git_summary { } } + # we need to request one more than 16 (0..15) to check if + # those 16 are all open my $fd, "-|", git_cmd(), "rev-list", "--max-count=17", git_get_head_hash($project), "--" or die_error(undef, "Open git-rev-list failed"); @@ -2959,17 +2963,20 @@ sub git_summary { close $fd; git_print_header_div('shortlog'); git_shortlog_body(\@revlist, 0, 15, $refs, + $#revlist <= 15 ? undef : $cgi->a({-href => href(action=>"shortlog")}, "...")); if (@taglist) { git_print_header_div('tags'); git_tags_body(\@taglist, 0, 15, + $#taglist <= 15 ? undef : $cgi->a({-href => href(action=>"tags")}, "...")); } if (@headlist) { git_print_header_div('heads'); git_heads_body(\@headlist, $head, 0, 15, + $#headlist <= 15 ? undef : $cgi->a({-href => href(action=>"heads")}, "...")); } diff --git a/grep.c b/grep.c index 0fc078ec0a..fcc6762302 100644 --- a/grep.c +++ b/grep.c @@ -1,5 +1,4 @@ #include "cache.h" -#include #include "grep.h" void append_grep_pattern(struct grep_opt *opt, const char *pat, diff --git a/help.c b/help.c index 0824c25226..341b9e370e 100644 --- a/help.c +++ b/help.c @@ -3,12 +3,11 @@ * * Builtin help-related commands (help, usage, version) */ -#include #include "cache.h" #include "builtin.h" #include "exec_cmd.h" #include "common-cmds.h" - +#include /* most GUI terminals set COLUMNS (although some don't export it) */ static int term_columns(void) diff --git a/ident.c b/ident.c index d7faba6a70..6ad8fedd60 100644 --- a/ident.c +++ b/ident.c @@ -7,9 +7,6 @@ */ #include "cache.h" -#include -#include - static char git_default_date[50]; static void copy_gecos(struct passwd *w, char *name, int sz) diff --git a/imap-send.c b/imap-send.c index a6a65680ee..894cbbdf53 100644 --- a/imap-send.c +++ b/imap-send.c @@ -24,13 +24,6 @@ #include "cache.h" -#include -#include -#include -#include -#include -#include - typedef struct store_conf { char *name; const char *path; /* should this be here? its interpretation is driver-specific */ diff --git a/index-pack.c b/index-pack.c index 6d6c92bf14..5f6d128a83 100644 --- a/index-pack.c +++ b/index-pack.c @@ -6,8 +6,6 @@ #include "commit.h" #include "tag.h" #include "tree.h" -#include -#include static const char index_pack_usage[] = "git-index-pack [-v] [-o ] [{ ---keep | --keep= }] { | --stdin [--fix-thin] [] }"; @@ -87,7 +85,7 @@ static unsigned display_progress(unsigned n, unsigned total, unsigned last_pc) static unsigned char input_buffer[4096]; static unsigned long input_offset, input_len, consumed_bytes; static SHA_CTX input_ctx; -static int input_fd, output_fd, mmap_fd; +static int input_fd, output_fd, pack_fd; /* Discard current buffer used content. */ static void flush(void) @@ -148,14 +146,14 @@ static const char *open_pack_file(const char *pack_name) output_fd = open(pack_name, O_CREAT|O_EXCL|O_RDWR, 0600); if (output_fd < 0) die("unable to create %s: %s\n", pack_name, strerror(errno)); - mmap_fd = output_fd; + pack_fd = output_fd; } else { input_fd = open(pack_name, O_RDONLY); if (input_fd < 0) die("cannot open packfile '%s': %s", pack_name, strerror(errno)); output_fd = -1; - mmap_fd = input_fd; + pack_fd = input_fd; } SHA1_Init(&input_ctx); return pack_name; @@ -268,7 +266,7 @@ static void *unpack_raw_entry(struct object_entry *obj, union delta_base *delta_ case OBJ_TAG: break; default: - bad_object(obj->offset, "bad object type %d", obj->type); + bad_object(obj->offset, "unknown object type %d", obj->type); } obj->hdr_size = consumed_bytes - obj->offset; @@ -279,27 +277,25 @@ static void *get_data_from_pack(struct object_entry *obj) { unsigned long from = obj[0].offset + obj[0].hdr_size; unsigned long len = obj[1].offset - from; - unsigned pg_offset = from % getpagesize(); - unsigned char *map, *data; + unsigned char *src, *data; z_stream stream; int st; - map = mmap(NULL, len + pg_offset, PROT_READ, MAP_PRIVATE, - mmap_fd, from - pg_offset); - if (map == MAP_FAILED) - die("cannot mmap pack file: %s", strerror(errno)); + src = xmalloc(len); + if (pread(pack_fd, src, len, from) != len) + die("cannot pread pack file: %s", strerror(errno)); data = xmalloc(obj->size); memset(&stream, 0, sizeof(stream)); stream.next_out = data; stream.avail_out = obj->size; - stream.next_in = map + pg_offset; + stream.next_in = src; stream.avail_in = len; inflateInit(&stream); while ((st = inflate(&stream, Z_FINISH)) == Z_OK); inflateEnd(&stream); if (st != Z_STREAM_END || stream.total_out != obj->size) die("serious inflate inconsistency"); - munmap(map, len + pg_offset); + free(src); return data; } diff --git a/interpolate.c b/interpolate.c index 5d9d1889f0..f992ef7753 100644 --- a/interpolate.c +++ b/interpolate.c @@ -2,8 +2,6 @@ * Copyright 2006 Jon Loeliger */ -#include - #include "git-compat-util.h" #include "interpolate.h" diff --git a/lockfile.c b/lockfile.c index 2a2fea3cb6..261baff049 100644 --- a/lockfile.c +++ b/lockfile.c @@ -1,7 +1,6 @@ /* * Copyright (c) 2005, Junio C Hamano */ -#include #include "cache.h" static struct lock_file *lock_file_list; diff --git a/merge-base.c b/merge-base.c index 009caf804b..385f4ba386 100644 --- a/merge-base.c +++ b/merge-base.c @@ -1,4 +1,3 @@ -#include #include "cache.h" #include "commit.h" diff --git a/merge-index.c b/merge-index.c index 646d090c58..a9983dd78a 100644 --- a/merge-index.c +++ b/merge-index.c @@ -1,7 +1,3 @@ -#include -#include -#include - #include "cache.h" static const char *pgm; diff --git a/merge-recursive.c b/merge-recursive.c index ae4dcfbe5b..ae7ae4cd2a 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -3,13 +3,6 @@ * Fredrik Kuivinen. * The thieves were Alex Riesen and Johannes Schindelin, in June/July 2006 */ -#include -#include -#include -#include -#include -#include -#include #include "cache.h" #include "cache-tree.h" #include "commit.h" diff --git a/path-list.c b/path-list.c index f8800f8e66..caaa5cc57b 100644 --- a/path-list.c +++ b/path-list.c @@ -1,4 +1,3 @@ -#include #include "cache.h" #include "path-list.h" diff --git a/path.c b/path.c index d2c076d7cb..066f621955 100644 --- a/path.c +++ b/path.c @@ -11,7 +11,6 @@ * which is what it's designed for. */ #include "cache.h" -#include static char bad_path[] = "/bad-path/"; diff --git a/receive-pack.c b/receive-pack.c index c9eaf553e5..eea7e48289 100644 --- a/receive-pack.c +++ b/receive-pack.c @@ -6,7 +6,6 @@ #include "exec_cmd.h" #include "commit.h" #include "object.h" -#include static const char receive_pack_usage[] = "git-receive-pack "; diff --git a/refs.c b/refs.c index d911b9e860..a101ff3bf8 100644 --- a/refs.c +++ b/refs.c @@ -1,10 +1,8 @@ -#include "refs.h" #include "cache.h" +#include "refs.h" #include "object.h" #include "tag.h" -#include - /* ISSYMREF=01 and ISPACKED=02 are public interfaces */ #define REF_KNOWS_PEELED 04 diff --git a/revision.c b/revision.c index d84f46e5a6..e7eccd9180 100644 --- a/revision.c +++ b/revision.c @@ -6,7 +6,6 @@ #include "diff.h" #include "refs.h" #include "revision.h" -#include #include "grep.h" static char *path_name(struct name_path *path, const char *name) @@ -527,6 +526,7 @@ void init_revisions(struct rev_info *revs, const char *prefix) revs->prefix = prefix; revs->max_age = -1; revs->min_age = -1; + revs->skip_count = -1; revs->max_count = -1; revs->prune_fn = NULL; @@ -763,6 +763,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch revs->max_count = atoi(arg + 12); continue; } + if (!strncmp(arg, "--skip=", 7)) { + revs->skip_count = atoi(arg + 7); + continue; + } /* accept -, like traditional "head" */ if ((*arg == '-') && isdigit(arg[1])) { revs->max_count = atoi(arg + 1); @@ -1130,23 +1134,11 @@ static int commit_match(struct commit *commit, struct rev_info *opt) commit->buffer, strlen(commit->buffer)); } -struct commit *get_revision(struct rev_info *revs) +static struct commit *get_revision_1(struct rev_info *revs) { - struct commit_list *list = revs->commits; - - if (!list) + if (!revs->commits) return NULL; - /* Check the max_count ... */ - switch (revs->max_count) { - case -1: - break; - case 0: - return NULL; - default: - revs->max_count--; - } - do { struct commit_list *entry = revs->commits; struct commit *commit = entry->item; @@ -1213,3 +1205,28 @@ struct commit *get_revision(struct rev_info *revs) } while (revs->commits); return NULL; } + +struct commit *get_revision(struct rev_info *revs) +{ + struct commit *c = NULL; + + if (0 < revs->skip_count) { + while ((c = get_revision_1(revs)) != NULL) { + if (revs->skip_count-- <= 0) + break; + } + } + + /* Check the max_count ... */ + switch (revs->max_count) { + case -1: + break; + case 0: + return NULL; + default: + revs->max_count--; + } + if (c) + return c; + return get_revision_1(revs); +} diff --git a/revision.h b/revision.h index 4585463a44..ec991e5c57 100644 --- a/revision.h +++ b/revision.h @@ -77,6 +77,7 @@ struct rev_info { struct grep_opt *grep_filter; /* special limits */ + int skip_count; int max_count; unsigned long max_age; unsigned long min_age; diff --git a/rsh.c b/rsh.c index f34409e1bc..5754a230e2 100644 --- a/rsh.c +++ b/rsh.c @@ -1,10 +1,6 @@ -#include -#include -#include - +#include "cache.h" #include "rsh.h" #include "quote.h" -#include "cache.h" #define COMMAND_SIZE 4096 diff --git a/run-command.c b/run-command.c index 61908682b9..492ad3e64c 100644 --- a/run-command.c +++ b/run-command.c @@ -1,6 +1,5 @@ #include "cache.h" #include "run-command.h" -#include #include "exec_cmd.h" int run_command_v_opt(int argc, const char **argv, int flags) diff --git a/sha1_file.c b/sha1_file.c index 63f416bb5a..1c4df5b73e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1013,7 +1013,7 @@ void packed_object_info_detail(struct packed_git *p, for (;;) { switch (kind) { default: - die("corrupted pack file %s containing object of kind %d", + die("pack %s contains unknown object type %d", p->pack_name, kind); case OBJ_COMMIT: case OBJ_TREE: @@ -1063,7 +1063,7 @@ static int packed_object_info(struct packed_git *p, unsigned long offset, strcpy(type, type_names[kind]); break; default: - die("corrupted pack file %s containing object of kind %d", + die("pack %s contains unknown object type %d", p->pack_name, kind); } if (sizep) diff --git a/ssh-upload.c b/ssh-upload.c index 20b15eab57..0b52ae15cb 100644 --- a/ssh-upload.c +++ b/ssh-upload.c @@ -12,8 +12,6 @@ #include "rsh.h" #include "refs.h" -#include - static unsigned char local_version = 1; static unsigned char remote_version; diff --git a/strbuf.c b/strbuf.c index 9d9d8bed91..7f14b0fb59 100644 --- a/strbuf.c +++ b/strbuf.c @@ -1,7 +1,5 @@ -#include -#include -#include "strbuf.h" #include "cache.h" +#include "strbuf.h" void strbuf_init(struct strbuf *sb) { sb->buf = NULL; diff --git a/t/t6005-rev-list-count.sh b/t/t6005-rev-list-count.sh new file mode 100755 index 0000000000..334fccf58c --- /dev/null +++ b/t/t6005-rev-list-count.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +test_description='git-rev-list --max-count and --skip test' + +. ./test-lib.sh + +test_expect_success 'setup' ' + for n in 1 2 3 4 5 ; do \ + echo $n > a ; \ + git add a ; \ + git commit -m "$n" ; \ + done +' + +test_expect_success 'no options' ' + test $(git-rev-list HEAD | wc -l) = 5 +' + +test_expect_success '--max-count' ' + test $(git-rev-list HEAD --max-count=0 | wc -l) = 0 && + test $(git-rev-list HEAD --max-count=3 | wc -l) = 3 && + test $(git-rev-list HEAD --max-count=5 | wc -l) = 5 && + test $(git-rev-list HEAD --max-count=10 | wc -l) = 5 +' + +test_expect_success '--max-count all forms' ' + test $(git-rev-list HEAD --max-count=1 | wc -l) = 1 && + test $(git-rev-list HEAD -1 | wc -l) = 1 && + test $(git-rev-list HEAD -n1 | wc -l) = 1 && + test $(git-rev-list HEAD -n 1 | wc -l) = 1 +' + +test_expect_success '--skip' ' + test $(git-rev-list HEAD --skip=0 | wc -l) = 5 && + test $(git-rev-list HEAD --skip=3 | wc -l) = 2 && + test $(git-rev-list HEAD --skip=5 | wc -l) = 0 && + test $(git-rev-list HEAD --skip=10 | wc -l) = 0 +' + +test_expect_success '--skip --max-count' ' + test $(git-rev-list HEAD --skip=0 --max-count=0 | wc -l) = 0 && + test $(git-rev-list HEAD --skip=0 --max-count=10 | wc -l) = 5 && + test $(git-rev-list HEAD --skip=3 --max-count=0 | wc -l) = 0 && + test $(git-rev-list HEAD --skip=3 --max-count=1 | wc -l) = 1 && + test $(git-rev-list HEAD --skip=3 --max-count=2 | wc -l) = 2 && + test $(git-rev-list HEAD --skip=3 --max-count=10 | wc -l) = 2 && + test $(git-rev-list HEAD --skip=5 --max-count=10 | wc -l) = 0 && + test $(git-rev-list HEAD --skip=10 --max-count=10 | wc -l) = 0 +' + +test_done diff --git a/test-date.c b/test-date.c index 93e802759f..62e8f2387a 100644 --- a/test-date.c +++ b/test-date.c @@ -1,6 +1,3 @@ -#include -#include - #include "cache.h" int main(int argc, char **argv) diff --git a/test-delta.c b/test-delta.c index 1be8ee0c72..795aa08377 100644 --- a/test-delta.c +++ b/test-delta.c @@ -8,13 +8,7 @@ * published by the Free Software Foundation. */ -#include -#include -#include -#include -#include -#include -#include +#include "git-compat-util.h" #include "delta.h" static const char usage[] = diff --git a/tree.c b/tree.c index ea386e5066..b6f02fecc4 100644 --- a/tree.c +++ b/tree.c @@ -4,7 +4,6 @@ #include "commit.h" #include "tag.h" #include "tree-walk.h" -#include const char *tree_type = "tree"; diff --git a/unpack-trees.c b/unpack-trees.c index b8689ebc86..2e2232cbb0 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1,5 +1,3 @@ -#include -#include #include "cache.h" #include "dir.h" #include "tree.h" diff --git a/upload-pack.c b/upload-pack.c index d4a7b625f4..c568ef066c 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -1,6 +1,3 @@ -#include -#include -#include #include "cache.h" #include "refs.h" #include "pkt-line.h" diff --git a/var.c b/var.c index a57a33b81a..39977b949a 100644 --- a/var.c +++ b/var.c @@ -4,9 +4,6 @@ * Copyright (C) Eric Biederman, 2005 */ #include "cache.h" -#include -#include -#include static const char var_usage[] = "git-var [-l | ]"; diff --git a/wt-status.c b/wt-status.c index cface6ca88..db427384ff 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1,6 +1,6 @@ +#include "cache.h" #include "wt-status.h" #include "color.h" -#include "cache.h" #include "object.h" #include "dir.h" #include "commit.h"