b37f81b | Junio C Hamano | 14 March 2014, 21:25:39 UTC | Merge branch 'jh/note-trees-record-blobs' "git notes -C <blob>" should not take an object that is not a blob. * jh/note-trees-record-blobs: notes: disallow reusing non-blob as a note object | 14 March 2014, 21:25:39 UTC |
c923f60 | Junio C Hamano | 14 March 2014, 21:25:36 UTC | Merge branch 'rt/links-for-asciidoctor' * rt/links-for-asciidoctor: Documentation: fix documentation AsciiDoc links for external urls | 14 March 2014, 21:25:36 UTC |
650c90a | Junio C Hamano | 14 March 2014, 21:25:31 UTC | Merge branch 'nd/no-more-fnmatch' We started using wildmatch() in place of fnmatch(3); complete the process and stop using fnmatch(3). * nd/no-more-fnmatch: actually remove compat fnmatch source code stop using fnmatch (either native or compat) Revert "test-wildmatch: add "perf" command to compare wildmatch and fnmatch" use wildmatch() directly without fnmatch() wrapper | 14 March 2014, 21:25:31 UTC |
3a66e1b | Junio C Hamano | 14 March 2014, 21:25:28 UTC | Merge branch 'ak/gitweb-fit-image' Instead of allowing an <img> to be shown in whatever size, force scaling it to fit on the page with max-height/max-width css style attributes. * ak/gitweb-fit-image: gitweb: Avoid overflowing page body frame with large images | 14 March 2014, 21:25:28 UTC |
481e6aa | Junio C Hamano | 14 March 2014, 21:25:20 UTC | Merge branch 'tr/diff-submodule-no-reuse-worktree' "git diff --external-diff" incorrectly fed the submodule directory in the working tree to the external diff driver when it knew it is the same as one of the versions being compared. * tr/diff-submodule-no-reuse-worktree: diff: do not reuse_worktree_file for submodules | 14 March 2014, 21:25:20 UTC |
6eb593a | Junio C Hamano | 14 March 2014, 21:25:02 UTC | Merge branch 'nd/reset-setup-worktree' "git reset" needs to refresh the index when working in a working tree (it can also be used to match the index to the HEAD in an otherwise bare repository), but it failed to set up the working tree properly, causing GIT_WORK_TREE to be ignored. * nd/reset-setup-worktree: reset: optionally setup worktree and refresh index on --mixed | 14 March 2014, 21:25:03 UTC |
ed27751 | Junio C Hamano | 14 March 2014, 21:24:59 UTC | Merge branch 'lb/contrib-contacts-looser-diff-parsing' * lb/contrib-contacts-looser-diff-parsing: git-contacts: do not fail parsing of good diffs | 14 March 2014, 21:24:59 UTC |
08f3630 | Junio C Hamano | 14 March 2014, 21:24:40 UTC | Merge branch 'ks/config-file-stdin' "git config" learned to read from the standard input when "-" is given as the value to its "--file" parameter (attempting an operation to update the configuration in the standard input of course is rejected). * ks/config-file-stdin: config: teach "git config --file -" to read from the standard input config: change git_config_with_options() interface builtin/config.c: rename check_blob_write() -> check_write() config: disallow relative include paths from blobs | 14 March 2014, 21:24:40 UTC |
7aab05d | Junio C Hamano | 14 March 2014, 21:24:37 UTC | Merge branch 'jk/janitorial-fixes' * jk/janitorial-fixes: open_istream(): do not dereference NULL in the error case builtin/mv: don't use memory after free utf8: use correct type for values in interval table utf8: fix iconv error detection notes-utils: handle boolean notes.rewritemode correctly | 14 March 2014, 21:24:37 UTC |
b7de45b | Junio C Hamano | 14 March 2014, 21:24:18 UTC | Merge branch 'jk/http-no-curl-easy' Uses of curl's "multi" interface and "easy" interface do not mix well when we attempt to reuse outgoing connections. Teach the RPC over http code, used in the smart HTTP transport, not to use the "easy" interface. * jk/http-no-curl-easy: http: never use curl_easy_perform | 14 March 2014, 21:24:18 UTC |
baf9e83 | Junio C Hamano | 14 March 2014, 21:24:15 UTC | Merge branch 'ss/completion-rec-sub-fetch-push' * ss/completion-rec-sub-fetch-push: completion: teach --recurse-submodules to fetch, pull and push | 14 March 2014, 21:24:15 UTC |
dfcd354 | Junio C Hamano | 14 March 2014, 21:23:37 UTC | Merge branch 'nd/gitignore-trailing-whitespace' Trailing whitespaces in .gitignore files, unless they are quoted for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly speaking, this is a backward incompatible change, but very unlikely to bite any sane user and adjusting should be obvious and easy. * nd/gitignore-trailing-whitespace: t0008: skip trailing space test on Windows dir: ignore trailing spaces in exclude patterns dir: warn about trailing spaces in exclude patterns | 14 March 2014, 21:23:37 UTC |
28b6821 | Junio C Hamano | 14 March 2014, 21:05:59 UTC | Merge branch 'jc/check-attr-honor-working-tree' "git check-attr" when (trying to) work on a repository with a working tree did not work well when the working tree was specified via --work-tree (and obviously with --git-dir). The command also works in a bare repository but it reads from the (possibly stale, irrelevant and/or nonexistent) index, which may need to be fixed to read from HEAD, but that is a completely separate issue. As a related tangent to this separate issue, we may want to also fix "check-ignore", which refuses to work in a bare repository, to also operate in a bare one. * jc/check-attr-honor-working-tree: check-attr: move to the top of working tree when in non-bare repository t0003: do not chdir the whole test process | 14 March 2014, 21:06:00 UTC |
35e4d77 | Johannes Sixt | 11 March 2014, 07:46:40 UTC | t0008: skip trailing space test on Windows The Windows API does not preserve file names with trailing spaces (and dots), but rather strips them. Our tools (MSYS bash, git) base the POSIX emulation on the Windows API. As a consequence, it is impossible for bash on Windows to allocate a file whose name has trailing spaces, and for git to stat such a file. Both operate on a file whose name has the spaces stripped. Skip the test that needs such a file name. Note that we do not use (another incarnation of) prerequisite FUNNYNAMES. The reason is that FUNNYNAMES is intended to represent a property of the file system. But the inability to have trailing spaces in a file name is a property of the Windows API. The file system (NTFS) does not have this limitation. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 March 2014, 19:11:49 UTC |
384364b | Junio C Hamano | 07 March 2014, 23:12:19 UTC | Start preparing for Git 2.0 Signed-off-by: Junio C Hamano <gitster@pobox.com> | 07 March 2014, 23:22:37 UTC |
e3f1185 | Junio C Hamano | 07 March 2014, 23:18:17 UTC | Merge branch 'cc/starts-n-ends-with-endgame' prefixcmp/suffixcmp are gone. | 07 March 2014, 23:18:28 UTC |
2687ffd | Junio C Hamano | 07 March 2014, 23:17:40 UTC | Merge branch 'jc/hold-diff-remove-q-synonym-for-no-deletion' Remove a confusing and deprecated "-q" option from "git diff-files"; "git diff-files --diff-filter=d" can be used instead. | 07 March 2014, 23:17:41 UTC |
289ca27 | Junio C Hamano | 07 March 2014, 23:17:20 UTC | Merge branch 'gj/push-more-verbose-advice' | 07 March 2014, 23:17:20 UTC |
2b4a888 | Junio C Hamano | 07 March 2014, 23:16:22 UTC | Merge branch 'jc/core-checkstat-2.0' "core.statinfo" configuration variable, which was a never-advertised synonym to "core.checkstat", has been removed. | 07 March 2014, 23:16:23 UTC |
160c4b1 | Junio C Hamano | 07 March 2014, 23:14:47 UTC | Merge branch 'jc/add-2.0-ignore-removal' "git add <pathspec>" is the same as "git add -A <pathspec>" now, i.e. it does not ignore removals from the directory specified. | 07 March 2014, 23:14:47 UTC |
053a6b1 | Junio C Hamano | 07 March 2014, 23:14:01 UTC | Merge branch 'jn/add-2.0-u-A-sans-pathspec' "git add -u" and "git add -A" without any pathspec is a tree-wide operation now, even when they are run in a subdirectory of the working tree. | 07 March 2014, 23:14:02 UTC |
009055f | Junio C Hamano | 07 March 2014, 23:13:15 UTC | Merge branch 'jc/push-2.0-default-to-simple' Finally update the "git push" default behaviour to "simple". | 07 March 2014, 23:13:15 UTC |
6ab4ae2 | Junio C Hamano | 05 March 2014, 23:06:59 UTC | Merge branch 'maint' * maint: i18n: proposed command missing leading dash | 05 March 2014, 23:06:59 UTC |
ee3a81e | Junio C Hamano | 05 March 2014, 23:06:42 UTC | Merge branch 'jk/run-network-tests-by-default' Teach "make test" to run networking tests when possible by default. * jk/run-network-tests-by-default: tests: turn on network daemon tests by default | 05 March 2014, 23:06:45 UTC |
4c4ac4d | Junio C Hamano | 05 March 2014, 23:06:38 UTC | Merge branch 'nd/daemonize-gc' Allow running "gc --auto" in the background. * nd/daemonize-gc: gc: config option for running --auto in background daemon: move daemonize() to libgit.a | 05 March 2014, 23:06:39 UTC |
6376463 | Junio C Hamano | 05 March 2014, 23:06:26 UTC | Merge branch 'ks/combine-diff' Teach combine-diff to honour the path-output-order imposed by diffcore-order, and optimize how matching paths are found in the N-way diffs made with parents. * ks/combine-diff: tests: add checking that combine-diff emits only correct paths combine-diff: simplify intersect_paths() further combine-diff: combine_diff_path.len is not needed anymore combine-diff: optimize combine_diff_path sets intersection diff test: add tests for combine-diff with orderfile diffcore-order: export generic ordering interface | 05 March 2014, 23:06:26 UTC |
16216b6 | Sandy Carter | 03 March 2014, 14:55:53 UTC | i18n: proposed command missing leading dash Add missing leading dash to proposed commands in french output when using the command: git branch --set-upstream remotename/branchname and when upstream is gone Signed-off-by: Sandy Carter <sandy.carter@savoirfairelinux.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 05 March 2014, 14:10:24 UTC |
2de3478 | Junio C Hamano | 27 February 2014, 22:01:50 UTC | Merge branch 'nd/http-fetch-shallow-fix' Attempting to deepen a shallow repository by fetching over smart HTTP transport failed in the protocol exchange, when no-done extension was used. The fetching side waited for the list of shallow boundary commits after the sending end stopped talking to it. * nd/http-fetch-shallow-fix: t5537: move http tests out to t5539 fetch-pack: fix deepen shallow over smart http with no-done cap protocol-capabilities.txt: document no-done protocol-capabilities.txt: refer multi_ack_detailed back to pack-protocol.txt pack-protocol.txt: clarify 'obj-id' in the last ACK after 'done' test: rename http fetch and push test files | 27 February 2014, 22:01:50 UTC |
0f9e62e | Junio C Hamano | 27 February 2014, 22:01:48 UTC | Merge branch 'jk/pack-bitmap' Borrow the bitmap index into packfiles from JGit to speed up enumeration of objects involved in a commit range without having to fully traverse the history. * jk/pack-bitmap: (26 commits) ewah: unconditionally ntohll ewah data ewah: support platforms that require aligned reads read-cache: use get_be32 instead of hand-rolled ntoh_l block-sha1: factor out get_be and put_be wrappers do not discard revindex when re-preparing packfiles pack-bitmap: implement optional name_hash cache t/perf: add tests for pack bitmaps t: add basic bitmap functionality tests count-objects: recognize .bitmap in garbage-checking repack: consider bitmaps when performing repacks repack: handle optional files created by pack-objects repack: turn exts array into array-of-struct repack: stop using magic number for ARRAY_SIZE(exts) pack-objects: implement bitmap writing rev-list: add bitmap mode to speed up object lists pack-objects: use bitmaps when packing objects pack-objects: split add_object_entry pack-bitmap: add support for bitmap indexes documentation: add documentation for the bitmap format ewah: compressed bitmap implementation ... | 27 February 2014, 22:01:48 UTC |
6784fab | Junio C Hamano | 27 February 2014, 22:01:46 UTC | Merge branch 'dk/blame-janitorial' Code clean-up. * dk/blame-janitorial: builtin/blame.c::find_copy_in_blob: no need to scan for region end blame.c: prepare_lines should not call xrealloc for every line builtin/blame.c::prepare_lines: fix allocation size of sb->lineno builtin/blame.c: eliminate same_suspect() builtin/blame.c: struct blame_entry does not need a prev link | 27 February 2014, 22:01:46 UTC |
62bef66 | Junio C Hamano | 27 February 2014, 22:01:44 UTC | Merge branch 'bc/gpg-sign-everywhere' Teach "--gpg-sign" option to many commands that create commits. * bc/gpg-sign-everywhere: pull: add the --gpg-sign option. rebase: add the --gpg-sign option rebase: parse options in stuck-long mode rebase: don't try to match -M option rebase: remove useless arguments check am: add the --gpg-sign option am: parse options in stuck-long mode git-sh-setup.sh: add variable to use the stuck-long mode cherry-pick, revert: add the --gpg-sign option | 27 February 2014, 22:01:44 UTC |
d8a1bac | Junio C Hamano | 27 February 2014, 22:01:43 UTC | Merge branch 'al/docs' A handful of documentation updates, all trivially harmless. * al/docs: docs/git-blame: explain more clearly the example pickaxe use docs/git-clone: clarify use of --no-hardlinks option docs/git-remote: capitalize first word of initial blurb docs/merge-strategies: remove hyphen from mis-merges | 27 February 2014, 22:01:43 UTC |
bd62e7c | Junio C Hamano | 27 February 2014, 22:01:42 UTC | Merge branch 'jk/test-ports' Avoid having to assign port number to be used in tests manually. * jk/test-ports: tests: auto-set git-daemon port tests: auto-set LIB_HTTPD_PORT from test name | 27 February 2014, 22:01:42 UTC |
8336832 | Junio C Hamano | 27 February 2014, 22:01:40 UTC | Merge branch 'nd/reset-intent-to-add' * nd/reset-intent-to-add: reset: support "--mixed --intent-to-add" mode | 27 February 2014, 22:01:40 UTC |
795dd11 | Junio C Hamano | 27 February 2014, 22:01:38 UTC | Merge branch 'ks/tree-diff-walk' * ks/tree-diff-walk: tree-walk: finally switch over tree descriptors to contain a pre-parsed entry revision: convert to using diff_tree_sha1() line-log: convert to using diff_tree_sha1() tree-diff: convert diff_root_tree_sha1() to just call diff_tree_sha1 with old=NULL tree-diff: allow diff_tree_sha1 to accept NULL sha1 | 27 February 2014, 22:01:39 UTC |
8a34205 | Junio C Hamano | 27 February 2014, 22:01:37 UTC | Merge branch 'mw/symlinks' All subcommands that take pathspecs mishandled an in-tree symbolic link when given it as a full path from the root (which arguably is a sick way to use pathspecs). "git ls-files -s $(pwd)/RelNotes" in our tree is an easy reproduction recipe. * mw/symlinks: setup: don't dereference in-tree symlinks for absolute paths setup: add abspath_part_inside_repo() function t0060: add tests for prefix_path when path begins with work tree t0060: add test for prefix_path when path == work tree t0060: add test for prefix_path on symlinks via absolute paths t3004: add test for ls-files on symlinks via absolute paths | 27 February 2014, 22:01:37 UTC |
f813f71 | Junio C Hamano | 27 February 2014, 22:01:35 UTC | Merge branch 'nd/test-rename-reset' * nd/test-rename-reset: t7101, t7014: rename test files to indicate what that file is for | 27 February 2014, 22:01:36 UTC |
06c2768 | Junio C Hamano | 27 February 2014, 22:01:31 UTC | Merge branch 'wk/submodule-on-branch' Make sure 'submodule update' modes that do not detach HEADs can be used more pleasantly by checking out a concrete branch when cloning them to prime the well. * wk/submodule-on-branch: Documentation: describe 'submodule update --remote' use case submodule: explicit local branch creation in module_clone submodule: document module_clone arguments in comments submodule: make 'checkout' update_module mode more explicit | 27 February 2014, 22:01:33 UTC |
0434783 | Junio C Hamano | 27 February 2014, 22:01:30 UTC | Merge branch 'ep/varscope' Shrink lifetime of variables by moving their definitions to an inner scope where appropriate. * ep/varscope: builtin/gc.c: reduce scope of variables builtin/fetch.c: reduce scope of variable builtin/commit.c: reduce scope of variables builtin/clean.c: reduce scope of variable builtin/blame.c: reduce scope of variables builtin/apply.c: reduce scope of variables bisect.c: reduce scope of variable | 27 February 2014, 22:01:30 UTC |
a06f23c | Junio C Hamano | 27 February 2014, 22:01:28 UTC | Merge branch 'bs/stdio-undef-before-redef' When we replace broken macros from stdio.h in git-compat-util.h, preprocessor. * bs/stdio-undef-before-redef: git-compat-util.h: #undef (v)snprintf before #define them | 27 February 2014, 22:01:28 UTC |
bfef492 | Junio C Hamano | 27 February 2014, 22:01:25 UTC | Merge branch 'jk/config-path-include-fix' include.path variable (or any variable that expects a path that can use ~username expansion) in the configuration file is not a boolean, but the code failed to check it. * jk/config-path-include-fix: handle_path_include: don't look at NULL value expand_user_path: do not look at NULL path | 27 February 2014, 22:01:25 UTC |
28006fb | Junio C Hamano | 27 February 2014, 22:01:23 UTC | Merge branch 'ds/rev-parse-required-args' "git rev-parse --default" without the required option argument did not diagnose it as an error. * ds/rev-parse-required-args: rev-parse: check i before using argv[i] against argc | 27 February 2014, 22:01:23 UTC |
1e74545 | Junio C Hamano | 27 February 2014, 22:01:21 UTC | Merge branch 'nd/diff-quiet-stat-dirty' "git diff --quiet -- pathspec1 pathspec2" sometimes did not return correct status value. * nd/diff-quiet-stat-dirty: diff: do not quit early on stat-dirty files diff.c: move diffcore_skip_stat_unmatch core logic out for reuse later | 27 February 2014, 22:01:21 UTC |
cbaeafc | Junio C Hamano | 27 February 2014, 22:01:15 UTC | Merge branch 'nd/submodule-pathspec-ending-with-slash' Allow "git cmd path/", when the 'path' is where a submodule is bound to the top-level working tree, to match 'path', despite the extra and unnecessary trailing slash. * nd/submodule-pathspec-ending-with-slash: clean: use cache_name_is_other() clean: replace match_pathspec() with dir_path_match() pathspec: pass directory indicator to match_pathspec_item() match_pathspec: match pathspec "foo/" against directory "foo" dir.c: prepare match_pathspec_item for taking more flags pathspec: rename match_pathspec_depth() to match_pathspec() pathspec: convert some match_pathspec_depth() to dir_path_match() pathspec: convert some match_pathspec_depth() to ce_path_match() | 27 February 2014, 22:01:15 UTC |
156d6ed | Junio C Hamano | 27 February 2014, 22:01:14 UTC | Merge branch 'bk/refresh-missing-ok-in-merge-recursive' Allow "merge-recursive" to work in an empty (temporary) working tree again when there are renames involved, correcting an old regression in 1.7.7 era. * bk/refresh-missing-ok-in-merge-recursive: merge-recursive.c: tolerate missing files while refreshing index read-cache.c: extend make_cache_entry refresh flag with options read-cache.c: refactor --ignore-missing implementation t3030-merge-recursive: test known breakage with empty work tree | 27 February 2014, 22:01:14 UTC |
7da5fd6 | Junio C Hamano | 27 February 2014, 22:01:11 UTC | Merge branch 'da/pull-ff-configuration' "git pull" learned to pay attention to pull.ff configuration variable. * da/pull-ff-configuration: pull: add --ff-only to the help text pull: add pull.ff configuration | 27 February 2014, 22:01:11 UTC |
d637d1b | Junio C Hamano | 27 February 2014, 22:01:09 UTC | Merge branch 'kb/fast-hashmap' Improvements to our hash table to get it to meet the needs of the msysgit fscache project, with some nice performance improvements. * kb/fast-hashmap: name-hash: retire unused index_name_exists() hashmap.h: use 'unsigned int' for hash-codes everywhere test-hashmap.c: drop unnecessary #includes .gitignore: test-hashmap is a generated file read-cache.c: fix memory leaks caused by removed cache entries builtin/update-index.c: cleanup update_one fix 'git update-index --verbose --again' output remove old hash.[ch] implementation name-hash.c: remove cache entries instead of marking them CE_UNHASHED name-hash.c: use new hash map implementation for cache entries name-hash.c: remove unreferenced directory entries name-hash.c: use new hash map implementation for directories diffcore-rename.c: use new hash map implementation diffcore-rename.c: simplify finding exact renames diffcore-rename.c: move code around to prepare for the next patch buitin/describe.c: use new hash map implementation add a hashtable implementation that supports O(1) removal submodule: don't access the .gitmodules cache entry after removing it | 27 February 2014, 22:01:09 UTC |
810273b | Junio C Hamano | 27 February 2014, 22:01:03 UTC | Merge branch 'nv/commit-gpgsign-config' Introduce commit.gpgsign configuration variable to force every commit to be GPG signed. The variable cannot be overriden from the command line of some of the commands that create commits except for "git commit" and "git commit-tree", but I am not convinced that it is a good idea to sprinkle support for --no-gpg-sign everywhere, which in turn means that this configuration variable may not be such a good idea. * nv/commit-gpgsign-config: test the commit.gpgsign config option commit-tree: add and document --no-gpg-sign commit-tree: add the commit.gpgsign option to sign all commits | 27 February 2014, 22:01:03 UTC |
3ee8944 | David Kastrup | 22 February 2014, 16:02:47 UTC | builtin/blame.c::find_copy_in_blob: no need to scan for region end The region end can be looked up just like its beginning. Signed-off-by: David Kastrup <dak@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 25 February 2014, 17:51:24 UTC |
7b359ea | Eric Sunshine | 02 January 2014, 21:57:12 UTC | name-hash: retire unused index_name_exists() db5360f3f496 (name-hash: refactor polymorphic index_name_exists(); 2013-09-17) split index_name_exists() into index_file_exists() and index_dir_exists() but retained index_name_exists() as a thin wrapper to avoid disturbing possible in-flight topics. Since this change landed in 'master' some time ago and there are no in-flight topics referencing index_name_exists(), retire it. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 23:26:33 UTC |
b6aad99 | Karsten Blees | 18 December 2013, 13:41:27 UTC | hashmap.h: use 'unsigned int' for hash-codes everywhere Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 23:26:30 UTC |
4b8d14b | Nicolas Vigier | 16 December 2013, 13:55:04 UTC | test the commit.gpgsign config option The tests are checking that : - when commit.gpgsign is true, "git commit" creates signed commits - when commit.gpgsign is false, "git commit" creates unsigned commits - when commit.gpgsign is true, "git commit --no-gpg-sign" creates unsigned commits - when commit.gpgsign is true, "git rebase -f" creates signed commits Signed-off-by: Nicolas Vigier <boklm@mars-attacks.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:51:35 UTC |
55ca3f9 | Junio C Hamano | 13 December 2013, 23:40:35 UTC | commit-tree: add and document --no-gpg-sign Document how to override commit.gpgsign configuration that is set to true per "git commit" invocation (parse-options machinery lets us say "--no-gpg-sign" to do so). "git commit-tree" does not use parse-options, so manually add the corresponding option for now. Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:51:35 UTC |
d95bfb1 | Nicolas Vigier | 04 November 2013, 23:14:41 UTC | commit-tree: add the commit.gpgsign option to sign all commits If you want to GPG sign all your commits, you have to add the -S option all the time. The commit.gpgsign config option allows to sign all commits automatically. Signed-off-by: Nicolas Vigier <boklm@mars-attacks.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:50:56 UTC |
f34b205 | Nguyễn Thái Ngọc Duy | 25 January 2014, 06:46:50 UTC | diff: do not quit early on stat-dirty files When QUICK is set (i.e. with --quiet) we try to do as little work as possible, stopping after seeing the first change. stat-dirty is considered a "change" but it may turn out not, if no actual content is changed. The actual content test is performed too late in the process and the shortcut may be taken prematurely, leading to incorrect return code. Assume we do "git diff --quiet". If we have a stat-dirty file "a" and a really dirty file "b". We break the loop in run_diff_files() and stop after "a" because we have got a "change". Later in diffcore_skip_stat_unmatch() we find out "a" is actually not changed. But there's nothing else in the diff queue, we incorrectly declare "no change", ignoring the fact that "b" is changed. This also happens to "git diff --quiet HEAD" when it hits diff_can_quit_early() in oneway_diff(). This patch does the content test earlier in order to keep going if "a" is unchanged. The test result is cached so that when diffcore_skip_stat_unmatch() is done in the end, we spend no cycles on re-testing "a". Reported-by: IWAMOTO Toshihiro <iwamoto@valinux.co.jp> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:50:14 UTC |
fceb907 | Nguyễn Thái Ngọc Duy | 25 January 2014, 06:46:49 UTC | diff.c: move diffcore_skip_stat_unmatch core logic out for reuse later Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:50:03 UTC |
fce135c | Kirill Smelkov | 03 February 2014, 09:08:49 UTC | tests: add checking that combine-diff emits only correct paths where "correct paths" stands for paths that are different to all parents. Up until now, we were testing combined diff only on one file, or on several files which were all different (t4038-diff-combined.sh). As recent thinko in "simplify intersect_paths() further" showed, and also, since we are going to rework code for finding paths different to all parents, lets write at least basic tests. Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:44:57 UTC |
7b1004b | Junio C Hamano | 28 January 2014, 21:55:59 UTC | combine-diff: simplify intersect_paths() further Linus once said: I actually wish more people understood the really core low-level kind of coding. Not big, complex stuff like the lockless name lookup, but simply good use of pointers-to-pointers etc. For example, I've seen too many people who delete a singly-linked list entry by keeping track of the "prev" entry, and then to delete the entry, doing something like if (prev) prev->next = entry->next; else list_head = entry->next; and whenever I see code like that, I just go "This person doesn't understand pointers". And it's sadly quite common. People who understand pointers just use a "pointer to the entry pointer", and initialize that with the address of the list_head. And then as they traverse the list, they can remove the entry without using any conditionals, by just doing a "*pp = entry->next". Applying that simplification lets us lose 7 lines from this function even while adding 2 lines of comment. I was tempted to squash this into the original commit, but because the benchmarking described in the commit log is without this simplification, I decided to keep it a separate follow-up patch. Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:44:57 UTC |
af82c78 | Kirill Smelkov | 20 January 2014, 16:20:41 UTC | combine-diff: combine_diff_path.len is not needed anymore The field was used in order to speed-up name comparison and also to mark removed paths by setting it to 0. Because the updated code does significantly less strcmp and also just removes paths from the list and free right after we know a path will not be needed, it is not needed anymore. Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:44:57 UTC |
8518ff8 | Kirill Smelkov | 20 January 2014, 16:20:40 UTC | combine-diff: optimize combine_diff_path sets intersection When generating combined diff, for each commit, we intersect diff paths from diff(parent_0,commit) to diff(parent_i,commit) comparing all paths pairs, i.e. doing it the quadratic way. That is correct, but could be optimized. Paths come from trees in sorted (= tree) order, and so does diff_tree() emits resulting paths in that order too. Now if we look at diffcore transformations, all of them, except diffcore_order, preserve resulting path ordering: - skip_stat_unmatch, grep, pickaxe, filter -- just skip elements -> order stays preserved - break -- just breaks diff for a path, adding path dup after the path -> order stays preserved - detect rename/copy -- resulting paths are emitted sorted (verified empirically) So only diffcore_order changes diff paths ordering. But diffcore_order meaning affects only presentation - i.e. only how to show the diff, so we could do all the internal computations without paths reordering, and order only resultant paths set. This is faster, since, if we know two paths sets are all ordered, their intersection could be done in linear time. This patch does just that. Timings for `git log --raw --no-abbrev --no-renames` without `-c` ("git log") and with `-c` ("git log -c") before and after the patch are as follows: linux.git v3.10..v3.11 log log -c before 1.9s 20.4s after 1.9s 16.6s navy.git (private repo) log log -c before 0.83s 15.6s after 0.83s 2.1s P.S. I think linux.git case is sped up not so much as the second one, since in navy.git, there are more exotic (subtree, etc) merges. P.P.S. My tracing showed that the rest of the time (16.6s vs 1.9s) is usually spent in computing huge diffs from commit to second parent. Will try to deal with it, if I'll have time. P.P.P.S. For combine_diff_path, ->len is not needed anymore - will remove it in the next noisy cleanup path, to maintain good signal/noise ratio here. Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:44:57 UTC |
91921ce | Kirill Smelkov | 20 January 2014, 16:20:39 UTC | diff test: add tests for combine-diff with orderfile In the next patch combine-diff will have special code-path for taking orderfile into account. Prepare for making changes by introducing coverage tests for that case. Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:44:57 UTC |
1df4320 | Kirill Smelkov | 20 January 2014, 16:20:38 UTC | diffcore-order: export generic ordering interface diffcore_order() interface only accepts a queue of `struct diff_filepair`. In the next patches, we'll want to order `struct combine_diff_path` by path, so let's first rework diffcore-order to also provide generic low-level interface for ordering arbitrary objects, provided they have path accessors. The new interface is: - `struct obj_order` for describing objects to ordering routine, and - order_objects() for actually doing the ordering work. Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:44:57 UTC |
7146e66 | Kirill Smelkov | 06 February 2014, 11:36:31 UTC | tree-walk: finally switch over tree descriptors to contain a pre-parsed entry This continues 4651ece8 (Switch over tree descriptors to contain a pre-parsed entry) and moves the only rest computational part mode = canon_mode(mode) from tree_entry_extract() to tree entry decode phase - to decode_tree_entry(). The reason to do it, is that canon_mode() is at least 2 conditional jumps for regular files, and that could be noticeable should canon_mode() be invoked several times. That does not matter for current Git codebase, where typical tree traversal is while (t->size) { sha1 = tree_entry_extract(t, &path, &mode); ... update_tree_entry(t); } i.e. we do t -> sha1,path.mode "extraction" only once per entry. In such cases, it does not matter performance-wise, where that mode canonicalization is done - either once in tree_entry_extract(), or once in decode_tree_entry() called by update_tree_entry() - it is approximately the same. But for future code, which could need to work with several tree_desc's in parallel, it could be handy to operate on tree_desc descriptors, and do "extracts" only when needed, or at all, access only relevant part of it through structure fields directly. And for such situations, having canon_mode() be done once in decode phase is better - we won't need to pay the performance price of 2 extra conditional jumps on every t->mode access. So let's move mode canonicalization to decode_tree_entry(). That was the final bit. Now after tree entry is decoded, it is fully ready and could be accessed either directly via field, or through tree_entry_extract() which this time got really "totally trivial". Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:43:29 UTC |
2e70c01 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:35 UTC | clean: use cache_name_is_other() cmd_clean() has the exact same code of index_name_is_other(). Reduce code duplication. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:24 UTC |
05b8502 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:34 UTC | clean: replace match_pathspec() with dir_path_match() This instance was left out when many match_pathspec() call sites that take input from dir_entry were converted to dir_path_match() because it passed a path with the trailing slash stripped out to match_pathspec() while the others did not. Stripping for all call sites back then would be a regression because match_pathspec() did not know how to match pathspec foo/ against _directory_ foo (the stripped version of path "foo/"). match_pathspec() knows how to do it now. And dir_path_match() strips the trailing slash also. Use the new function, because the stripping code is removed in the next patch. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:24 UTC |
ae8d082 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:33 UTC | pathspec: pass directory indicator to match_pathspec_item() This patch activates the DO_MATCH_DIRECTORY code in m_p_i(), which makes "git diff HEAD submodule/" and "git diff HEAD submodule" produce the same output. Previously only the version without trailing slash returns the difference (if any). That's the effect of new ce_path_match(). dir_path_match() is not executed by the new tests. And it should not introduce regressions. Previously if path "dir/" is passed in with pathspec "dir/", they obviously match. With new dir_path_match(), the path becomes _directory_ "dir" vs pathspec "dir/", which is not executed by the old code path in m_p_i(). The new code path is executed and produces the same result. The other case is pathspec "dir" and path "dir/" is now turned to "dir" (with DO_MATCH_DIRECTORY). Still the same result before or after the patch. So why change? Because of the next patch about clean.c. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:19 UTC |
68690fd | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:32 UTC | match_pathspec: match pathspec "foo/" against directory "foo" Currently we do support matching pathspec "foo/" against directory "foo". That is because match_pathspec() has no way to tell "foo" is a directory and matching "foo/" against _file_ "foo" is wrong. The callers can now tell match_pathspec if "foo" is a directory, we could make an exception for this case. Code is not executed though because no callers pass the flag yet. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:19 UTC |
42b0874 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:31 UTC | dir.c: prepare match_pathspec_item for taking more flags Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:19 UTC |
854b095 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:30 UTC | pathspec: rename match_pathspec_depth() to match_pathspec() A long time ago, for some reason I was not happy with match_pathspec(). I created a better version, match_pathspec_depth() that was suppose to replace match_pathspec() eventually. match_pathspec() has finally been gone since 6 months ago. Use the shorter name for match_pathspec_depth(). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:14 UTC |
ebb3289 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:29 UTC | pathspec: convert some match_pathspec_depth() to dir_path_match() This helps reduce the number of match_pathspec_depth() call sites and show how m_p_d() is used. And it usage is: - match against an index entry (ce_path_match or match_pathspec_depth in ls-files) - match against a dir_entry from read_directory (dir_path_match and match_pathspec_depth in clean.c, which will be converted later) - resolve-undo (rerere.c and ls-files.c) Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:37:09 UTC |
429bb40 | Nguyễn Thái Ngọc Duy | 24 January 2014, 13:40:28 UTC | pathspec: convert some match_pathspec_depth() to ce_path_match() This helps reduce the number of match_pathspec_depth() call sites and show how match_pathspec_depth() is used. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:36:52 UTC |
9937e65 | W. Trevor King | 26 January 2014, 20:45:16 UTC | Documentation: describe 'submodule update --remote' use case Make it clear that there is no implicit floating going on; --remote lets you explicitly integrate the upstream branch in your current HEAD (just like running 'git pull' in the submodule). The only distinction with the current 'git pull' is the config location and setting used for the upstream branch, which is hopefully clear now. Signed-off-by: W. Trevor King <wking@tremily.us> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:35:52 UTC |
23d25e4 | W. Trevor King | 26 January 2014, 20:45:15 UTC | submodule: explicit local branch creation in module_clone The previous code only checked out branches in cmd_add. This commit moves the branch-checkout logic into module_clone, where it can be shared by cmd_add and cmd_update. I also update the initial checkout command to use 'reset' to preserve branches setup during module_clone. With this change, folks cloning submodules for the first time via: $ git submodule update ... will get a local branch instead of a detached HEAD, unless they are using the default checkout-mode updates. This is a change from the previous situation where cmd_update always used checkout-mode logic (regardless of the requested update mode) for updates that triggered an initial clone, which always resulted in a detached HEAD. This commit does not change the logic for updates after the initial clone, which will continue to create detached HEADs for checkout-mode updates, and integrate remote work with the local HEAD (detached or not) in other modes. The motivation for the change is that developers doing local work inside the submodule are likely to select a non-checkout-mode for updates so their local work is integrated with upstream work. Developers who are not doing local submodule work stick with checkout-mode updates so any apparently local work is blown away during updates. For example, if upstream rolls back the remote branch or gitlinked commit to an earlier version, the checkout-mode developer wants their old submodule checkout to be rolled back as well, instead of getting a no-op merge/rebase with the rolled-back reference. By using the update mode to distinguish submodule developers from black-box submodule consumers, we can setup local branches for the developers who will want local branches, and stick with detached HEADs for the developers that don't care. Testing ======= In t7406, just-cloned checkouts now update to the gitlinked hash with 'reset', to preserve the local branch for situations where we're not on a detached HEAD. I also added explicit tests to t7406 for HEAD attachement after cloning updates, showing that it depends on their update mode: * Checkout-mode updates get detached HEADs * Everyone else gets a local branch, matching the configured submodule.<name>.branch and defaulting to master. The 'initial-setup' tag makes it easy to reset the superproject to a known state, as several earlier tests commit to submodules and commit the changed gitlinks to the superproject, but don't push the new submodule commits to the upstream subprojects. This makes it impossible to checkout the current super master, because it references submodule commits that don't exist in the upstream subprojects. For a specific example, see the tests that currently generate the 'two_new_submodule_commits' commits. Documentation ============= I updated the docs to describe the 'submodule update' modes in detail. The old documentation did not distinguish between cloning and non-cloning updates and lacked clarity on which operations would lead to detached HEADs, and which would not. The new documentation addresses these issues while updating the docs to reflect the changes introduced by this commit's explicit local branch creation in module_clone. I also add '--checkout' to the usage summary and group the update-mode options into a single set. Signed-off-by: W. Trevor King <wking@tremily.us> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:35:48 UTC |
9adfc1c | W. Trevor King | 16 January 2014, 04:10:23 UTC | submodule: document module_clone arguments in comments Signed-off-by: W. Trevor King <wking@tremily.us> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:35:44 UTC |
a2aed08 | W. Trevor King | 16 January 2014, 04:10:22 UTC | submodule: make 'checkout' update_module mode more explicit This avoids the current awkwardness of having either '' or 'checkout' for checkout-mode updates, which makes testing for checkout-mode updates (or non-checkout-mode updates) easier. Signed-off-by: W. Trevor King <wking@tremily.us> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:35:09 UTC |
e8fa59b | Jonathan Nieder | 14 December 2013, 02:06:40 UTC | test-hashmap.c: drop unnecessary #includes Per Documentation/CodingGuidelines most C files in git start with a #include of git-compat-util.h or another header file that includes it, such as cache.h or builtin.h. This file doesn't need anything beyond "git-compat-util.h", so use that. Remove a #include of the system header <stdio.h> since it is already included by "git-compat-util.h". Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:33:46 UTC |
f7988c1 | Jonathan Nieder | 14 December 2013, 02:05:26 UTC | .gitignore: test-hashmap is a generated file Prevent the "test-hashmap" program from being accidentally tracked with "git add" or cluttering "git status" output. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:33:29 UTC |
352bbbd | David Kastrup | 12 February 2014, 14:27:24 UTC | blame.c: prepare_lines should not call xrealloc for every line Making a single preparation run for counting the lines will avoid memory fragmentation. Also, fix the allocated memory size which was wrong when sizeof(int *) != sizeof(int), and would have been too small for sizeof(int *) < sizeof(int), admittedly unlikely. Signed-off-by: David Kastrup <dak@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:32:41 UTC |
62cf3ca | David Kastrup | 08 February 2014, 09:19:26 UTC | builtin/blame.c::prepare_lines: fix allocation size of sb->lineno If we are calling xrealloc on every single line, the least we can do is get the right allocation size. Signed-off-by: David Kastrup <dak@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:32:41 UTC |
0a88f08 | David Kastrup | 22 January 2014, 00:20:15 UTC | builtin/blame.c: eliminate same_suspect() Since the origin pointers are "interned" and reference-counted, comparing the pointers rather than the content is enough. The only uninterned origins are cached values kept in commit->util, but same_suspect is not called on them. Signed-off-by: David Kastrup <dak@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:32:21 UTC |
6e2068a | Brad King | 27 January 2014, 14:45:09 UTC | merge-recursive.c: tolerate missing files while refreshing index Teach add_cacheinfo to tell make_cache_entry to skip refreshing stat information when a file is missing from the work tree. We do not want the index to be stat-dirty after the merge but also do not want to fail when a file happens to be missing. This fixes the 'merge-recursive w/ empty work tree - ours has rename' case in t3030-merge-recursive. Suggested-by: Elijah Newren <newren@gmail.com> Signed-off-by: Brad King <brad.king@kitware.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:31:30 UTC |
2576272 | Brad King | 27 January 2014, 14:45:08 UTC | read-cache.c: extend make_cache_entry refresh flag with options Convert the make_cache_entry boolean 'refresh' argument to a more general 'refresh_options' argument. Pass the value through to the underlying refresh_cache_ent call. Add option CE_MATCH_REFRESH to enable stat refresh. Update call sites to use the new signature. Signed-off-by: Brad King <brad.king@kitware.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:31:17 UTC |
2e2e7ec | Brad King | 27 January 2014, 14:45:07 UTC | read-cache.c: refactor --ignore-missing implementation Move lstat ENOENT handling from refresh_index to refresh_cache_ent and activate it with a new CE_MATCH_IGNORE_MISSING option. This will allow other call paths into refresh_cache_ent to use the feature. Signed-off-by: Brad King <brad.king@kitware.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:31:10 UTC |
29d9af5 | Brad King | 27 January 2014, 14:45:06 UTC | t3030-merge-recursive: test known breakage with empty work tree Sometimes when working with a large repository it can be useful to try out a merge and only check out conflicting files to disk (for example as a speed optimization on a server). Until v1.7.7-rc1~28^2~20 (merge-recursive: When we detect we can skip an update, actually skip it, 2011-08-11), it was possible to do so with the following idiom: # Prepare a temporary index and empty work tree. GIT_INDEX_FILE="$PWD/tmp-$$-index" && export GIT_INDEX_FILE && GIT_WORK_TREE="$PWD/tmp-$$-work" && export GIT_WORK_TREE && mkdir "$GIT_WORK_TREE" && # Convince the index that our side is on disk. git read-tree -i -m $ours && git update-index --ignore-missing --refresh && # Merge their side into our side. bases=$(git merge-base --all $ours $theirs) && git merge-recursive $bases -- $ours $theirs && tree=$(git write-tree) Nowadays, that still works and the exit status is the same, but merge-recursive produces a diagnostic if "our" side renamed a file: error: addinfo_cache failed for path 'dst' Add a test to document this regression. Signed-off-by: Brad King <brad.king@kitware.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 February 2014, 22:30:22 UTC |
2c0a1bd | Nguyễn Thái Ngọc Duy | 15 February 2014, 02:01:49 UTC | actually remove compat fnmatch source code Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 22:16:25 UTC |
70a8fc9 | Nguyễn Thái Ngọc Duy | 15 February 2014, 02:01:48 UTC | stop using fnmatch (either native or compat) Since v1.8.4 (about six months ago) wildmatch is used as default replacement for fnmatch. We have seen only one fix since so wildmatch probably has done a good job as fnmatch replacement. This concludes the fnmatch->wildmatch transition by no longer relying on fnmatch. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 22:16:11 UTC |
ff88022 | Nguyễn Thái Ngọc Duy | 15 February 2014, 02:01:47 UTC | Revert "test-wildmatch: add "perf" command to compare wildmatch and fnmatch" This reverts commit 1b25892636d2f250eb2163301440ee8c8c1ac944. compat fnmatch will be removed soon and we can't rely on fnmatch() available everywhere. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 22:15:58 UTC |
eb07894 | Nguyễn Thái Ngọc Duy | 15 February 2014, 02:01:46 UTC | use wildmatch() directly without fnmatch() wrapper Make it clear that we don't use fnmatch() anymore. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 22:15:46 UTC |
2df8566 | Roberto Tyley | 18 February 2014, 21:42:22 UTC | Documentation: fix documentation AsciiDoc links for external urls Turns out that putting 'link:' before the 'http' is actually superfluous in AsciiDoc, as there's already a predefined macro to handle it. "http, https, [etc] URLs are rendered using predefined inline macros." http://www.methods.co.nz/asciidoc/userguide.html#_urls "Hypertext links to files on the local file system are specified using the link inline macro." http://www.methods.co.nz/asciidoc/userguide.html#_linking_to_local_documents Despite being superfluous, the reference implementation of AsciiDoc tolerates the extra 'link:' and silently removes it, giving a functioning link in the generated HTML. However, AsciiDoctor (the Ruby implementation of AsciiDoc used to render the http://git-scm.com/ site) does /not/ have this behaviour, and so generates broken links, as can be seen here: http://git-scm.com/docs/git-cvsimport (links to cvs2git & parsecvs) http://git-scm.com/docs/git-filter-branch (link to The BFG) It's worth noting that after this change, the html generated by 'make html' in the git project is identical, and all links still work. Signed-off-by: Roberto Tyley <roberto.tyley@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 22:14:58 UTC |
ce8daa1 | Johan Herland | 12 February 2014, 09:54:16 UTC | notes: disallow reusing non-blob as a note object Currently "git notes add -C $object" will read the raw bytes from $object, and then copy those bytes into the note object, which is hardcoded to be of type blob. This means that if the given $object is a non-blob (e.g. tree or commit), the raw bytes from that object is copied into a blob object. This is probably not useful, and certainly not what any sane user would expect. So disallow it, by erroring out if the $object passed to the -C option is not a blob. The fix also applies to the -c option (in which the user is prompted to edit/verify the note contents in a text editor), and also when -c/-C is passed to "git notes append" (which appends the $object contents to an existing note object). In both cases, passing a non-blob $object does not make sense. Also add a couple of tests demonstrating expected behavior. Suggested-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 22:14:33 UTC |
46a7471 | Andrew Keller | 17 February 2014, 14:25:13 UTC | gitweb: Avoid overflowing page body frame with large images When displaying a blob in gitweb, if it's an image, specify constraints for maximum display width and height to prevent the image from overflowing the frame of the enclosing page_body div. This change assumes that it is more desirable to see the whole image without scrolling (new behavior) than it is to see every pixel without zooming (previous behavior). Signed-off-by: Andrew Keller <andrew@kellerfarm.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 February 2014, 17:50:14 UTC |
3caec73 | Kirill A. Shutemov | 18 February 2014, 22:58:55 UTC | config: teach "git config --file -" to read from the standard input The patch extends git config --file interface to allow read config from stdin. Editing stdin or setting value in stdin is an error. Include by absolute path is allowed in stdin config, but not by relative path. Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 February 2014, 00:12:14 UTC |
c8985ce | Kirill A. Shutemov | 18 February 2014, 22:58:54 UTC | config: change git_config_with_options() interface We're going to have more options for config source. Let's alter git_config_with_options() interface to accept struct with all source options. Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 February 2014, 00:12:13 UTC |
6aea9f0 | Kirill A. Shutemov | 18 February 2014, 22:58:53 UTC | builtin/config.c: rename check_blob_write() -> check_write() The function will be reused to check for other conditions which prevent write. Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 February 2014, 00:12:11 UTC |
d14d424 | Jeff King | 18 February 2014, 22:58:52 UTC | config: disallow relative include paths from blobs When we see a relative config include like: [include] path = foo we make it relative to the containing directory of the file that contains the snippet. This makes no sense for config read from a blob, as it is not on the filesystem. Something like "HEAD:some/path" could have a relative path within the tree, but: 1. It would not be part of include.path, which explicitly refers to the filesystem. 2. It would need different parsing rules anyway to determine that it is a tree path. The current code just uses the "name" field, which is wrong. Let's split that into "name" and "path" fields, use the latter for relative includes, and fill in only the former for blobs. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 February 2014, 00:12:09 UTC |
78368f2 | Junio C Hamano | 19 February 2014, 00:00:53 UTC | open_istream(): do not dereference NULL in the error case When stream-filter cannot be attached, it is expected to return NULL, and we should close the stream we opened and signal an error by returning NULL ourselves from this function. However, we attempted to dereference that NULL pointer between the point we detected the error and returned from the function. Brought-to-attention-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 February 2014, 00:00:53 UTC |
d954828 | John Keeping | 16 February 2014, 16:06:05 UTC | builtin/mv: don't use memory after free If 'src' already ends with a slash, then add_slash() will just return it, meaning that 'free(src_with_slash)' is actually 'free(src)'. Since we use 'src' later, this will result in use-after-free. In fact, this cannot happen because 'src' comes from internal_copy_pathspec() without the KEEP_TRAILING_SLASH flag, so any trailing '/' will have been stripped; but static analysis tools are not clever enough to realise this and so warn that 'src' could be used after having been free'd. Fix this by checking that 'src_w_slash' is indeed newly allocated memory. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 February 2014, 23:51:56 UTC |
a68a67d | John Keeping | 16 February 2014, 16:06:04 UTC | utf8: use correct type for values in interval table We treat these as unsigned everywhere and compare against unsigned values, so declare them using the typedef we already have for this. While we're here, fix the indentation as well. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 February 2014, 23:51:40 UTC |
df5213b | John Keeping | 16 February 2014, 16:06:03 UTC | utf8: fix iconv error detection iconv(3) returns "(size_t) -1" on error. Make sure that we cast the "-1" properly when checking for this. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 February 2014, 23:51:33 UTC |
aa012e9 | John Keeping | 16 February 2014, 16:06:02 UTC | notes-utils: handle boolean notes.rewritemode correctly If we carry on after outputting config_error_nonbool then we're guaranteed to dereference a null pointer. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 February 2014, 23:51:29 UTC |