summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-04-26sequencer: introduce the `merge` commandLibravatar Johannes Schindelin2-0/+204
This patch is part of the effort to reimplement `--preserve-merges` with a substantially improved design, a design that has been developed in the Git for Windows project to maintain the dozens of Windows-specific patch series on top of upstream Git. The previous patch implemented the `label` and `reset` commands to label commits and to reset to labeled commits. This patch adds the `merge` command, with the following syntax: merge [-C <commit>] <rev> # <oneline> The <commit> parameter in this instance is the *original* merge commit, whose author and message will be used for the merge commit that is about to be created. The <rev> parameter refers to the (possibly rewritten) revision to merge. Let's see an example of a todo list (the initial `label onto` command is an auto-generated convenience so that the label `onto` can be used to refer to the revision onto which we rebase): label onto # Branch abc reset onto pick deadbeef Hello, world! label abc reset onto pick cafecafe And now for something completely different merge -C baaabaaa abc # Merge the branch 'abc' into master To edit the merge commit's message (a "reword" for merges, if you will), use `-c` (lower-case) instead of `-C`; this convention was borrowed from `git commit` that also supports `-c` and `-C` with similar meanings. To create *new* merges, i.e. without copying the commit message from an existing commit, simply omit the `-C <commit>` parameter (which will open an editor for the merge message): merge abc This comes in handy when splitting a branch into two or more branches. Note: this patch only adds support for recursive merges, to keep things simple. Support for octopus merges will be added later in a separate patch series, support for merges using strategies other than the recursive merge is left for the future. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-26sequencer: introduce new commands to reset the revisionLibravatar Johannes Schindelin2-7/+208
In the upcoming commits, we will teach the sequencer to rebase merges. This will be done in a very different way from the unfortunate design of `git rebase --preserve-merges` (which does not allow for reordering commits, or changing the branch topology). The main idea is to introduce new todo list commands, to support labeling the current revision with a given name, resetting the current revision to a previous state, and merging labeled revisions. This idea was developed in Git for Windows' Git garden shears (that are used to maintain Git for Windows' "thicket of branches" on top of upstream Git), and this patch is part of the effort to make it available to a wider audience, as well as to make the entire process more robust (by implementing it in a safe and portable language rather than a Unix shell script). This commit implements the commands to label, and to reset to, given revisions. The syntax is: label <name> reset <name> Internally, the `label <name>` command creates the ref `refs/rewritten/<name>`. This makes it possible to work with the labeled revisions interactively, or in a scripted fashion (e.g. via the todo list command `exec`). These temporary refs are removed upon sequencer_remove_state(), so that even a `git rebase --abort` cleans them up. We disallow '#' as label because that character will be used as separator in the upcoming `merge` command. Later in this patch series, we will mark the `refs/rewritten/` refs as worktree-local, to allow for interactive rebases to be run in parallel in worktrees linked to the same repository. As typos happen, a failed `label` or `reset` command will be rescheduled immediately. As the previous code to reschedule a command is embedded deeply in the pick/fixup/squash code path, we simply duplicate the few lines. This will allow us to extend the new code path easily for the upcoming `merge` command. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-26git-rebase--interactive: clarify argumentsLibravatar Stefan Beller1-7/+7
Up to now each command took a commit as its first argument and ignored the rest of the line (usually the subject of the commit) Now that we are about to introduce commands that take different arguments, clarify each command by giving the argument list. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-26sequencer: offer helpful advice when a command was rescheduledLibravatar Johannes Schindelin1-0/+16
Previously, we did that just magically, and potentially left some users quite puzzled. Let's err on the safe side instead, telling the user what is happening, and how they are supposed to continue. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-26sequencer: refactor how original todo list lines are accessedLibravatar Johannes Schindelin1-24/+36
Previously, we did a lot of arithmetic gymnastics to get at the line in the todo list (as stored in todo_list.buf). This might have been fast, but only in terms of execution speed, not in terms of developer time. Let's refactor this to make it a lot easier to read, and hence to reason about the correctness of the code. It is not performance-critical code anyway. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-26sequencer: make rearrange_squash() a bit more obviousLibravatar Johannes Schindelin1-1/+1
There are some commands that have to be skipped from rearranging by virtue of not handling any commits. However, the logic was not quite obvious: it skipped commands based on their position in the enum todo_command. Instead, let's make it explicit that we skip all commands that do not handle any commit. With one exception: the `drop` command, because it, well, drops the commit and is therefore not eligible to rearranging. Note: this is a bit academic at the moment because the only time we call `rearrange_squash()` is directly after generating the todo list, when we have nothing but `pick` commands anyway. However, the upcoming `merge` command *will* want to be handled by that function, and it *can* handle commits. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-26sequencer: avoid using errno clobbered by rollback_lock_file()Libravatar Johannes Schindelin1-4/+6
As pointed out in a review of the `--rebase-merges` patch series, `rollback_lock_file()` clobbers errno. Therefore, we have to report the error message that uses errno before calling said function. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-25The fourth batch for 2.18Libravatar Junio C Hamano1-0/+78
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-25Merge branch 'jm/mem-pool'Libravatar Junio C Hamano4-61/+106
An reusable "memory pool" implementation has been extracted from fast-import.c, which in turn has become the first user of the mem-pool API. * jm/mem-pool: mem-pool: move reusable parts of memory pool into its own file fast-import: introduce mem_pool type fast-import: rename mem_pool type to mp_block
2018-04-25Merge branch 'tg/use-git-contacts'Libravatar Junio C Hamano1-2/+2
Doc update. * tg/use-git-contacts: SubmittingPatches: mention the git contacts command
2018-04-25Merge branch 'sb/filenames-with-dashes'Libravatar Junio C Hamano42-45/+45
Rename bunch of source files to more consistently use dashes instead of underscores to connect words. * sb/filenames-with-dashes: replace_object.c: rename to use dash in file name sha1_file.c: rename to use dash in file name sha1_name.c: rename to use dash in file name exec_cmd: rename to use dash in file name unicode_width.h: rename to use dash in file name write_or_die.c: rename to use dashes in file name
2018-04-25Merge branch 'cc/perf-bisect'Libravatar Junio C Hamano3-10/+166
Performance measuring framework in t/perf learned to help bisecting performance regressions. * cc/perf-bisect: t/perf: add scripts to bisect performance regressions perf/run: add --subsection option
2018-04-25Merge branch 'bp/fsmonitor-prime-index'Libravatar Junio C Hamano1-0/+3
The index file is updated to record the fsmonitor section after a full scan was made, to avoid wasting the effort that has already spent. * bp/fsmonitor-prime-index: fsmonitor: force index write after full scan
2018-04-25Merge branch 'bp/fsmonitor-bufsize-fix'Libravatar Junio C Hamano1-1/+1
Fix an unexploitable (because the oversized contents are not under attacker's control) buffer overflow. * bp/fsmonitor-bufsize-fix: fsmonitor: fix incorrect buffer size when printing version number
2018-04-25Merge branch 'cb/bash-completion-ls-files-processing'Libravatar Junio C Hamano1-6/+1
Shell completion (in contrib) that gives list of paths have been optimized somewhat. * cb/bash-completion-ls-files-processing: completion: improve ls-files filter performance
2018-04-25Merge branch 'es/worktree-docs'Libravatar Junio C Hamano1-9/+9
Doc updates. * es/worktree-docs: git-worktree.txt: unify command-line prompt in example blocks git-worktree.txt: recommend 'git worktree remove' over manual deletion
2018-04-25Merge branch 'es/fread-reads-dir-autoconf-fix'Libravatar Junio C Hamano1-1/+1
Small fix to the autoconf build procedure. * es/fread-reads-dir-autoconf-fix: configure.ac: fix botched FREAD_READS_DIRECTORIES check
2018-04-25Merge branch 'ps/test-chmtime-get'Libravatar Junio C Hamano10-42/+63
Test cleanup. * ps/test-chmtime-get: t/helper: 'test-chmtime (--get|-g)' to print only the mtime
2018-04-25Merge branch 'js/t5404-path-fix'Libravatar Junio C Hamano1-1/+1
Test fix. * js/t5404-path-fix: t5404: relax overzealous test
2018-04-25Merge branch 'jk/ref-array-push'Libravatar Junio C Hamano4-14/+36
API clean-up aournd ref-filter code. * jk/ref-array-push: ref-filter: factor ref_array pushing into its own function ref-filter: make ref_array_item allocation more consistent ref-filter: use "struct object_id" consistently
2018-04-25Merge branch 'en/doc-typoes'Libravatar Junio C Hamano7-8/+8
Docfix. * en/doc-typoes: Documentation: normalize spelling of 'normalised' Documentation: fix several one-character-off spelling errors
2018-04-25Merge branch 'lw/daemon-log-destination'Libravatar Junio C Hamano1-1/+1
Recent introduction of "--log-destination" option to "git daemon" did not work well when the daemon was run under "--inetd" mode. * lw/daemon-log-destination: daemon.c: fix condition for redirecting stderr
2018-04-25Merge branch 'mn/send-email-credential-doc'Libravatar Junio C Hamano1-10/+6
Doc update. * mn/send-email-credential-doc: send-email: simplify Gmail example in the documentation
2018-04-25Merge branch 'ak/bisect-doc-typofix'Libravatar Junio C Hamano1-2/+2
Docfix. * ak/bisect-doc-typofix: Documentation/git-bisect.txt: git bisect term → git bisect terms
2018-04-25Merge branch 'br/mergetools-guiffy'Libravatar Junio C Hamano1-0/+18
"git mergetools" learned talking to guiffy. * br/mergetools-guiffy: mergetools: add support for guiffy
2018-04-25Merge branch 'nd/worktree-move'Libravatar Junio C Hamano1-4/+3
Test update. * nd/worktree-move: t2028: tighten grep expression to make "move worktree" test more robust
2018-04-25Merge branch 'ks/branch-list-detached-rebase-i'Libravatar Junio C Hamano2-4/+32
"git branch --list" during an interrupted "rebase -i" now lets users distinguish the case where a detached HEAD is being rebased and a normal branch is being rebased. * ks/branch-list-detached-rebase-i: t3200: verify "branch --list" sanity when rebasing from detached HEAD branch --list: print useful info whilst interactive rebasing a detached HEAD
2018-04-25Merge branch 'jk/t5561-missing-curl'Libravatar Junio C Hamano2-2/+12
Test fixes. * jk/t5561-missing-curl: t5561: skip tests if curl is not available t5561: drop curl stderr redirects
2018-04-25Merge branch 'bw/commit-partial-from-subdirectory-fix'Libravatar Junio C Hamano2-2/+13
"cd sub/dir && git commit ../path" ought to record the changes to the file "sub/path", but this regressed long time ago. * bw/commit-partial-from-subdirectory-fix: commit: allow partial commits with relative paths
2018-04-25Merge branch 'jk/relative-directory-fix'Libravatar Junio C Hamano11-17/+223
Some codepaths, including the refs API, get and keep relative paths, that go out of sync when the process does chdir(2). The chdir-notify API is introduced to let these codepaths adjust these cached paths to the new current directory. * jk/relative-directory-fix: refs: use chdir_notify to update cached relative paths set_work_tree: use chdir_notify add chdir-notify API trace.c: export trace_setup_key set_git_dir: die when setenv() fails
2018-04-25Merge branch 'jk/flockfile-stdio'Libravatar Junio C Hamano1-3/+5
Code clean-up. * jk/flockfile-stdio: config: move flockfile() closer to unlocked functions
2018-04-25Merge branch 'pw/rebase-signoff'Libravatar Junio C Hamano8-57/+114
"git rebase" has learned to honor "--signoff" option when using backends other than "am" (but not "--preserve-merges"). * pw/rebase-signoff: rebase --keep-empty: always use interactive rebase rebase -p: error out if --signoff is given rebase: extend --signoff support
2018-04-25Merge branch 'pw/rebase-keep-empty-fixes'Libravatar Junio C Hamano3-3/+11
"git rebase --keep-empty" still removed an empty commit if the other side contained an empty commit (due to the "does an equivalent patch exist already?" check), which has been corrected. * pw/rebase-keep-empty-fixes: rebase: respect --no-keep-empty rebase -i --keep-empty: don't prune empty commits rebase --root: stop assuming squash_onto is unset
2018-04-25Merge branch 'cb/git-gui-ttk-style'Libravatar Junio C Hamano1-5/+10
"git gui" has been taught to work with old versions of tk (like 8.5.7) that do not support "ttk::style theme use" as a way to query the current theme. * cb/git-gui-ttk-style: git-gui: workaround ttk:style theme use
2018-04-25Merge branch 'bp/git-gui-bind-kp-enter'Libravatar Junio C Hamano1-0/+1
"git gui" performs commit upon CTRL/CMD+ENTER but the CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the same key binding. It now does. * bp/git-gui-bind-kp-enter: git-gui: bind CTRL/CMD+numpad ENTER to do_commit
2018-04-25Merge branch 'bb/git-gui-ssh-key-files'Libravatar Junio C Hamano1-1/+4
"git gui" learned that "~/.ssh/id_ecdsa.pub" and "~/.ssh/id_ed25519.pub" are also possible SSH key files. * bb/git-gui-ssh-key-files: git-gui: search for all current SSH key types
2018-04-12mem-pool: move reusable parts of memory pool into its own fileLibravatar Jameson Miller4-69/+91
This moves the reusable parts of the memory pool logic used by fast-import.c into its own file for use by other components. Signed-off-by: Jameson Miller <jamill@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-12SubmittingPatches: mention the git contacts commandLibravatar Thomas Gummerer1-2/+2
Instead of just mentioning 'git blame' and 'git shortlog', which make it quite hard for new contributors to pick out the appropriate list of people to cc on their patch series, mention the 'git contacts' utility, which makes it much easier to get a reasonable list of contacts for a change. This should help new contributors pick out a reasonable cc list by simply using a single command. Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-12fast-import: introduce mem_pool typeLibravatar Jameson Miller1-29/+52
Introduce the mem_pool type which encapsulates all the information necessary to manage a pool of memory. This change moves the existing variables in fast-import used to support the global memory pool to use this structure. It also renames variables that are no longer used by memory pools to reflect their more scoped usage. These changes allow for the multiple instances of a memory pool to exist and be reused outside of fast-import. In a future commit the mem_pool type will be moved to its own file. Signed-off-by: Jameson Miller <jamill@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-12fast-import: rename mem_pool type to mp_blockLibravatar Jameson Miller1-10/+10
This is part of a patch series to extract the memory pool logic in fast-import into a more generalized version. The existing mem_pool type maps more closely to a "block of memory" (mp_block) in the more generalized memory pool. This commit renames the mem_pool to mp_block to reduce churn in future patches. Signed-off-by: Jameson Miller <jamill@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-12Merge branch 'svn/authors-prog-2' of git://bogomips.org/git-svnLibravatar Junio C Hamano5-12/+57
* 'svn/authors-prog-2' of git://bogomips.org/git-svn: git-svn: allow empty email-address using authors-prog and authors-file git-svn: search --authors-prog in PATH too
2018-04-11replace_object.c: rename to use dash in file nameLibravatar Stefan Beller2-1/+1
This is more consistent with the project style. The majority of Git's source files use dashes in preference to underscores in their file names. Noticed while adding a header corresponding to this file. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com>
2018-04-11sha1_file.c: rename to use dash in file nameLibravatar Stefan Beller4-3/+3
This is more consistent with the project style. The majority of Git's source files use dashes in preference to underscores in their file names. Signed-off-by: Stefan Beller <sbeller@google.com>
2018-04-11sha1_name.c: rename to use dash in file nameLibravatar Stefan Beller4-3/+3
This is more consistent with the project style. The majority of Git's source files use dashes in preference to underscores in their file names. Signed-off-by: Stefan Beller <sbeller@google.com>
2018-04-11exec_cmd: rename to use dash in file nameLibravatar Stefan Beller31-32/+32
This is more consistent with the project style. The majority of Git's source files use dashes in preference to underscores in their file names. Signed-off-by: Stefan Beller <sbeller@google.com>
2018-04-11unicode_width.h: rename to use dash in file nameLibravatar Stefan Beller4-5/+5
This is more consistent with the project style. The majority of Git's source files use dashes in preference to underscores in their file names. Also adjust contrib/update-unicode as well. Signed-off-by: Stefan Beller <sbeller@google.com>
2018-04-11write_or_die.c: rename to use dashes in file nameLibravatar Stefan Beller2-1/+1
This is more consistent with the project style. The majority of Git's source files use dashes in preference to underscores in their file names. Signed-off-by: Stefan Beller <sbeller@google.com>
2018-04-11fsmonitor: force index write after full scanLibravatar Ben Peart1-0/+3
fsmonitor currently only flags the index as dirty if the extension is being added or removed. This is a performance optimization that recognizes you can stat() a lot of files in less time than it takes to write out an updated index. This patch makes a small enhancement and flags the index dirty if we end up having to stat() all files and scan the entire working directory. The assumption being that must be expensive or you would not have turned on the feature. Signed-off-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-11Revert "Merge branch 'en/rename-directory-detection'"Libravatar Junio C Hamano9-5197/+115
This reverts commit e4bb62fa1eeee689744b413e29a50b4d1dae6886, reversing changes made to 468165c1d8a442994a825f3684528361727cd8c0. The topic appears to inflict severe regression in renaming merges, even though the promise of it was that it would improve them. We do not yet know which exact change in the topic was wrong, but in the meantime, let's play it safe and revert it out of 'master' before real Git-using projects are harmed. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-11fsmonitor: fix incorrect buffer size when printing version numberLibravatar Ben Peart1-1/+1
This is a trivial bug fix for passing the incorrect size to snprintf() when outputting the version. It should be passing the size of the destination buffer rather than the size of the value being printed. Signed-off-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>