diff options
260 files changed, 3792 insertions, 1312 deletions
diff --git a/.github/workflows/check-whitespace.yml b/.github/workflows/check-whitespace.yml index 9d070b9cdf..f1483059c7 100644 --- a/.github/workflows/check-whitespace.yml +++ b/.github/workflows/check-whitespace.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Set commit count shell: bash - run: echo "::set-env name=COMMIT_DEPTH::$((1+$COMMITS))" + run: echo "COMMIT_DEPTH=$((1+$COMMITS))" >>$GITHUB_ENV env: COMMITS: ${{ github.event.pull_request.commits }} @@ -58,12 +58,14 @@ jobs: - name: Add Check Output as Comment uses: actions/github-script@v3 id: add-comment + env: + log: ${{ steps.check_out.outputs.checkout }} with: script: | - github.issues.createComment({ + await github.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: "Whitespace errors found in workflow ${{ github.workflow }}:\n\n${{ steps.check_out.outputs.checkout }}" + body: `Whitespace errors found in workflow ${{ github.workflow }}:\n\n\`\`\`\n${process.env.log.replace(/\\n/g, "\n")}\n\`\`\`` }) if: ${{ failure() }} diff --git a/.gitignore b/.gitignore index 6232d33924..f85d02c854 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,7 @@ /git-filter-branch /git-fmt-merge-msg /git-for-each-ref +/git-for-each-repo /git-format-patch /git-fsck /git-fsck-objects diff --git a/Documentation/RelNotes/2.30.0.txt b/Documentation/RelNotes/2.30.0.txt index 76ae487fe9..4c5be2dd04 100644 --- a/Documentation/RelNotes/2.30.0.txt +++ b/Documentation/RelNotes/2.30.0.txt @@ -63,8 +63,18 @@ UI, Workflows & Features * Exit codes from "git remote add" etc. were not usable by scripted callers, but now they are. + * "git archive" now allows compression level higher than "-9" + when generating tar.gz output. + * Zsh autocompletion (in contrib/) update. + * The maximum length of output filenames "git format-patch" creates + has become configurable (used to be capped at 64). + + * "git rev-parse" learned the "--end-of-options" to help scripts to + safely take a parameter that is supposed to be a revision, e.g. + "git rev-parse --verify -q --end-of-options $rev". + Performance, Internal Implementation, Development Support etc. @@ -101,6 +111,11 @@ Performance, Internal Implementation, Development Support etc. * Test scripts are being prepared to transition of the default branch name to 'main'. + * "git fetch --depth=<n>" over the stateless RPC / smart HTTP + transport handled EOF from the client poorly at the server end. + + * A specialization of hashmap that uses a string as key has been + introduced. Hopefully it will see wider use over time. Fixes since v2.29 @@ -167,6 +182,61 @@ Fixes since v2.29 * A recent oid->hash conversion missed one spot, breaking "git svn". (merge 03bb366de4 bc/svn-hash-oid-fix later to maint). + * The documentation on the "--abbrev=<n>" option did not say the + output may be longer than "<n>" hexdigits, which has been + clarified. + (merge cda34e0d0c jc/abbrev-doc later to maint). + + * "git p4" now honors init.defaultBranch configuration. + (merge 1b09d1917f js/p4-default-branch later to maint). + + * Recently the format of an internal state file "rebase -i" uses has + been tightened up for consistency, which would hurt those who start + "rebase -i" with old git and then continue with new git. Loosen + the reader side a bit (which we may want to tighten again in a year + or so). + (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint). + + * The code to see if "git stash drop" can safely remove refs/stash + has been made more carerful. + (merge 4f44c5659b rs/empty-reflog-check-fix later to maint). + + * "git log -L<range>:<path>" is documented to take no pathspec, but + this was not enforced by the command line option parser, which has + been corrected. + (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint). + + * "git format-patch --output=there" did not work as expected and + instead crashed. The option is now supported. + (merge dc1672dd10 jk/format-patch-output later to maint). + + * Define ARM64 compiled with MSVC to be little-endian. + (merge 0c038fc65a dg/bswap-msvc later to maint). + + * "git rebase -i" did not store ORIG_HEAD correctly. + (merge 8843302307 pw/rebase-i-orig-head later to maint). + + * "git blame -L :funcname -- path" did not work well for a path for + which a userdiff driver is defined. + + * "make DEVELOPER=1 sparse" used to run sparse and let it emit + warnings; now such warnings will cause an error. + (merge 521dc56270 jc/sparse-error-for-developer-build later to maint). + + * "git blame --ignore-revs-file=<file>" learned to ignore a + non-existent object name in the input, instead of complaining. + (merge c714d05875 jc/blame-ignore-fix later to maint). + + * Running "git diff" while allowing external diff in a state with + unmerged paths used to segfault, which has been corrected. + (merge d66851806f jk/diff-release-filespec-fix later to maint). + + * Build configuration cleanup. + (merge b990f02fd8 ab/config-mak-uname-simplify later to maint). + + * Fix regression introduced when nvimdiff support in mergetool was added. + (merge 12026f46e7 pd/mergetool-nvimdiff later to maint). + * Other code cleanup, docfix, build fix, etc. (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint). (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint). @@ -177,3 +247,10 @@ Fixes since v2.29 (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint). (merge 4e1bee9a99 js/t7006-cleanup later to maint). (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint). + (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint). + (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint). + (merge 9542d56379 sd/prompt-local-variable later to maint). + (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint). + (merge b7e20b4373 mc/typofix later to maint). + (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint). + (merge 53b67a801b js/test-file-size later to maint). diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt index 88750af7ae..dc3bceb6d1 100644 --- a/Documentation/blame-options.txt +++ b/Documentation/blame-options.txt @@ -11,11 +11,12 @@ -L <start>,<end>:: -L :<funcname>:: - Annotate only the given line range. May be specified multiple times. - Overlapping ranges are allowed. + Annotate only the line range given by '<start>,<end>', + or by the function name regex '<funcname>'. + May be specified multiple times. Overlapping ranges are allowed. + -<start> and <end> are optional. ``-L <start>'' or ``-L <start>,'' spans from -<start> to end of file. ``-L ,<end>'' spans from start of file to <end>. +'<start>' and '<end>' are optional. `-L <start>` or `-L <start>,` spans from +'<start>' to end of file. `-L ,<end>` spans from start of file to '<end>'. + include::line-range-format.txt[] diff --git a/Documentation/config.txt b/Documentation/config.txt index 025ca4df11..f292c2689e 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -265,7 +265,7 @@ color:: The basic colors accepted are `normal`, `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan` and `white`. The first color given is the foreground; the second is the background. All the basic colors except -`normal` have a bright variant that can be speficied by prefixing the +`normal` have a bright variant that can be specified by prefixing the color with `bright`, like `brightred`. + Colors may also be given as numbers between 0 and 255; these use ANSI diff --git a/Documentation/config/format.txt b/Documentation/config/format.txt index 851bf410a3..fdbc06a4d2 100644 --- a/Documentation/config/format.txt +++ b/Documentation/config/format.txt @@ -94,6 +94,11 @@ format.outputDirectory:: Set a custom directory to store the resulting files instead of the current working directory. All directory components will be created. +format.filenameMaxLength:: + The maximum length of the output filenames generated by the + `format-patch` command; defaults to 64. Can be overridden + by the `--filename-max-length=<n>` command line option. + format.useAutoBase:: A boolean value which lets you enable the `--base=auto` option of format-patch by default. Can also be set to "whenAble" to allow diff --git a/Documentation/config/maintenance.txt b/Documentation/config/maintenance.txt index a0706d8f09..a5ead09e4b 100644 --- a/Documentation/config/maintenance.txt +++ b/Documentation/config/maintenance.txt @@ -1,3 +1,23 @@ +maintenance.auto:: + This boolean config option controls whether some commands run + `git maintenance run --auto` after doing their normal work. Defaults + to true. + +maintenance.strategy:: + This string config option provides a way to specify one of a few + recommended schedules for background maintenance. This only affects + which tasks are run during `git maintenance run --schedule=X` + commands, provided no `--task=<task>` arguments are provided. + Further, if a `maintenance.<task>.schedule` config value is set, + then that value is used instead of the one provided by + `maintenance.strategy`. The possible strategy strings are: ++ +* `none`: This default setting implies no task are run at any schedule. +* `incremental`: This setting optimizes for performing small maintenance + activities that do not delete any data. This does not schedule the `gc` + task, but runs the `prefetch` and `commit-graph` tasks hourly and the + `loose-objects` and `incremental-repack` tasks daily. + maintenance.<task>.enabled:: This boolean config option controls whether the maintenance task with name `<task>` is run when no `--task` option is specified to @@ -5,6 +25,11 @@ maintenance.<task>.enabled:: `--task` option exists. By default, only `maintenance.gc.enabled` is true. +maintenance.<task>.schedule:: + This config option controls whether or not the given `<task>` runs + during a `git maintenance run --schedule=<frequency>` command. The + value must be one of "hourly", "daily", or "weekly". + maintenance.commit-graph.auto:: This integer config option controls how often the `commit-graph` task should be run as part of `git maintenance run --auto`. If zero, then diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index ee52b65e46..746b144c76 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -36,9 +36,9 @@ endif::git-format-patch[] -U<n>:: --unified=<n>:: Generate diffs with <n> lines of context instead of - the usual three. Implies `--patch`. + the usual three. ifndef::git-format-patch[] - Implies `-p`. + Implies `--patch`. endif::git-format-patch[] --output=<file>:: @@ -441,12 +441,16 @@ endif::git-format-patch[] --binary:: In addition to `--full-index`, output a binary diff that - can be applied with `git-apply`. Implies `--patch`. + can be applied with `git-apply`. +ifndef::git-format-patch[] + Implies `--patch`. +endif::git-format-patch[] --abbrev[=<n>]:: Instead of showing the full 40-byte hexadecimal object name in diff-raw format output and diff-tree header - lines, show only a partial prefix. + lines, show the shortest prefix that is at least '<n>' + hexdigits long that uniquely refers the object. In diff-patch output format, `--full-index` takes higher precedence, i.e. if `--full-index` is specified, full blob names will be shown regardless of `--abbrev`. @@ -700,7 +704,10 @@ endif::git-format-patch[] -W:: --function-context:: - Show whole surrounding functions of changes. + Show whole function as context lines for each change. + The function names are determined in the same way as + `git diff` works out patch hunk headers (see 'Defining a + custom hunk-header' in linkgit:gitattributes[5]). ifndef::git-format-patch[] ifndef::git-log[] diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt index 7e81541996..34b496d485 100644 --- a/Documentation/git-blame.txt +++ b/Documentation/git-blame.txt @@ -87,7 +87,9 @@ include::blame-options.txt[] --abbrev=<n>:: Instead of using the default 7+1 hexadecimal digits as the - abbreviated object name, use <n>+1 digits. Note that 1 column + abbreviated object name, use <m>+1 digits, where <m> is at + least <n> but ensures the commit object names are unique. + Note that 1 column is used for a caret to mark the boundary commit. diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt index ace4ad3da8..adaa1782a8 100644 --- a/Documentation/git-branch.txt +++ b/Documentation/git-branch.txt @@ -9,7 +9,7 @@ SYNOPSIS -------- [verse] 'git branch' [--color[=<when>] | --no-color] [--show-current] - [-v [--abbrev=<length> | --no-abbrev]] + [-v [--abbrev=<n> | --no-abbrev]] [--column[=<options>] | --no-column] [--sort=<key>] [--merged [<commit>]] [--no-merged [<commit>]] [--contains [<commit>]] [--no-contains [<commit>]] @@ -194,8 +194,10 @@ This option is only applicable in non-verbose mode. Be more quiet when creating or deleting a branch, suppressing non-error messages. ---abbrev=<length>:: - Alter the sha1's minimum display length in the output listing. +--abbrev=<n>:: + In the verbose listing that show the commit object name, + show the shortest prefix that is at least '<n>' hexdigits + long that uniquely refers the object. The default value is 7 and can be overridden by the `core.abbrev` config option. diff --git a/Documentation/git-for-each-repo.txt b/Documentation/git-for-each-repo.txt new file mode 100644 index 0000000000..94bd19da26 --- /dev/null +++ b/Documentation/git-for-each-repo.txt @@ -0,0 +1,59 @@ +git-for-each-repo(1) +==================== + +NAME +---- +git-for-each-repo - Run a Git command on a list of repositories + + +SYNOPSIS +-------- +[verse] +'git for-each-repo' --config=<config> [--] <arguments> + + +DESCRIPTION +----------- +Run a Git command on a list of repositories. The arguments after the +known options or `--` indicator are used as the arguments for the Git +subprocess. + +THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE. + +For example, we could run maintenance on each of a list of repositories +stored in a `maintenance.repo` config variable using + +------------- +git for-each-repo --config=maintenance.repo maintenance run +------------- + +This will run `git -C <repo> maintenance run` for each value `<repo>` +in the multi-valued config variable `maintenance.repo`. + + +OPTIONS +------- +--config=<config>:: + Use the given config variable as a multi-valued list storing + absolute path names. Iterate on that list of paths to run + the given arguments. ++ +These config values are loaded from system, global, and local Git config, +as available. If `git for-each-repo` is run in a directory that is not a +Git repository, then only the system and global config is used. + + +SUBPROCESS BEHAVIOR +------------------- + +If any `git -C <repo> <arguments>` subprocess returns a non-zero exit code, +then the `git for-each-repo` process returns that exit code without running +more subprocesses. + +Each `git -C <repo> <arguments>` subprocess inherits the standard file +descriptors `stdin`, `stdout`, and `stderr`. + + +GIT +--- +Part of the linkgit:git[1] suite diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt index bf1bb40f63..3e49bf2210 100644 --- a/Documentation/git-format-patch.txt +++ b/Documentation/git-format-patch.txt @@ -28,6 +28,7 @@ SYNOPSIS [--no-notes | --notes[=<ref>]] [--interdiff=<previous>] [--range-diff=<previous> [--creation-factor=<percent>]] + [--filename-max-length=<n>] [--progress] [<common diff options>] [ <since> | <revision range> ] @@ -200,6 +201,13 @@ populated with placeholder text. allows for useful naming of a patch series, and can be combined with the `--numbered` option. +--filename-max-length=<n>:: + Instead of the standard 64 bytes, chomp the generated output + filenames at around '<n>' bytes (too short a value will be + silently raised to a reasonable length). Defaults to the + value of the `format.filenameMaxLength` configuration + variable, or 64 if unconfigured. + --rfc:: Alias for `--subject-prefix="RFC PATCH"`. RFC means "Request For Comments"; use this when sending an experimental patch for diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt index 6077ff01a4..4e0ba8234a 100644 --- a/Documentation/git-grep.txt +++ b/Documentation/git-grep.txt @@ -241,7 +241,7 @@ providing this option will cause it to die. --show-function:: Show the preceding line that contains the function name of the match, unless the matching line is a function name itself. - The name is determined in the same way as 'git diff' works out + The name is determined in the same way as `git diff` works out patch hunk headers (see 'Defining a custom hunk-header' in linkgit:gitattributes[5]). @@ -266,7 +266,9 @@ providing this option will cause it to die. Show the surrounding text from the previous line containing a function name up to the one before the next function name, effectively showing the whole function in which the match was - found. + found. The function names are determined in the same way as + `git diff` works out patch hunk headers (see 'Defining a + custom hunk-header' in linkgit:gitattributes[5]). --threads <num>:: Number of grep worker threads to use. diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt index 2b8ac5ff88..dd189a353a 100644 --- a/Documentation/git-log.txt +++ b/Documentation/git-log.txt @@ -77,20 +77,7 @@ produced by `--stat`, etc. Intended to speed up tools that read log messages from `git log` output by allowing them to allocate space in advance. --L <start>,<end>:<file>:: --L :<funcname>:<file>:: - Trace the evolution of the line range given by "<start>,<end>" - (or the function name regex <funcname>) within the <file>. You may - not give any pathspec limiters. This is currently limited to - a walk starting from a single revision, i.e., you may only - give zero or one positive revision arguments, and - <start> and <end> (or <funcname>) must exist in the starting revision. - You can specify this option more than once. Implies `--patch`. - Patch output can be suppressed using `--no-patch`, but other diff formats - (namely `--raw`, `--numstat`, `--shortstat`, `--dirstat`, `--summary`, - `--name-only`, `--name-status`, `--check`) are not currently implemented. -+ -include::line-range-format.txt[] +include::line-range-options.txt[] <revision range>:: Show only commits in the specified revision range. When no diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 3cb2ebb438..cbcf5263dd 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -19,7 +19,7 @@ SYNOPSIS [--exclude-standard] [--error-unmatch] [--with-tree=<tree-ish>] [--full-name] [--recurse-submodules] - [--abbrev] [--] [<file>...] + [--abbrev[=<n>]] [--] [<file>...] DESCRIPTION ----------- @@ -153,7 +153,8 @@ a space) at the start of each line: --abbrev[=<n>]:: Instead of showing the full 40-byte hexadecimal object - lines, show only a partial prefix. + lines, show the shortest prefix that is at least '<n>' + hexdigits long that uniquely refers the object. Non default number of digits can be specified with --abbrev=<n>. --debug:: diff --git a/Documentation/git-ls-tree.txt b/Documentation/git-ls-tree.txt index a7515714da..db02d6d79a 100644 --- a/Documentation/git-ls-tree.txt +++ b/Documentation/git-ls-tree.txt @@ -62,7 +62,8 @@ OPTIONS --abbrev[=<n>]:: Instead of showing the full 40-byte hexadecimal object - lines, show only a partial prefix. + lines, show the shortest prefix that is at least '<n>' + hexdigits long that uniquely refers the object. Non default number of digits can be specified with --abbrev=<n>. --full-name:: diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.txt index 3f5d8946b4..6fec1eb8dc 100644 --- a/Documentation/git-maintenance.txt +++ b/Documentation/git-maintenance.txt @@ -29,6 +29,32 @@ Git repository. SUBCOMMANDS ----------- +register:: + Initialize Git config values so any scheduled maintenance will + start running on this repository. This adds the repository to the + `maintenance.repo` config variable in the current user's global + config and enables some recommended configuration values for + `maintenance.<task>.schedule`. The tasks that are enabled are safe + for running in the background without disrupting foreground + processes. ++ +The `register` subcomand will also set the `maintenance.strategy` config +value to `incremental`, if this value is not previously set. The +`incremental` strategy uses the following schedule for each maintenance +task: ++ +-- +* `gc`: disabled. +* `commit-graph`: hourly. +* `prefetch`: hourly. +* `loose-objects`: daily. +* `incremental-repack`: daily. +-- ++ +`git maintenance register` will also disable foreground maintenance by +setting `maintenance.auto = false` in the current repository. This config +setting will remain after a `git maintenance unregister` command. + run:: Run one or more maintenance tasks. If one or more `--task` options are specified, then those tasks are run in that order. Otherwise, @@ -36,6 +62,22 @@ run:: config options are true. By default, only `maintenance.gc.enabled` is true. +start:: + Start running maintenance on the current repository. This performs + the same config updates as the `register` subcommand, then updates + the background scheduler to run `git maintenance run --scheduled` + on an hourly basis. + +stop:: + Halt the background maintenance schedule. The current repository + is not removed from the list of maintained repositories, in case + the background maintenance is restarted later. + +unregister:: + Remove the current repository from background maintenance. This + only removes the repository from the configured list. It does not + stop the background maintenance processes from running. + TASKS ----- @@ -110,7 +152,18 @@ OPTIONS only if certain thresholds are met. For example, the `gc` task runs when the number of loose objects exceeds the number stored in the `gc.auto` config setting, or when the number of pack-files - exceeds the `gc.autoPackLimit` config setting. + exceeds the `gc.autoPackLimit` config setting. Not compatible with + the `--schedule` option. + +--schedule:: + When combined with the `run` subcommand, run maintenance tasks + only if certain time conditions are met, as specified by the + `maintenance.<task>.schedule` config value for each `<task>`. + This config value specifies a number of seconds since the last + time that task ran, according to the `maintenance.<task>.lastRun` + config value. The tasks that are tested are those provided by + the `--task=<task>` option(s) or those with + `maintenance.<task>.enabled` set to true. --quiet:: Do not report progress or other information over `stderr`. @@ -122,6 +175,50 @@ OPTIONS `maintenance.<task>.enabled` configured as `true` are considered. See the 'TASKS' section for the list of accepted `<task>` values. + +TROUBLESHOOTING +--------------- +The `git maintenance` command is designed to simplify the repository +maintenance patterns while minimizing user wait time during Git commands. +A variety of configuration options are available to allow customizing this +process. The default maintenance options focus on operations that complete +quickly, even on large repositories. + +Users may find some cases where scheduled maintenance tasks do not run as +frequently as intended. Each `git maintenance run` command takes a lock on +the repository's object database, and this prevents other concurrent +`git maintenance run` commands from running on the same repository. Without +this safeguard, competing processes could leave the repository in an +unpredictable state. + +The background maintenance schedule runs `git maintenance run` processes +on an hourly basis. Each run executes the "hourly" tasks. At midnight, +that process also executes the "daily" tasks. At midnight on the first day +of the week, that process also executes the "weekly" tasks. A single +process iterates over each registered repository, performing the scheduled +tasks for that frequency. Depending on the number of registered +repositories and their sizes, this process may take longer than an hour. +In this case, multiple `git maintenance run` commands may run on the same +repository at the same time, colliding on the object database lock. This +results in one of the two tasks not running. + +If you find that some maintenance windows are taking longer than one hour +to complete, then consider reducing the complexity of your maintenance +tasks. For example, the `gc` task is much slower than the +`incremental-repack` task. However, this comes at a cost of a slightly +larger object database. Consider moving more expensive tasks to be run +less frequently. + +Expert users may consider scheduling their own maintenance tasks using a +different schedule than is available through `git maintenance start` and +Git configuration options. These users should be aware of the object +database lock and how concurrent `git maintenance run` commands behave. +Further, the `git gc` command should not be combined with +`git maintenance run` commands. `git gc` modifies the object database +but does not take the lock in the same way as `git maintenance run`. If +possible, use `git maintenance run --task=gc` instead of `git gc`. + + GIT --- Part of the linkgit:git[1] suite diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt index dab9609013..ec233ac0c1 100644 --- a/Documentation/git-p4.txt +++ b/Documentation/git-p4.txt @@ -417,7 +417,7 @@ p4-post-changelist ~~~~~~~~~~~~~~~~~~ The `p4-post-changelist` hook is invoked after the submit has -successfully occured in P4. It takes no parameters and is meant +successfully occurred in P4. It takes no parameters and is meant primarily for notification and cannot affect the outcome of the git p4 submit action. diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index 19b12b6d43..5013daa6ef 100644 --- a/Documentation/git-rev-parse.txt +++ b/Documentation/git-rev-parse.txt @@ -109,6 +109,10 @@ names an existing object that is a commit-ish (i.e. a commit, or an annotated tag that points at a commit). To make sure that `$VAR` names an existing object of any type, `git rev-parse "$VAR^{object}"` can be used. ++ +Note that if you are verifying a name from an untrusted source, it is +wise to use `--end-of-options` so that the name argument is not mistaken +for another option. -q:: --quiet:: @@ -446,7 +450,7 @@ $ git rev-parse --verify HEAD * Print the commit object name from the revision in the $REV shell variable: + ------------ -$ git rev-parse --verify $REV^{commit} +$ git rev-parse --verify --end-of-options $REV^{commit} ------------ + This will error out if $REV is empty or not a valid revision. @@ -454,7 +458,7 @@ This will error out if $REV is empty or not a valid revision. * Similar to above: + ------------ -$ git rev-parse --default master --verify $REV +$ git rev-parse --default master --verify --end-of-options $REV ------------ + but if $REV is empty, the commit object name from master will be printed. diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt index 4e097dc4e9..ffccfc7760 100644 --- a/Documentation/githooks.txt +++ b/Documentation/githooks.txt @@ -655,7 +655,7 @@ p4-post-changelist This hook is invoked by `git-p4 submit`. The `p4-post-changelist` hook is invoked after the submit has -successfully occured in P4. It takes no parameters and is meant +successfully occurred in P4. It takes no parameters and is meant primarily for notification and cannot affect the outcome of the git p4 submit action. diff --git a/Documentation/gitk.txt b/Documentation/gitk.txt index c653ebb6a8..d50e9ed10e 100644 --- a/Documentation/gitk.txt +++ b/Documentation/gitk.txt @@ -98,25 +98,7 @@ linkgit:git-rev-list[1] for a complete list. (See "History simplification" in linkgit:git-log[1] for a more detailed explanation.) --L<start>,<end>:<file>:: --L:<funcname>:<file>:: - - Trace the evolution of the line range given by "<start>,<end>" - (or the function name regex <funcname>) within the <file>. You may - not give any pathspec limiters. This is currently limited to - a walk starting from a single revision, i.e., you may only - give zero or one positive revision arguments, and - <start> and <end> (or <funcname>) must exist in the starting revision. - You can specify this option more than once. Implies `--patch`. - Patch output can be suppressed using `--no-patch`, but other diff formats - (namely `--raw`, `--numstat`, `--shortstat`, `--dirstat`, `--summary`, - `--name-only`, `--name-status`, `--check`) are not currently implemented. -+ -*Note:* gitk (unlike linkgit:git-log[1]) currently only understands -this option if you specify it "glued together" with its argument. Do -*not* put a space after `-L`. -+ -include::line-range-format.txt[] +include::line-range-options.txt[] <revision range>:: diff --git a/Documentation/line-range-format.txt b/Documentation/line-range-format.txt index 829676ff98..9b51e9fb66 100644 --- a/Documentation/line-range-format.txt +++ b/Documentation/line-range-format.txt @@ -1,30 +1,32 @@ -<start> and <end> can take one of these forms: +'<start>' and '<end>' can take one of these forms: - number + -If <start> or <end> is a number, it specifies an +If '<start>' or '<end>' is a number, it specifies an absolute line number (lines count from 1). + -- /regex/ +- `/regex/` + This form will use the first line matching the given -POSIX regex. If <start> is a regex, it will search from the end of +POSIX regex. If '<start>' is a regex, it will search from the end of the previous `-L` range, if any, otherwise from the start of file. -If <start> is ``^/regex/'', it will search from the start of file. -If <end> is a regex, it will search -starting at the line given by <start>. +If '<start>' is `^/regex/`, it will search from the start of file. +If '<end>' is a regex, it will search +starting at the line given by '<start>'. + - +offset or -offset + -This is only valid for <end> and will specify a number -of lines before or after the line given by <start>. +This is only valid for '<end>' and will specify a number +of lines before or after the line given by '<start>'. + -If ``:<funcname>'' is given in place of <start> and <end>, it is a +If `:<funcname>` is given in place of '<start>' and '<end>', it is a regular expression that denotes the range from the first funcname line -that matches <funcname>, up to the next funcname line. ``:<funcname>'' +that matches '<funcname>', up to the next funcname line. `:<funcname>` searches from the end of the previous `-L` range, if any, otherwise -from the start of file. ``^:<funcname>'' searches from the start of -file. +from the start of file. `^:<funcname>` searches from the start of +file. The function names are determined in the same way as `git diff` +works out patch hunk headers (see 'Defining a custom hunk-header' +in linkgit:gitattributes[5]). diff --git a/Documentation/line-range-options.txt b/Documentation/line-range-options.txt new file mode 100644 index 0000000000..8e295a62b8 --- /dev/null +++ b/Documentation/line-range-options.txt @@ -0,0 +1,15 @@ +-L<start>,<end>:<file>:: +-L:<funcname>:<file>:: + + Trace the evolution of the line range given by '<start>,<end>', + or by the function name regex '<funcname>', within the '<file>'. You may + not give any pathspec limiters. This is currently limited to + a walk starting from a single revision, i.e., you may only + give zero or one positive revision arguments, and + '<start>' and '<end>' (or '<funcname>') must exist in the starting revision. + You can specify this option more than once. Implies `--patch`. + Patch output can be suppressed using `--no-patch`, but other diff formats + (namely `--raw`, `--numstat`, `--shortstat`, `--dirstat`, `--summary`, + `--name-only`, `--name-status`, `--check`) are not currently implemented. ++ +include::line-range-format.txt[] diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt index 17c5aac4b7..27ddaf84a1 100644 --- a/Documentation/pretty-options.txt +++ b/Documentation/pretty-options.txt @@ -16,9 +16,9 @@ configuration (see linkgit:git-config[1]). --abbrev-commit:: Instead of showing the full 40-byte hexadecimal commit object - name, show only a partial prefix. Non default number of - digits can be specified with "--abbrev=<n>" (which also modifies - diff output, if it is displayed). + name, show a prefix that names the object uniquely. + "--abbrev=<n>" (which also modifies diff output, if it is displayed) + option can be used to specify the minimum length of the prefix. + This should make "--pretty=oneline" a whole lot more readable for people using 80-column terminals. @@ -694,6 +694,7 @@ TEST_BUILTINS_OBJS += test-advise.o TEST_BUILTINS_OBJS += test-bloom.o TEST_BUILTINS_OBJS += test-chmtime.o TEST_BUILTINS_OBJS += test-config.o +TEST_BUILTINS_OBJS += test-crontab.o TEST_BUILTINS_OBJS += test-ctype.o TEST_BUILTINS_OBJS += test-date.o TEST_BUILTINS_OBJS += test-delta.o @@ -704,6 +705,7 @@ TEST_BUILTINS_OBJS += test-dump-fsmonitor.o TEST_BUILTINS_OBJS += test-dump-split-index.o TEST_BUILTINS_OBJS += test-dump-untracked-cache.o TEST_BUILTINS_OBJS += test-example-decorate.o +TEST_BUILTINS_OBJS += test-fast-rebase.o TEST_BUILTINS_OBJS += test-genrandom.o TEST_BUILTINS_OBJS += test-genzeros.o TEST_BUILTINS_OBJS += test-hash-speed.o @@ -921,6 +923,8 @@ LIB_OBJS += mailmap.o LIB_OBJS += match-trees.o LIB_OBJS += mem-pool.o LIB_OBJS += merge-blobs.o +LIB_OBJS += merge-ort.o +LIB_OBJS += merge-ort-wrappers.o LIB_OBJS += merge-recursive.o LIB_OBJS += merge.o LIB_OBJS += mergesort.o @@ -1000,6 +1004,7 @@ LIB_OBJS += stable-qsort.o LIB_OBJS += strbuf.o LIB_OBJS += streaming.o LIB_OBJS += string-list.o +LIB_OBJS += strmap.o LIB_OBJS += strvec.o LIB_OBJS += sub-process.o LIB_OBJS += submodule-config.o @@ -1089,6 +1094,7 @@ BUILTIN_OBJS += builtin/fetch-pack.o BUILTIN_OBJS += builtin/fetch.o BUILTIN_OBJS += builtin/fmt-merge-msg.o BUILTIN_OBJS += builtin/for-each-ref.o +BUILTIN_OBJS += builtin/for-each-repo.o BUILTIN_OBJS += builtin/fsck.o BUILTIN_OBJS += builtin/gc.o BUILTIN_OBJS += builtin/get-tar-commit-id.o diff --git a/add-interactive.c b/add-interactive.c index 555c4abf32..a14c0feaa2 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -557,7 +557,7 @@ static int get_modified_files(struct repository *r, if (ps) clear_pathspec(&rev.prune_data); } - hashmap_free_entries(&s.file_map, struct pathname_entry, ent); + hashmap_clear_and_free(&s.file_map, struct pathname_entry, ent); if (unmerged_count) *unmerged_count = s.unmerged_count; if (binary_count) diff --git a/archive-tar.c b/archive-tar.c index f1a1447ebd..a971fdc0f6 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -374,7 +374,8 @@ static int tar_filter_config(const char *var, const char *value, void *data) ar = xcalloc(1, sizeof(*ar)); ar->name = xmemdupz(name, namelen); ar->write_archive = write_tar_filter_archive; - ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS; + ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS | + ARCHIVER_HIGH_COMPRESSION_LEVELS; ALLOC_GROW(tar_filters, nr_tar_filters + 1, alloc_tar_filters); tar_filters[nr_tar_filters++] = ar; } @@ -529,10 +529,12 @@ static int add_file_cb(const struct option *opt, const char *arg, int unset) return 0; } -#define OPT__COMPR(s, v, h, p) \ - OPT_SET_INT_F(s, NULL, v, h, p, PARSE_OPT_NONEG) -#define OPT__COMPR_HIDDEN(s, v, p) \ - OPT_SET_INT_F(s, NULL, v, "", p, PARSE_OPT_NONEG | PARSE_OPT_HIDDEN) +static int number_callback(const struct option *opt, const char *arg, int unset) +{ + BUG_ON_OPT_NEG(unset); + *(int *)opt->value = strtol(arg, NULL, 10); + return 0; +} static int parse_archive_args(int argc, const char **argv, const struct archiver **ar, struct archiver_args *args, @@ -561,16 +563,8 @@ static int parse_archive_args(int argc, const char **argv, OPT_BOOL(0, "worktree-attributes", &worktree_attributes, N_("read .gitattributes in working directory")), OPT__VERBOSE(&verbose, N_("report archived files on stderr")), - OPT__COMPR('0', &compression_level, N_("store only"), 0), - OPT__COMPR('1', &compression_level, N_("compress faster"), 1), - OPT__COMPR_HIDDEN('2', &compression_level, 2), - OPT__COMPR_HIDDEN('3', &compression_level, 3), - OPT__COMPR_HIDDEN('4', &compression_level, 4), - OPT__COMPR_HIDDEN('5', &compression_level, 5), - OPT__COMPR_HIDDEN('6', &compression_level, 6), - OPT__COMPR_HIDDEN('7', &compression_level, 7), - OPT__COMPR_HIDDEN('8', &compression_level, 8), - OPT__COMPR('9', &compression_level, N_("compress better"), 9), + OPT_NUMBER_CALLBACK(&compression_level, + N_("set compression level"), number_callback), OPT_GROUP(""), OPT_BOOL('l', "list", &list, N_("list supported archive formats")), @@ -617,7 +611,9 @@ static int parse_archive_args(int argc, const char **argv, args->compression_level = Z_DEFAULT_COMPRESSION; if (compression_level != -1) { - if ((*ar)->flags & ARCHIVER_WANT_COMPRESSION_LEVELS) + int levels_ok = (*ar)->flags & ARCHIVER_WANT_COMPRESSION_LEVELS; + int high_ok = (*ar)->flags & ARCHIVER_HIGH_COMPRESSION_LEVELS; + if (levels_ok && (compression_level <= 9 || high_ok)) args->compression_level = compression_level; else { die(_("Argument not supported for format '%s': -%d"), @@ -36,6 +36,7 @@ const char *archive_format_from_filename(const char *filename); #define ARCHIVER_WANT_COMPRESSION_LEVELS 1 #define ARCHIVER_REMOTE 2 +#define ARCHIVER_HIGH_COMPRESSION_LEVELS 4 struct archiver { const char *name; int (*write_archive)(const struct archiver *, struct archiver_args *); @@ -52,13 +52,6 @@ static inline void hashmap_unlock(struct attr_hashmap *map) pthread_mutex_unlock(&map->mutex); } -/* - * The global dictionary of all interned attributes. This - * is a singleton object which is shared between threads. - * Access to this dictionary must be surrounded with a mutex. - */ -static struct attr_hashmap g_attr_hashmap; - /* The container for objects stored in "struct attr_hashmap" */ struct attr_hash_entry { struct hashmap_entry ent; @@ -80,11 +73,14 @@ static int attr_hash_entry_cmp(const void *unused_cmp_data, return (a->keylen != b->keylen) || strncmp(a->key, b->key, a->keylen); } -/* Initialize an 'attr_hashmap' object */ -static void attr_hashmap_init(struct attr_hashmap *map) -{ - hashmap_init(&map->map, attr_hash_entry_cmp, NULL, 0); -} +/* + * The global dictionary of all interned attributes. This + * is a singleton object which is shared between threads. + * Access to this dictionary must be surrounded with a mutex. + */ +static struct attr_hashmap g_attr_hashmap = { + HASHMAP_INIT(attr_hash_entry_cmp, NULL) +}; /* * Retrieve the 'value' stored in a hashmap given the provided 'key'. @@ -96,9 +92,6 @@ static void *attr_hashmap_get(struct attr_hashmap *map, struct attr_hash_entry k; struct attr_hash_entry *e; - if (!map->map.tablesize) - attr_hashmap_init(map); - hashmap_entry_init(&k.ent, memhash(key, keylen)); k.key = key; k.keylen = keylen; @@ -114,9 +107,6 @@ static void attr_hashmap_add(struct attr_hashmap *map, { struct attr_hash_entry *e; - if (!map->map.tablesize) - attr_hashmap_init(map); - e = xmalloc(sizeof(struct attr_hash_entry)); hashmap_entry_init(&e->ent, memhash(key, keylen)); e->key = key; @@ -1090,7 +1090,7 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) nr), nr, steps_msg); free(steps_msg); /* Clean up objects used, as they will be reused. */ - clear_commit_marks_all(ALL_REV_FLAGS); + repo_clear_commit_marks(r, ALL_REV_FLAGS); return bisect_checkout(bisect_rev, no_checkout); } @@ -435,7 +435,7 @@ static void get_fingerprint(struct fingerprint *result, static void free_fingerprint(struct fingerprint *f) { - hashmap_free(&f->map); + hashmap_clear(&f->map); free(f->entries); } @@ -2764,7 +2764,6 @@ void init_scoreboard(struct blame_scoreboard *sb) } void setup_scoreboard(struct blame_scoreboard *sb, - const char *path, struct blame_origin **orig) { const char *final_commit_name = NULL; @@ -2803,7 +2802,7 @@ void setup_scoreboard(struct blame_scoreboard *sb, setup_work_tree(); sb->final = fake_working_tree_commit(sb->repo, &sb->revs->diffopt, - path, sb->contents_from); + sb->path, sb->contents_from); add_pending_object(sb->revs, &(sb->final->object), ":"); } @@ -2846,12 +2845,12 @@ void setup_scoreboard(struct blame_scoreboard *sb, sb->final_buf_size = o->file.size; } else { - o = get_origin(sb->final, path); + o = get_origin(sb->final, sb->path); if (fill_blob_sha1_and_mode(sb->repo, o)) - die(_("no such path %s in %s"), path, final_commit_name); + die(_("no such path %s in %s"), sb->path, final_commit_name); if (sb->revs->diffopt.flags.allow_textconv && - textconv_object(sb->repo, path, o->mode, &o->blob_oid, 1, (char **) &sb->final_buf, + textconv_object(sb->repo, sb->path, o->mode, &o->blob_oid, 1, (char **) &sb->final_buf, &sb->final_buf_size)) ; else @@ -2861,7 +2860,7 @@ void setup_scoreboard(struct blame_scoreboard *sb, if (!sb->final_buf) die(_("cannot read blob %s for path %s"), oid_to_hex(&o->blob_oid), - path); + sb->path); } sb->num_read_blob++; prepare_lines(sb); @@ -2888,8 +2887,7 @@ struct blame_entry *blame_entry_prepend(struct blame_entry *head, return new_head; } -void setup_blame_bloom_data(struct blame_scoreboard *sb, - const char *path) +void setup_blame_bloom_data(struct blame_scoreboard *sb) { struct blame_bloom_data *bd; struct bloom_filter_settings *bs; @@ -2909,7 +2907,7 @@ void setup_blame_bloom_data(struct blame_scoreboard *sb, bd->nr = 0; ALLOC_ARRAY(bd->keys, bd->alloc); - add_bloom_key(bd, path); + add_bloom_key(bd, sb->path); sb->bloom_data = bd; } @@ -181,10 +181,8 @@ const char *blame_nth_line(struct blame_scoreboard *sb, long lno); void init_scoreboard(struct blame_scoreboard *sb); void setup_scoreboard(struct blame_scoreboard *sb, - const char *path, struct blame_origin **orig); -void setup_blame_bloom_data(struct blame_scoreboard *sb, - const char *path); +void setup_blame_bloom_data(struct blame_scoreboard *sb); void cleanup_scoreboard(struct blame_scoreboard *sb); struct blame_entry *blame_entry_prepend(struct blame_entry *head, @@ -229,10 +229,9 @@ struct bloom_filter *get_or_compute_bloom_filter(struct repository *r, diffcore_std(&diffopt); if (diff_queued_diff.nr <= settings->max_changed_paths) { - struct hashmap pathmap; + struct hashmap pathmap = HASHMAP_INIT(pathmap_cmp, NULL); struct pathmap_hash_entry *e; struct hashmap_iter iter; - hashmap_init(&pathmap, pathmap_cmp, NULL, 0); for (i = 0; i < diff_queued_diff.nr; i++) { const char *path = diff_queued_diff.queue[i]->two->path; @@ -287,7 +286,7 @@ struct bloom_filter *get_or_compute_bloom_filter(struct repository *r, } cleanup: - hashmap_free_entries(&pathmap, struct pathmap_hash_entry, entry); + hashmap_clear_and_free(&pathmap, struct pathmap_hash_entry, entry); } else { for (i = 0; i < diff_queued_diff.nr; i++) diff_free_filepair(diff_queued_diff.queue[i]); @@ -155,6 +155,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix); int cmd_fetch_pack(int argc, const char **argv, const char *prefix); int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix); int cmd_for_each_ref(int argc, const char **argv, const char *prefix); +int cmd_for_each_repo(int argc, const char **argv, const char *prefix); int cmd_format_patch(int argc, const char **argv, const char *prefix); int cmd_fsck(int argc, const char **argv, const char *prefix); int cmd_gc(int argc, const char **argv, const char *prefix); diff --git a/builtin/blame.c b/builtin/blame.c index b5036ab327..6f7e32411a 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -891,7 +891,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix) OPT_STRING(0, "contents", &contents_from, N_("file"), N_("Use <file>'s contents as the final image")), OPT_CALLBACK_F('C', NULL, &opt, N_("score"), N_("Find line copies within and across files"), PARSE_OPT_OPTARG, blame_copy_callback), OPT_CALLBACK_F('M', NULL, &opt, N_("score"), N_("Find line movements within and across files"), PARSE_OPT_OPTARG, blame_move_callback), - OPT_STRING_LIST('L', NULL, &range_list, N_("n,m"), N_("Process only line range n,m, counting from 1")), + OPT_STRING_LIST('L', NULL, &range_list, N_("range"), + N_("Process only line range <start>,<end> or function :<funcname>")), OPT__ABBREV(&abbrev), OPT_END() }; @@ -1082,17 +1083,18 @@ parse_done: sb.contents_from = contents_from; sb.reverse = reverse; sb.repo = the_repository; + sb.path = path; build_ignorelist(&sb, &ignore_revs_file_list, &ignore_rev_list); string_list_clear(&ignore_revs_file_list, 0); string_list_clear(&ignore_rev_list, 0); - setup_scoreboard(&sb, path, &o); + setup_scoreboard(&sb, &o); /* * Changed-path Bloom filters are disabled when looking * for copies. */ if (!(opt & PICKAXE_BLAME_COPY)) - setup_blame_bloom_data(&sb, path); + setup_blame_bloom_data(&sb); lno = sb.num_lines; @@ -1111,7 +1113,7 @@ parse_done: if ((!lno && (top || bottom)) || lno < bottom) die(Q_("file %s has only %lu line", "file %s has only %lu lines", - lno), path, lno); + lno), sb.path, lno); if (bottom < 1) bottom = 1; if (top < 1 || lno < top) @@ -1136,7 +1138,6 @@ parse_done: string_list_clear(&range_list, 0); sb.ent = NULL; - sb.path = path; if (blame_move_score) sb.move_score = blame_move_score; diff --git a/builtin/checkout.c b/builtin/checkout.c index 7c311cecb3..9b82119129 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1042,7 +1042,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *ne describe_detached_head(_("Previous HEAD position was"), old_commit); /* Clean up objects used, as they will be reused. */ - clear_commit_marks_all(ALL_REV_FLAGS); + repo_clear_commit_marks(the_repository, ALL_REV_FLAGS); } static int switch_branches(const struct checkout_opts *opts, diff --git a/builtin/difftool.c b/builtin/difftool.c index 7ac432b881..6e18e623fd 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -342,7 +342,10 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, const char *workdir, *tmp; int ret = 0, i; FILE *fp; - struct hashmap working_tree_dups, submodules, symlinks2; + struct hashmap working_tree_dups = HASHMAP_INIT(working_tree_entry_cmp, + NULL); + struct hashmap submodules = HASHMAP_INIT(pair_cmp, NULL); + struct hashmap symlinks2 = HASHMAP_INIT(pair_cmp, NULL); struct hashmap_iter iter; struct pair_entry *entry; struct index_state wtindex; @@ -383,10 +386,6 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, rdir_len = rdir.len; wtdir_len = wtdir.len; - hashmap_init(&working_tree_dups, working_tree_entry_cmp, NULL, 0); - hashmap_init(&submodules, pair_cmp, NULL, 0); - hashmap_init(&symlinks2, pair_cmp, NULL, 0); - child.no_stdin = 1; child.git_cmd = 1; child.use_shell = 0; diff --git a/builtin/fetch.c b/builtin/fetch.c index f9c3c49f14..ecf8537605 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -393,7 +393,7 @@ static void find_non_local_tags(const struct ref *refs, item = refname_hash_add(&remote_refs, ref->name, &ref->old_oid); string_list_insert(&remote_refs_list, ref->name); } - hashmap_free_entries(&existing_refs, struct refname_hash_entry, ent); + hashmap_clear_and_free(&existing_refs, struct refname_hash_entry, ent); /* * We may have a final lightweight tag that needs to be @@ -428,7 +428,7 @@ static void find_non_local_tags(const struct ref *refs, **tail = rm; *tail = &rm->next; } - hashmap_free_entries(&remote_refs, struct refname_hash_entry, ent); + hashmap_clear_and_free(&remote_refs, struct refname_hash_entry, ent); string_list_clear(&remote_refs_list, 0); oidset_clear(&fetch_oids); } @@ -573,7 +573,7 @@ static struct ref *get_ref_map(struct remote *remote, } } if (existing_refs_populated) - hashmap_free_entries(&existing_refs, struct refname_hash_entry, ent); + hashmap_clear_and_free(&existing_refs, struct refname_hash_entry, ent); return ref_map; } diff --git a/builtin/for-each-repo.c b/builtin/for-each-repo.c new file mode 100644 index 0000000000..5bba623ff1 --- /dev/null +++ b/builtin/for-each-repo.c @@ -0,0 +1,58 @@ +#include "cache.h" +#include "config.h" +#include "builtin.h" +#include "parse-options.h" +#include "run-command.h" +#include "string-list.h" + +static const char * const for_each_repo_usage[] = { + N_("git for-each-repo --config=<config> <command-args>"), + NULL +}; + +static int run_command_on_repo(const char *path, + void *cbdata) +{ + int i; + struct child_process child = CHILD_PROCESS_INIT; + struct strvec *args = (struct strvec *)cbdata; + + child.git_cmd = 1; + strvec_pushl(&child.args, "-C", path, NULL); + + for (i = 0; i < args->nr; i++) + strvec_push(&child.args, args->v[i]); + + return run_command(&child); +} + +int cmd_for_each_repo(int argc, const char **argv, const char *prefix) +{ + static const char *config_key = NULL; + int i, result = 0; + const struct string_list *values; + struct strvec args = STRVEC_INIT; + + const struct option options[] = { + OPT_STRING(0, "config", &config_key, N_("config"), + N_("config key storing a list of repository paths")), + OPT_END() + }; + + argc = parse_options(argc, argv, prefix, options, for_each_repo_usage, + PARSE_OPT_STOP_AT_NON_OPTION); + + if (!config_key) + die(_("missing --config=<config>")); + + for (i = 0; i < argc; i++) + strvec_push(&args, argv[i]); + + values = repo_config_get_value_multi(the_repository, + config_key); + + for (i = 0; !result && i < values->nr; i++) + result = run_command_on_repo(values->items[i].string, &args); + + return result; +} diff --git a/builtin/gc.c b/builtin/gc.c index 3629a82299..3d258b60c2 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -31,6 +31,7 @@ #include "refs.h" #include "remote.h" #include "object-store.h" +#include "exec-cmd.h" #define FAILED_RUN "failed to run %s" @@ -703,14 +704,51 @@ int cmd_gc(int argc, const char **argv, const char *prefix) return 0; } -static const char * const builtin_maintenance_run_usage[] = { - N_("git maintenance run [--auto] [--[no-]quiet] [--task=<task>]"), +static const char *const builtin_maintenance_run_usage[] = { + N_("git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"), NULL }; +enum schedule_priority { + SCHEDULE_NONE = 0, + SCHEDULE_WEEKLY = 1, + SCHEDULE_DAILY = 2, + SCHEDULE_HOURLY = 3, +}; + +static enum schedule_priority parse_schedule(const char *value) +{ + if (!value) + return SCHEDULE_NONE; + if (!strcasecmp(value, "hourly")) + return SCHEDULE_HOURLY; + if (!strcasecmp(value, "daily")) + return SCHEDULE_DAILY; + if (!strcasecmp(value, "weekly")) + return SCHEDULE_WEEKLY; + return SCHEDULE_NONE; +} + +static int maintenance_opt_schedule(const struct option *opt, const char *arg, + int unset) +{ + enum schedule_priority *priority = opt->value; + + if (unset) + die(_("--no-schedule is not allowed")); + + *priority = parse_schedule(arg); + + if (!*priority) + die(_("unrecognized --schedule argument '%s'"), arg); + + return 0; +} + struct maintenance_run_opts { int auto_flag; int quiet; + enum schedule_priority schedule; }; /* Remember to update object flag allocation in object.h */ @@ -794,7 +832,7 @@ static int should_write_commit_graph(void) result = for_each_ref(dfs_on_ref, &data); - clear_commit_marks_all(SEEN); + repo_clear_commit_marks(the_repository, SEEN); return result; } @@ -1168,6 +1206,8 @@ struct maintenance_task { maintenance_auto_fn *auto_condition; unsigned enabled:1; + enum schedule_priority schedule; + /* -1 if not selected. */ int selected_order; }; @@ -1263,6 +1303,9 @@ static int maintenance_run_tasks(struct maintenance_run_opts *opts) !tasks[i].auto_condition())) continue; + if (opts->schedule && tasks[i].schedule < opts->schedule) + continue; + trace2_region_enter("maintenance", tasks[i].name, r); if (tasks[i].fn(opts)) { error(_("task '%s' failed"), tasks[i].name); @@ -1275,21 +1318,54 @@ static int maintenance_run_tasks(struct maintenance_run_opts *opts) return result; } -static void initialize_task_config(void) +static void initialize_maintenance_strategy(void) +{ + char *config_str; + + if (git_config_get_string("maintenance.strategy", &config_str)) + return; + + if (!strcasecmp(config_str, "incremental")) { + tasks[TASK_GC].schedule = SCHEDULE_NONE; + tasks[TASK_COMMIT_GRAPH].enabled = 1; + tasks[TASK_COMMIT_GRAPH].schedule = SCHEDULE_HOURLY; + tasks[TASK_PREFETCH].enabled = 1; + tasks[TASK_PREFETCH].schedule = SCHEDULE_HOURLY; + tasks[TASK_INCREMENTAL_REPACK].enabled = 1; + tasks[TASK_INCREMENTAL_REPACK].schedule = SCHEDULE_DAILY; + tasks[TASK_LOOSE_OBJECTS].enabled = 1; + tasks[TASK_LOOSE_OBJECTS].schedule = SCHEDULE_DAILY; + } +} + +static void initialize_task_config(int schedule) { int i; struct strbuf config_name = STRBUF_INIT; gc_config(); + if (schedule) + initialize_maintenance_strategy(); + for (i = 0; i < TASK__COUNT; i++) { int config_value; + char *config_str; - strbuf_setlen(&config_name, 0); + strbuf_reset(&config_name); strbuf_addf(&config_name, "maintenance.%s.enabled", tasks[i].name); if (!git_config_get_bool(config_name.buf, &config_value)) tasks[i].enabled = config_value; + + strbuf_reset(&config_name); + strbuf_addf(&config_name, "maintenance.%s.schedule", + tasks[i].name); + + if (!git_config_get_string(config_name.buf, &config_str)) { + tasks[i].schedule = parse_schedule(config_str); + free(config_str); + } } strbuf_release(&config_name); @@ -1333,6 +1409,9 @@ static int maintenance_run(int argc, const char **argv, const char *prefix) struct option builtin_maintenance_run_options[] = { OPT_BOOL(0, "auto", &opts.auto_flag, N_("run tasks based on the state of the repository")), + OPT_CALLBACK(0, "schedule", &opts.schedule, N_("frequency"), + N_("run tasks based on frequency"), + maintenance_opt_schedule), OPT_BOOL(0, "quiet", &opts.quiet, N_("do not report progress or other information over stderr")), OPT_CALLBACK_F(0, "task", NULL, N_("task"), @@ -1343,7 +1422,6 @@ static int maintenance_run(int argc, const char **argv, const char *prefix) memset(&opts, 0, sizeof(opts)); opts.quiet = !isatty(2); - initialize_task_config(); for (i = 0; i < TASK__COUNT; i++) tasks[i].selected_order = -1; @@ -1353,13 +1431,196 @@ static int maintenance_run(int argc, const char **argv, const char *prefix) builtin_maintenance_run_usage, PARSE_OPT_STOP_AT_NON_OPTION); + if (opts.auto_flag && opts.schedule) + die(_("use at most one of --auto and --schedule=<frequency>")); + + initialize_task_config(opts.schedule); + if (argc != 0) usage_with_options(builtin_maintenance_run_usage, builtin_maintenance_run_options); return maintenance_run_tasks(&opts); } -static const char builtin_maintenance_usage[] = N_("git maintenance run [<options>]"); +static int maintenance_register(void) +{ + char *config_value; + struct child_process config_set = CHILD_PROCESS_INIT; + struct child_process config_get = CHILD_PROCESS_INIT; + + /* There is no current repository, so skip registering it */ + if (!the_repository || !the_repository->gitdir) + return 0; + + /* Disable foreground maintenance */ + git_config_set("maintenance.auto", "false"); + + /* Set maintenance strategy, if unset */ + if (!git_config_get_string("maintenance.strategy", &config_value)) + free(config_value); + else + git_config_set("maintenance.strategy", "incremental"); + + config_get.git_cmd = 1; + strvec_pushl(&config_get.args, "config", "--global", "--get", "maintenance.repo", + the_repository->worktree ? the_repository->worktree + : the_repository->gitdir, + NULL); + config_get.out = -1; + + if (start_command(&config_get)) + return error(_("failed to run 'git config'")); + + /* We already have this value in our config! */ + if (!finish_command(&config_get)) + return 0; + + config_set.git_cmd = 1; + strvec_pushl(&config_set.args, "config", "--add", "--global", "maintenance.repo", + the_repository->worktree ? the_repository->worktree + : the_repository->gitdir, + NULL); + + return run_command(&config_set); +} + +static int maintenance_unregister(void) +{ + struct child_process config_unset = CHILD_PROCESS_INIT; + + if (!the_repository || !the_repository->gitdir) + return error(_("no current repository to unregister")); + + config_unset.git_cmd = 1; + strvec_pushl(&config_unset.args, "config", "--global", "--unset", + "maintenance.repo", + the_repository->worktree ? the_repository->worktree + : the_repository->gitdir, + NULL); + + return run_command(&config_unset); +} + +#define BEGIN_LINE "# BEGIN GIT MAINTENANCE SCHEDULE" +#define END_LINE "# END GIT MAINTENANCE SCHEDULE" + +static int update_background_schedule(int run_maintenance) +{ + int result = 0; + int in_old_region = 0; + struct child_process crontab_list = CHILD_PROCESS_INIT; + struct child_process crontab_edit = CHILD_PROCESS_INIT; + FILE *cron_list, *cron_in; + const char *crontab_name; + struct strbuf line = STRBUF_INIT; + struct lock_file lk; + char *lock_path = xstrfmt("%s/schedule", the_repository->objects->odb->path); + + if (hold_lock_file_for_update(&lk, lock_path, LOCK_NO_DEREF) < 0) + return error(_("another process is scheduling background maintenance")); + + crontab_name = getenv("GIT_TEST_CRONTAB"); + if (!crontab_name) + crontab_name = "crontab"; + + strvec_split(&crontab_list.args, crontab_name); + strvec_push(&crontab_list.args, "-l"); + crontab_list.in = -1; + crontab_list.out = dup(lk.tempfile->fd); + crontab_list.git_cmd = 0; + + if (start_command(&crontab_list)) { + result = error(_("failed to run 'crontab -l'; your system might not support 'cron'")); + goto cleanup; + } + + /* Ignore exit code, as an empty crontab will return error. */ + finish_command(&crontab_list); + + /* + * Read from the .lock file, filtering out the old + * schedule while appending the new schedule. + */ + cron_list = fdopen(lk.tempfile->fd, "r"); + rewind(cron_list); + + strvec_split(&crontab_edit.args, crontab_name); + crontab_edit.in = -1; + crontab_edit.git_cmd = 0; + + if (start_command(&crontab_edit)) { + result = error(_("failed to run 'crontab'; your system might not support 'cron'")); + goto cleanup; + } + + cron_in = fdopen(crontab_edit.in, "w"); + if (!cron_in) { + result = error(_("failed to open stdin of 'crontab'")); + goto done_editing; + } + + while (!strbuf_getline_lf(&line, cron_list)) { + if (!in_old_region && !strcmp(line.buf, BEGIN_LINE)) + in_old_region = 1; + if (in_old_region) + continue; + fprintf(cron_in, "%s\n", line.buf); + if (in_old_region && !strcmp(line.buf, END_LINE)) + in_old_region = 0; + } + + if (run_maintenance) { + struct strbuf line_format = STRBUF_INIT; + const char *exec_path = git_exec_path(); + + fprintf(cron_in, "%s\n", BEGIN_LINE); + fprintf(cron_in, + "# The following schedule was created by Git\n"); + fprintf(cron_in, "# Any edits made in this region might be\n"); + fprintf(cron_in, + "# replaced in the future by a Git command.\n\n"); + + strbuf_addf(&line_format, + "%%s %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n", + exec_path, exec_path); + fprintf(cron_in, line_format.buf, "0", "1-23", "*", "hourly"); + fprintf(cron_in, line_format.buf, "0", "0", "1-6", "daily"); + fprintf(cron_in, line_format.buf, "0", "0", "0", "weekly"); + strbuf_release(&line_format); + + fprintf(cron_in, "\n%s\n", END_LINE); + } + + fflush(cron_in); + fclose(cron_in); + close(crontab_edit.in); + +done_editing: + if (finish_command(&crontab_edit)) { + result = error(_("'crontab' died")); + goto cleanup; + } + fclose(cron_list); + +cleanup: + rollback_lock_file(&lk); + return result; +} + +static int maintenance_start(void) +{ + if (maintenance_register()) + warning(_("failed to add repo to global config")); + + return update_background_schedule(1); +} + +static int maintenance_stop(void) +{ + return update_background_schedule(0); +} + +static const char builtin_maintenance_usage[] = N_("git maintenance <subcommand> [<options>]"); int cmd_maintenance(int argc, const char **argv, const char *prefix) { @@ -1369,6 +1630,14 @@ int cmd_maintenance(int argc, const char **argv, const char *prefix) if (!strcmp(argv[1], "run")) return maintenance_run(argc - 1, argv + 1, prefix); + if (!strcmp(argv[1], "start")) + return maintenance_start(); + if (!strcmp(argv[1], "stop")) + return maintenance_stop(); + if (!strcmp(argv[1], "register")) + return maintenance_register(); + if (!strcmp(argv[1], "unregister")) + return maintenance_unregister(); die(_("invalid subcommand: %s"), argv[1]); } diff --git a/builtin/log.c b/builtin/log.c index 9f939e6cdf..08204e3196 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -37,6 +37,7 @@ #define MAIL_DEFAULT_WRAP 72 #define COVER_FROM_AUTO_MAX_SUBJECT_LEN 100 +#define FORMAT_PATCH_NAME_MAX_DEFAULT 64 /* Set a default date-time format for git log ("log.date" config variable) */ static const char *default_date_mode = NULL; @@ -50,6 +51,7 @@ static int decoration_style; static int decoration_given; static int use_mailmap_config = 1; static const char *fmt_patch_subject_prefix = "PATCH"; +static int fmt_patch_name_max = FORMAT_PATCH_NAME_MAX_DEFAULT; static const char *fmt_pretty; static const char * const builtin_log_usage[] = { @@ -150,6 +152,7 @@ static void cmd_log_init_defaults(struct rev_info *rev) rev->abbrev_commit = default_abbrev_commit; rev->show_root_diff = default_show_root; rev->subject_prefix = fmt_patch_subject_prefix; + rev->patch_name_max = fmt_patch_name_max; rev->show_signature = default_show_signature; rev->encode_email_headers = default_encode_email_headers; rev->diffopt.flags.allow_textconv = 1; @@ -183,8 +186,8 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, N_("pattern"), N_("do not decorate refs that match <pattern>")), OPT_CALLBACK_F(0, "decorate", NULL, NULL, N_("decorate options"), PARSE_OPT_OPTARG, decorate_callback), - OPT_CALLBACK('L', NULL, &line_cb, "n,m:file", - N_("Process line range n,m in file, counting from 1"), + OPT_CALLBACK('L', NULL, &line_cb, "range:file", + N_("Trace the evolution of line range <start>,<end> or function :<funcname> in <file>"), log_line_range_callback), OPT_END() }; @@ -206,6 +209,9 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, if (argc > 1) die(_("unrecognized argument: %s"), argv[1]); + if (rev->line_level_traverse && rev->prune_data.nr) + die(_("-L<range>:<file> cannot be used with pathspec")); + memset(&w, 0, sizeof(w)); userformat_find_requirements(NULL, &w); @@ -454,6 +460,10 @@ static int git_log_config(const char *var, const char *value, void *cb) return git_config_string(&fmt_pretty, var, value); if (!strcmp(var, "format.subjectprefix")) return git_config_string(&fmt_patch_subject_prefix, var, value); + if (!strcmp(var, "format.filenamemaxlength")) { + fmt_patch_name_max = git_config_int(var, value); + return 0; + } if (!strcmp(var, "format.encodeemailheaders")) { default_encode_email_headers = git_config_bool(var, value); return 0; @@ -955,15 +965,9 @@ static int open_next_file(struct commit *commit, const char *subject, struct rev_info *rev, int quiet) { struct strbuf filename = STRBUF_INIT; - int suffix_len = strlen(rev->patch_suffix) + 1; if (output_directory) { strbuf_addstr(&filename, output_directory); - if (filename.len >= - PATH_MAX - FORMAT_PATCH_NAME_MAX - suffix_len) { - strbuf_release(&filename); - return error(_("name of output directory is too long")); - } strbuf_complete(&filename, '/'); } @@ -1153,7 +1157,7 @@ static void get_notes_args(struct strvec *arg, struct rev_info *rev) } } -static void make_cover_letter(struct rev_info *rev, int use_stdout, +static void make_cover_letter(struct rev_info *rev, int use_separate_file, struct commit *origin, int nr, struct commit **list, const char *branch_name, @@ -1173,7 +1177,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout, committer = git_committer_info(0); - if (!use_stdout && + if (use_separate_file && open_next_file(NULL, rev->numbered_files ? NULL : "cover-letter", rev, quiet)) die(_("failed to create cover-letter file")); @@ -1751,6 +1755,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) N_("start numbering patches at <n> instead of 1")), OPT_INTEGER('v', "reroll-count", &reroll_count, N_("mark the series as Nth re-roll")), + OPT_INTEGER(0, "filename-max-length", &fmt_patch_name_max, + N_("max length of output filename")), OPT_CALLBACK_F(0, "rfc", &rev, NULL, N_("Use [RFC PATCH] instead of [PATCH]"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, rfc_callback), @@ -1851,6 +1857,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN | PARSE_OPT_KEEP_DASHDASH); + /* Make sure "0000-$sub.patch" gives non-negative length for $sub */ + if (fmt_patch_name_max <= strlen("0000-") + strlen(fmt_patch_suffix)) + fmt_patch_name_max = strlen("0000-") + strlen(fmt_patch_suffix); + if (cover_from_description_arg) cover_from_description_mode = parse_cover_from_description(cover_from_description_arg); @@ -1935,6 +1945,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) rev.diffopt.output_format |= DIFF_FORMAT_PATCH; rev.zero_commit = zero_commit; + rev.patch_name_max = fmt_patch_name_max; if (!rev.diffopt.flags.text && !no_binary_diff) rev.diffopt.flags.binary = 1; @@ -1942,20 +1953,27 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) if (rev.show_notes) load_display_notes(&rev.notes_opt); - if (!output_directory && !use_stdout) - output_directory = config_output_directory; + if (use_stdout + rev.diffopt.close_file + !!output_directory > 1) + die(_("--stdout, --output, and --output-directory are mutually exclusive")); - if (!use_stdout) - output_directory = set_outdir(prefix, output_directory); - else + if (use_stdout) { setup_pager(); - - if (output_directory) { + } else if (rev.diffopt.close_file) { + /* + * The diff code parsed --output; it has already opened the + * file, but but we must instruct it not to close after each + * diff. + */ + rev.diffopt.close_file = 0; + } else { int saved; + + if (!output_directory) + output_directory = config_output_directory; + output_directory = set_outdir(prefix, output_directory); + if (rev.diffopt.use_color != GIT_COLOR_ALWAYS) rev.diffopt.use_color = GIT_COLOR_NEVER; - if (use_stdout) - die(_("standard output, or directory, which one?")); /* * We consider <outdir> as 'outside of gitdir', therefore avoid * applying adjust_shared_perm in s-c-l-d. @@ -2117,7 +2135,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) if (cover_letter) { if (thread) gen_message_id(&rev, "cover"); - make_cover_letter(&rev, use_stdout, + make_cover_letter(&rev, !!output_directory, origin, nr, list, branch_name, quiet); print_bases(&bases, rev.diffopt.file); print_signature(rev.diffopt.file); @@ -2172,7 +2190,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) gen_message_id(&rev, oid_to_hex(&commit->object.oid)); } - if (!use_stdout && + if (output_directory && open_next_file(rev.numbered_files ? NULL : commit, NULL, &rev, quiet)) die(_("failed to create output files")); shown = log_tree_commit(&rev, commit); @@ -2185,7 +2203,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) * the log; when using one file per patch, we do * not want the extra blank line. */ - if (!use_stdout) + if (output_directory) rev.shown_one = 0; if (shown) { print_bases(&bases, rev.diffopt.file); @@ -2196,7 +2214,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) else print_signature(rev.diffopt.file); } - if (!use_stdout) + if (output_directory) fclose(rev.diffopt.file); } stop_progress(&progress); diff --git a/builtin/merge.c b/builtin/merge.c index 4c133402a6..1cff730715 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -28,6 +28,7 @@ #include "rerere.h" #include "help.h" #include "merge-recursive.h" +#include "merge-ort-wrappers.h" #include "resolve-undo.h" #include "remote.h" #include "fmt-merge-msg.h" @@ -88,6 +89,7 @@ static int no_verify; static struct strategy all_strategy[] = { { "recursive", DEFAULT_TWOHEAD | NO_TRIVIAL }, { "octopus", DEFAULT_OCTOPUS }, + { "ort", NO_TRIVIAL }, { "resolve", 0 }, { "ours", NO_FAST_FORWARD | NO_TRIVIAL }, { "subtree", NO_FAST_FORWARD | NO_TRIVIAL }, @@ -159,10 +161,17 @@ static struct strategy *get_strategy(const char *name) struct strategy *ret; static struct cmdnames main_cmds, other_cmds; static int loaded; + char *default_strategy = getenv("GIT_TEST_MERGE_ALGORITHM"); if (!name) return NULL; + if (default_strategy && + !strcmp(default_strategy, "ort") && + !strcmp(name, "recursive")) { + name = "ort"; + } + for (i = 0; i < ARRAY_SIZE(all_strategy); i++) if (!strcmp(name, all_strategy[i].name)) return &all_strategy[i]; @@ -701,7 +710,8 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common, if (refresh_and_write_cache(REFRESH_QUIET, SKIP_IF_UNCHANGED, 0) < 0) return error(_("Unable to write index.")); - if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) { + if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree") || + !strcmp(strategy, "ort")) { struct lock_file lock = LOCK_INIT; int clean, x; struct commit *result; @@ -732,8 +742,12 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common, commit_list_insert(j->item, &reversed); hold_locked_index(&lock, LOCK_DIE_ON_ERROR); - clean = merge_recursive(&o, head, - remoteheads->item, reversed, &result); + if (!strcmp(strategy, "ort")) + clean = merge_ort_recursive(&o, head, remoteheads->item, + reversed, &result); + else + clean = merge_recursive(&o, head, remoteheads->item, + reversed, &result); if (clean < 0) exit(128); if (write_locked_index(&the_index, &lock, @@ -1264,6 +1278,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (branch) skip_prefix(branch, "refs/heads/", &branch); + if (!pull_twohead) { + char *default_strategy = getenv("GIT_TEST_MERGE_ALGORITHM"); + if (default_strategy && !strcmp(default_strategy, "ort")) + pull_twohead = "ort"; + } + init_diff_ui_defaults(); git_config(git_merge_config, NULL); diff --git a/builtin/rebase.c b/builtin/rebase.c index 7b65525301..19c7b377aa 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -119,6 +119,7 @@ static struct replay_opts get_replay_opts(const struct rebase_options *opts) struct replay_opts replay = REPLAY_OPTS_INIT; replay.action = REPLAY_INTERACTIVE_REBASE; + replay.strategy = NULL; sequencer_init_config(&replay); replay.signoff = opts->signoff; @@ -136,7 +137,12 @@ static struct replay_opts get_replay_opts(const struct rebase_options *opts) opts->committer_date_is_author_date; replay.ignore_date = opts->ignore_date; replay.gpg_sign = xstrdup_or_null(opts->gpg_sign_opt); - replay.strategy = opts->strategy; + if (opts->strategy) + replay.strategy = opts->strategy; + else if (!replay.strategy && replay.default_strategy) { + replay.strategy = replay.default_strategy; + replay.default_strategy = NULL; + } if (opts->strategy_opts) parse_strategy_opts(&replay, opts->strategy_opts); @@ -270,15 +276,14 @@ static int edit_todo_file(unsigned flags) } static int get_revision_ranges(struct commit *upstream, struct commit *onto, - struct object_id *orig_head, const char **head_hash, - char **revisions, char **shortrevisions) + struct object_id *orig_head, char **revisions, + char **shortrevisions) { struct commit *base_rev = upstream ? upstream : onto; const char *shorthead; - *head_hash = find_unique_abbrev(orig_head, GIT_MAX_HEXSZ); *revisions = xstrfmt("%s...%s", oid_to_hex(&base_rev->object.oid), - *head_hash); + oid_to_hex(orig_head)); shorthead = find_unique_abbrev(orig_head, DEFAULT_ABBREV); @@ -296,7 +301,8 @@ static int get_revision_ranges(struct commit *upstream, struct commit *onto, } static int init_basic_state(struct replay_opts *opts, const char *head_name, - struct commit *onto, const char *orig_head) + struct commit *onto, + const struct object_id *orig_head) { FILE *interactive; @@ -327,7 +333,6 @@ static void split_exec_commands(const char *cmd, struct string_list *commands) static int do_interactive_rebase(struct rebase_options *opts, unsigned flags) { int ret; - const char *head_hash = NULL; char *revisions = NULL, *shortrevisions = NULL; struct strvec make_script_args = STRVEC_INIT; struct todo_list todo_list = TODO_LIST_INIT; @@ -335,12 +340,12 @@ static int do_interactive_rebase(struct rebase_options *opts, unsigned flags) struct string_list commands = STRING_LIST_INIT_DUP; if (get_revision_ranges(opts->upstream, opts->onto, &opts->orig_head, - &head_hash, &revisions, &shortrevisions)) + &revisions, &shortrevisions)) return -1; if (init_basic_state(&replay, opts->head_name ? opts->head_name : "detached HEAD", - opts->onto, head_hash)) { + opts->onto, &opts->orig_head)) { free(revisions); free(shortrevisions); @@ -370,8 +375,9 @@ static int do_interactive_rebase(struct rebase_options *opts, unsigned flags) split_exec_commands(opts->cmd, &commands); ret = complete_action(the_repository, &replay, flags, - shortrevisions, opts->onto_name, opts->onto, head_hash, - &commands, opts->autosquash, &todo_list); + shortrevisions, opts->onto_name, opts->onto, + &opts->orig_head, &commands, opts->autosquash, + &todo_list); } string_list_clear(&commands, 0); @@ -1771,6 +1777,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) options.default_backend); } + if (options.type == REBASE_MERGE && + !options.strategy && + getenv("GIT_TEST_MERGE_ALGORITHM")) + options.strategy = xstrdup(getenv("GIT_TEST_MERGE_ALGORITHM")); + switch (options.type) { case REBASE_MERGE: case REBASE_PRESERVE_MERGES: diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index ed200c8af1..69ba7326cf 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -595,6 +595,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) struct object_context unused; struct strbuf buf = STRBUF_INIT; const int hexsz = the_hash_algo->hexsz; + int seen_end_of_options = 0; if (argc > 1 && !strcmp("--parseopt", argv[1])) return cmd_parseopt(argc - 1, argv + 1, prefix); @@ -622,21 +623,29 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) for (i = 1; i < argc; i++) { const char *arg = argv[i]; - if (!strcmp(arg, "--local-env-vars")) { - int i; - for (i = 0; local_repo_env[i]; i++) - printf("%s\n", local_repo_env[i]); + if (as_is) { + if (show_file(arg, output_prefix) && as_is < 2) + verify_filename(prefix, arg, 0); continue; } - if (!strcmp(arg, "--resolve-git-dir")) { - const char *gitdir = argv[++i]; - if (!gitdir) - die("--resolve-git-dir requires an argument"); - gitdir = resolve_gitdir(gitdir); - if (!gitdir) - die("not a gitdir '%s'", argv[i]); - puts(gitdir); - continue; + + if (!seen_end_of_options) { + if (!strcmp(arg, "--local-env-vars")) { + int i; + for (i = 0; local_repo_env[i]; i++) + printf("%s\n", local_repo_env[i]); + continue; + } + if (!strcmp(arg, "--resolve-git-dir")) { + const char *gitdir = argv[++i]; + if (!gitdir) + die("--resolve-git-dir requires an argument"); + gitdir = resolve_gitdir(gitdir); + if (!gitdir) + die("not a gitdir '%s'", argv[i]); + puts(gitdir); + continue; + } } /* The rest of the options require a git repository. */ @@ -646,41 +655,36 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) did_repo_setup = 1; } - if (!strcmp(arg, "--git-path")) { - if (!argv[i + 1]) - die("--git-path requires an argument"); - strbuf_reset(&buf); - puts(relative_path(git_path("%s", argv[i + 1]), - prefix, &buf)); - i++; - continue; - } - if (as_is) { - if (show_file(arg, output_prefix) && as_is < 2) - verify_filename(prefix, arg, 0); - continue; - } - if (!strcmp(arg,"-n")) { - if (++i >= argc) - die("-n requires an argument"); - if ((filter & DO_FLAGS) && (filter & DO_REVS)) { - show(arg); - show(argv[i]); - } - continue; - } - if (starts_with(arg, "-n")) { - if ((filter & DO_FLAGS) && (filter & DO_REVS)) - show(arg); + if (!strcmp(arg, "--")) { + as_is = 2; + /* Pass on the "--" if we show anything but files.. */ + if (filter & (DO_FLAGS | DO_REVS)) + show_file(arg, 0); continue; } - if (*arg == '-') { - if (!strcmp(arg, "--")) { - as_is = 2; - /* Pass on the "--" if we show anything but files.. */ - if (filter & (DO_FLAGS | DO_REVS)) - show_file(arg, 0); + if (!seen_end_of_options && *arg == '-') { + if (!strcmp(arg, "--git-path")) { + if (!argv[i + 1]) + die("--git-path requires an argument"); + strbuf_reset(&buf); + puts(relative_path(git_path("%s", argv[i + 1]), + prefix, &buf)); + i++; + continue; + } + if (!strcmp(arg,"-n")) { + if (++i >= argc) + die("-n requires an argument"); + if ((filter & DO_FLAGS) && (filter & DO_REVS)) { + show(arg); + show(argv[i]); + } + continue; + } + if (starts_with(arg, "-n")) { + if ((filter & DO_FLAGS) && (filter & DO_REVS)) + show(arg); continue; } if (!strcmp(arg, "--default")) { @@ -937,6 +941,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) puts(the_hash_algo->name); continue; } + if (!strcmp(arg, "--end-of-options")) { + seen_end_of_options = 1; + if (filter & (DO_FLAGS | DO_REVS)) + show_file(arg, 0); + continue; + } if (show_flag(arg) && verify) die_no_single_rev(quiet); continue; diff --git a/builtin/revert.c b/builtin/revert.c index da8997dc86..314a86c562 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -172,6 +172,11 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) NULL); } + if (!opts->strategy && opts->default_strategy) { + opts->strategy = opts->default_strategy; + opts->default_strategy = NULL; + } + if (opts->allow_ff) verify_opt_compatible(me, "--ff", "--signoff", opts->signoff, @@ -202,6 +207,8 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) /* These option values will be free()d */ opts->gpg_sign = xstrdup_or_null(opts->gpg_sign); opts->strategy = xstrdup_or_null(opts->strategy); + if (!opts->strategy && getenv("GIT_TEST_MERGE_ALGORITHM")) + opts->strategy = xstrdup(getenv("GIT_TEST_MERGE_ALGORITHM")); if (cmd == 'q') { int ret = sequencer_remove_state(opts); diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 0a5c4968f6..c52e4ccd19 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -10,6 +10,7 @@ #include "shortlog.h" #include "parse-options.h" #include "trailer.h" +#include "strmap.h" static char const * const shortlog_usage[] = { N_("git shortlog [<options>] [<revision-range>] [[--] <path>...]"), @@ -169,60 +170,6 @@ static void read_from_stdin(struct shortlog *log) strbuf_release(&oneline); } -struct strset_item { - struct hashmap_entry ent; - char value[FLEX_ARRAY]; -}; - -struct strset { - struct hashmap map; -}; - -#define STRSET_INIT { { NULL } } - -static int strset_item_hashcmp(const void *hash_data, - const struct hashmap_entry *entry, - const struct hashmap_entry *entry_or_key, - const void *keydata) -{ - const struct strset_item *a, *b; - - a = container_of(entry, const struct strset_item, ent); - if (keydata) - return strcmp(a->value, keydata); - - b = container_of(entry_or_key, const struct strset_item, ent); - return strcmp(a->value, b->value); -} - -/* - * Adds "str" to the set if it was not already present; returns true if it was - * already there. - */ -static int strset_check_and_add(struct strset *ss, const char *str) -{ - unsigned int hash = strhash(str); - struct strset_item *item; - - if (!ss->map.table) - hashmap_init(&ss->map, strset_item_hashcmp, NULL, 0); - - if (hashmap_get_from_hash(&ss->map, hash, str)) - return 1; - - FLEX_ALLOC_STR(item, value, str); - hashmap_entry_init(&item->ent, hash); - hashmap_add(&ss->map, &item->ent); - return 0; -} - -static void strset_clear(struct strset *ss) -{ - if (!ss->map.table) - return; - hashmap_free_entries(&ss->map, struct strset_item, ent); -} - static void insert_records_from_trailers(struct shortlog *log, struct strset *dups, struct commit *commit, @@ -253,7 +200,7 @@ static void insert_records_from_trailers(struct shortlog *log, if (!parse_ident(log, &ident, value)) value = ident.buf; - if (strset_check_and_add(dups, value)) + if (!strset_add(dups, value)) continue; insert_one_record(log, value, oneline); } @@ -291,7 +238,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit) log->email ? "%aN <%aE>" : "%aN", &ident, &ctx); if (!HAS_MULTI_BITS(log->groups) || - !strset_check_and_add(&dups, ident.buf)) + strset_add(&dups, ident.buf)) insert_one_record(log, ident.buf, oneline_str); } if (log->groups & SHORTLOG_GROUP_COMMITTER) { @@ -300,7 +247,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit) log->email ? "%cN <%cE>" : "%cN", &ident, &ctx); if (!HAS_MULTI_BITS(log->groups) || - !strset_check_and_add(&dups, ident.buf)) + strset_add(&dups, ident.buf)) insert_one_record(log, ident.buf, oneline_str); } if (log->groups & SHORTLOG_GROUP_TRAILER) { diff --git a/builtin/stash.c b/builtin/stash.c index 3f811f3050..24ddb1bffa 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -534,11 +534,22 @@ static int apply_stash(int argc, const char **argv, const char *prefix) return ret; } +static int reject_reflog_ent(struct object_id *ooid, struct object_id *noid, + const char *email, timestamp_t timestamp, int tz, + const char *message, void *cb_data) +{ + return 1; +} + +static int reflog_is_empty(const char *refname) +{ + return !for_each_reflog_ent(refname, reject_reflog_ent, NULL); +} + static int do_drop_stash(struct stash_info *info, int quiet) { int ret; struct child_process cp_reflog = CHILD_PROCESS_INIT; - struct child_process cp = CHILD_PROCESS_INIT; /* * reflog does not provide a simple function for deleting refs. One will @@ -559,19 +570,7 @@ static int do_drop_stash(struct stash_info *info, int quiet) info->revision.buf); } - /* - * This could easily be replaced by get_oid, but currently it will throw - * a fatal error when a reflog is empty, which we can not recover from. - */ - cp.git_cmd = 1; - /* Even though --quiet is specified, rev-parse still outputs the hash */ - cp.no_stdout = 1; - strvec_pushl(&cp.args, "rev-parse", "--verify", "--quiet", NULL); - strvec_pushf(&cp.args, "%s@{0}", ref_stash); - ret = run_command(&cp); - - /* do_clear_stash if we just dropped the last stash entry */ - if (ret) + if (reflog_is_empty(ref_stash)) do_clear_stash(); return 0; diff --git a/command-list.txt b/command-list.txt index 0e3204e7d1..581499be82 100644 --- a/command-list.txt +++ b/command-list.txt @@ -94,6 +94,7 @@ git-fetch-pack synchingrepositories git-filter-branch ancillarymanipulators git-fmt-merge-msg purehelpers git-for-each-ref plumbinginterrogators +git-for-each-repo plumbinginterrogators git-format-patch mainporcelain git-fsck ancillaryinterrogators complete git-gc mainporcelain diff --git a/compat/bswap.h b/compat/bswap.h index c0bb744adc..512f6f4b99 100644 --- a/compat/bswap.h +++ b/compat/bswap.h @@ -74,7 +74,7 @@ static inline uint64_t git_bswap64(uint64_t x) } #endif -#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64)) #include <stdlib.h> @@ -1963,7 +1963,7 @@ void git_configset_clear(struct config_set *cs) free(entry->key); string_list_clear(&entry->value_list, 1); } - hashmap_free_entries(&cs->config_hash, struct config_set_element, ent); + hashmap_clear_and_free(&cs->config_hash, struct config_set_element, ent); cs->hash_initialized = 0; free(cs->list.items); cs->list.nr = 0; diff --git a/config.mak.dev b/config.mak.dev index 3126a5364d..022fb58218 100644 --- a/config.mak.dev +++ b/config.mak.dev @@ -1,5 +1,6 @@ ifeq ($(filter no-error,$(DEVOPTS)),) DEVELOPER_CFLAGS += -Werror +SPARSE_FLAGS += -Wsparse-error endif ifneq ($(filter pedantic,$(DEVOPTS)),) DEVELOPER_CFLAGS += -pedantic diff --git a/config.mak.uname b/config.mak.uname index c7eba69e54..5b30a9154a 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -541,11 +541,6 @@ ifeq ($(uname_S),NONSTOP_KERNEL) # removing the directory at OS releases J06.21 and L17.02. # Default to the older rm until those two releases are deprecated. RM = /bin/rm -f - # As detected by './configure'. - # Missdetected, hence commented out, see below. - #NO_CURL = YesPlease - # Added manually, see above. - NEEDS_SSL_WITH_CURL = YesPlease NEEDS_CRYPTO_WITH_SSL = YesPlease HAVE_DEV_TTY = YesPlease HAVE_LIBCHARSET_H = YesPlease @@ -636,7 +631,6 @@ ifneq (,$(wildcard ../THIS_IS_MSYSGIT)) prefix = INSTALL = /bin/install EXTLIBS += /mingw/lib/libz.a - NO_R_TO_GCC_LINKER = YesPlease INTERNAL_QSORT = YesPlease HAVE_LIBCHARSET_H = YesPlease NO_GETTEXT = YesPlease @@ -669,7 +663,6 @@ else -fstack-protector-strong EXTLIBS += -lntdll INSTALL = /bin/install - NO_R_TO_GCC_LINKER = YesPlease INTERNAL_QSORT = YesPlease HAVE_LIBCHARSET_H = YesPlease NO_GETTEXT = @@ -695,7 +688,6 @@ ifeq ($(uname_S),QNX) NO_MKDTEMP = YesPlease NO_NSEC = YesPlease NO_PTHREADS = YesPlease - NO_R_TO_GCC_LINKER = YesPlease NO_STRCASESTR = YesPlease NO_STRLCPY = YesPlease endif diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index 54e123d632..4640a1535d 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@ -138,6 +138,7 @@ __git_ps1_show_upstream () done <<< "$output" # parse configuration values + local option for option in ${GIT_PS1_SHOWUPSTREAM}; do case "$option" in git|svn) upstream="$option" ;; @@ -4115,6 +4115,9 @@ void diff_free_filespec_blob(struct diff_filespec *s) void diff_free_filespec_data(struct diff_filespec *s) { + if (!s) + return; + diff_free_filespec_blob(s); FREE_AND_NULL(s->cnt_data); } @@ -6312,9 +6315,9 @@ static void diff_flush_patch_all_file_pairs(struct diff_options *o) if (o->color_moved == COLOR_MOVED_ZEBRA_DIM) dim_moved_lines(o); - hashmap_free_entries(&add_lines, struct moved_entry, + hashmap_clear_and_free(&add_lines, struct moved_entry, ent); - hashmap_free_entries(&del_lines, struct moved_entry, + hashmap_clear_and_free(&del_lines, struct moved_entry, ent); } diff --git a/diffcore-rename.c b/diffcore-rename.c index 99e63e90f8..d367a6d244 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -407,7 +407,7 @@ static int find_exact_renames(struct diff_options *options) renames += find_identical_files(&file_table, i, options); /* Free the hash data structure and entries */ - hashmap_free_entries(&file_table, struct file_similarity, entry); + hashmap_clear_and_free(&file_table, struct file_similarity, entry); return renames; } @@ -817,8 +817,8 @@ static void add_pattern_to_hashsets(struct pattern_list *pl, struct path_pattern clear_hashmaps: warning(_("disabling cone pattern matching")); - hashmap_free_entries(&pl->parent_hashmap, struct pattern_entry, ent); - hashmap_free_entries(&pl->recursive_hashmap, struct pattern_entry, ent); + hashmap_clear_and_free(&pl->parent_hashmap, struct pattern_entry, ent); + hashmap_clear_and_free(&pl->recursive_hashmap, struct pattern_entry, ent); pl->use_cone_patterns = 0; } @@ -921,8 +921,8 @@ void clear_pattern_list(struct pattern_list *pl) free(pl->patterns[i]); free(pl->patterns); free(pl->filebuf); - hashmap_free_entries(&pl->recursive_hashmap, struct pattern_entry, ent); - hashmap_free_entries(&pl->parent_hashmap, struct pattern_entry, ent); + hashmap_clear_and_free(&pl->recursive_hashmap, struct pattern_entry, ent); + hashmap_clear_and_free(&pl->parent_hashmap, struct pattern_entry, ent); memset(pl, 0, sizeof(*pl)); } diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 2defef28cd..7225abd811 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -138,6 +138,10 @@ setup_user_tool () { merge_cmd () { ( eval $merge_tool_cmd ) } + + list_tool_variants () { + echo "$tool" + } } setup_tool () { @@ -1668,7 +1668,7 @@ class P4Submit(Command, P4UserMap): Submit after inspect the message file. The `p4-post-changelist` hook is invoked after the submit has successfully - occured in P4. It takes no parameters and is meant primarily for notification + occurred in P4. It takes no parameters and is meant primarily for notification and cannot affect the outcome of the git p4 submit action. """ @@ -4186,7 +4186,7 @@ class P4Clone(P4Sync): # create a master branch and check out a work tree if gitBranchExists(self.branch): - system([ "git", "branch", "master", self.branch ]) + system([ "git", "branch", currentGitBranch(), self.branch ]) if not self.cloneBare: system([ "git", "checkout", "-f" ]) else: @@ -516,6 +516,7 @@ static struct cmd_struct commands[] = { { "fetch-pack", cmd_fetch_pack, RUN_SETUP | NO_PARSEOPT }, { "fmt-merge-msg", cmd_fmt_merge_msg, RUN_SETUP }, { "for-each-ref", cmd_for_each_ref, RUN_SETUP }, + { "for-each-repo", cmd_for_each_repo, RUN_SETUP_GENTLY }, { "format-patch", cmd_format_patch, RUN_SETUP }, { "fsck", cmd_fsck, RUN_SETUP }, { "fsck-objects", cmd_fsck, RUN_SETUP }, @@ -92,8 +92,9 @@ static void alloc_table(struct hashmap *map, unsigned int size) } static inline int entry_equals(const struct hashmap *map, - const struct hashmap_entry *e1, const struct hashmap_entry *e2, - const void *keydata) + const struct hashmap_entry *e1, + const struct hashmap_entry *e2, + const void *keydata) { return (e1 == e2) || (e1->hash == e2->hash && @@ -101,7 +102,7 @@ static inline int entry_equals(const struct hashmap *map, } static inline unsigned int bucket(const struct hashmap *map, - const struct hashmap_entry *key) + const struct hashmap_entry *key) { return key->hash & (map->tablesize - 1); } @@ -113,6 +114,7 @@ int hashmap_bucket(const struct hashmap *map, unsigned int hash) static void rehash(struct hashmap *map, unsigned int newsize) { + /* map->table MUST NOT be NULL when this function is called */ unsigned int i, oldsize = map->tablesize; struct hashmap_entry **oldtable = map->table; @@ -133,6 +135,7 @@ static void rehash(struct hashmap *map, unsigned int newsize) static inline struct hashmap_entry **find_entry_ptr(const struct hashmap *map, const struct hashmap_entry *key, const void *keydata) { + /* map->table MUST NOT be NULL when this function is called */ struct hashmap_entry **e = &map->table[bucket(map, key)]; while (*e && !entry_equals(map, *e, key, keydata)) e = &(*e)->next; @@ -148,7 +151,7 @@ static int always_equal(const void *unused_cmp_data, } void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function, - const void *cmpfn_data, size_t initial_size) + const void *cmpfn_data, size_t initial_size) { unsigned int size = HASHMAP_INITIAL_SIZE; @@ -171,22 +174,37 @@ void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function, map->do_count_items = 1; } -void hashmap_free_(struct hashmap *map, ssize_t entry_offset) +static void free_individual_entries(struct hashmap *map, ssize_t entry_offset) +{ + struct hashmap_iter iter; + struct hashmap_entry *e; + + hashmap_iter_init(map, &iter); + while ((e = hashmap_iter_next(&iter))) + /* + * like container_of, but using caller-calculated + * offset (caller being hashmap_clear_and_free) + */ + free((char *)e - entry_offset); +} + +void hashmap_partial_clear_(struct hashmap *map, ssize_t entry_offset) { if (!map || !map->table) return; - if (entry_offset >= 0) { /* called by hashmap_free_entries */ - struct hashmap_iter iter; - struct hashmap_entry *e; - - hashmap_iter_init(map, &iter); - while ((e = hashmap_iter_next(&iter))) - /* - * like container_of, but using caller-calculated - * offset (caller being hashmap_free_entries) - */ - free((char *)e - entry_offset); - } + if (entry_offset >= 0) /* called by hashmap_clear_entries */ + free_individual_entries(map, entry_offset); + memset(map->table, 0, map->tablesize * sizeof(struct hashmap_entry *)); + map->shrink_at = 0; + map->private_size = 0; +} + +void hashmap_clear_(struct hashmap *map, ssize_t entry_offset) +{ + if (!map || !map->table) + return; + if (entry_offset >= 0) /* called by hashmap_clear_and_free */ + free_individual_entries(map, entry_offset); free(map->table); memset(map, 0, sizeof(*map)); } @@ -195,11 +213,13 @@ struct hashmap_entry *hashmap_get(const struct hashmap *map, const struct hashmap_entry *key, const void *keydata) { + if (!map->table) + return NULL; return *find_entry_ptr(map, key, keydata); } struct hashmap_entry *hashmap_get_next(const struct hashmap *map, - const struct hashmap_entry *entry) + const struct hashmap_entry *entry) { struct hashmap_entry *e = entry->next; for (; e; e = e->next) @@ -210,8 +230,12 @@ struct hashmap_entry *hashmap_get_next(const struct hashmap *map, void hashmap_add(struct hashmap *map, struct hashmap_entry *entry) { - unsigned int b = bucket(map, entry); + unsigned int b; + + if (!map->table) + alloc_table(map, HASHMAP_INITIAL_SIZE); + b = bucket(map, entry); /* add entry */ entry->next = map->table[b]; map->table[b] = entry; @@ -225,11 +249,15 @@ void hashmap_add(struct hashmap *map, struct hashmap_entry *entry) } struct hashmap_entry *hashmap_remove(struct hashmap *map, - const struct hashmap_entry *key, - const void *keydata) + const struct hashmap_entry *key, + const void *keydata) { struct hashmap_entry *old; - struct hashmap_entry **e = find_entry_ptr(map, key, keydata); + struct hashmap_entry **e; + + if (!map->table) + return NULL; + e = find_entry_ptr(map, key, keydata); if (!*e) return NULL; @@ -249,7 +277,7 @@ struct hashmap_entry *hashmap_remove(struct hashmap *map, } struct hashmap_entry *hashmap_put(struct hashmap *map, - struct hashmap_entry *entry) + struct hashmap_entry *entry) { struct hashmap_entry *old = hashmap_remove(map, entry, NULL); hashmap_add(map, entry); @@ -96,7 +96,7 @@ * } * * if (!strcmp("end", action)) { - * hashmap_free_entries(&map, struct long2string, ent); + * hashmap_clear_and_free(&map, struct long2string, ent); * break; * } * } @@ -210,6 +210,9 @@ struct hashmap { /* hashmap functions */ +#define HASHMAP_INIT(fn, data) { .cmpfn = fn, .cmpfn_data = data, \ + .do_count_items = 1 } + /* * Initializes a hashmap structure. * @@ -228,24 +231,72 @@ struct hashmap { * prevent expensive resizing. If 0, the table is dynamically resized. */ void hashmap_init(struct hashmap *map, - hashmap_cmp_fn equals_function, - const void *equals_function_data, - size_t initial_size); + hashmap_cmp_fn equals_function, + const void *equals_function_data, + size_t initial_size); -/* internal function for freeing hashmap */ -void hashmap_free_(struct hashmap *map, ssize_t offset); +/* internal functions for clearing or freeing hashmap */ +void hashmap_partial_clear_(struct hashmap *map, ssize_t offset); +void hashmap_clear_(struct hashmap *map, ssize_t offset); /* - * Frees a hashmap structure and allocated memory, leaves entries undisturbed + * Frees a hashmap structure and allocated memory for the table, but does not + * free the entries nor anything they point to. + * + * Usage note: + * + * Many callers will need to iterate over all entries and free the data each + * entry points to; in such a case, they can free the entry itself while at it. + * Thus, you might see: + * + * hashmap_for_each_entry(map, hashmap_iter, e, hashmap_entry_name) { + * free(e->somefield); + * free(e); + * } + * hashmap_clear(map); + * + * instead of + * + * hashmap_for_each_entry(map, hashmap_iter, e, hashmap_entry_name) { + * free(e->somefield); + * } + * hashmap_clear_and_free(map, struct my_entry_struct, hashmap_entry_name); + * + * to avoid the implicit extra loop over the entries. However, if there are + * no special fields in your entry that need to be freed beyond the entry + * itself, it is probably simpler to avoid the explicit loop and just call + * hashmap_clear_and_free(). */ -#define hashmap_free(map) hashmap_free_(map, -1) +#define hashmap_clear(map) hashmap_clear_(map, -1) /* - * Frees @map and all entries. @type is the struct type of the entry - * where @member is the hashmap_entry struct used to associate with @map + * Similar to hashmap_clear(), except that the table is no deallocated; it + * is merely zeroed out but left the same size as before. If the hashmap + * will be reused, this avoids the overhead of deallocating and + * reallocating map->table. As with hashmap_clear(), you may need to free + * the entries yourself before calling this function. + */ +#define hashmap_partial_clear(map) hashmap_partial_clear_(map, -1) + +/* + * Similar to hashmap_clear() but also frees all entries. @type is the + * struct type of the entry where @member is the hashmap_entry struct used + * to associate with @map. + * + * See usage note above hashmap_clear(). + */ +#define hashmap_clear_and_free(map, type, member) \ + hashmap_clear_(map, offsetof(type, member)) + +/* + * Similar to hashmap_partial_clear() but also frees all entries. @type is + * the struct type of the entry where @member is the hashmap_entry struct + * used to associate with @map. + * + * See usage note above hashmap_clear(). */ -#define hashmap_free_entries(map, type, member) \ - hashmap_free_(map, offsetof(type, member)); +#define hashmap_partial_clear_and_free(map, type, member) \ + hashmap_partial_clear_(map, offsetof(type, member)) /* hashmap_entry functions */ @@ -261,7 +312,7 @@ void hashmap_free_(struct hashmap *map, ssize_t offset); * and if it is on stack, you can just let it go out of scope). */ static inline void hashmap_entry_init(struct hashmap_entry *e, - unsigned int hash) + unsigned int hash) { e->hash = hash; e->next = NULL; @@ -303,8 +354,8 @@ static inline unsigned int hashmap_get_size(struct hashmap *map) * to `hashmap_cmp_fn` to decide whether the entry matches the key. */ struct hashmap_entry *hashmap_get(const struct hashmap *map, - const struct hashmap_entry *key, - const void *keydata); + const struct hashmap_entry *key, + const void *keydata); /* * Returns the hashmap entry for the specified hash code and key data, @@ -337,7 +388,7 @@ static inline struct hashmap_entry *hashmap_get_from_hash( * call to `hashmap_get` or `hashmap_get_next`. */ struct hashmap_entry *hashmap_get_next(const struct hashmap *map, - const struct hashmap_entry *entry); + const struct hashmap_entry *entry); /* * Adds a hashmap entry. This allows to add duplicate entries (i.e. @@ -357,7 +408,7 @@ void hashmap_add(struct hashmap *map, struct hashmap_entry *entry); * Returns the replaced entry, or NULL if not found (i.e. the entry was added). */ struct hashmap_entry *hashmap_put(struct hashmap *map, - struct hashmap_entry *entry); + struct hashmap_entry *entry); /* * Adds or replaces a hashmap entry contained within @keyvar, @@ -379,8 +430,8 @@ struct hashmap_entry *hashmap_put(struct hashmap *map, * Argument explanation is the same as in `hashmap_get`. */ struct hashmap_entry *hashmap_remove(struct hashmap *map, - const struct hashmap_entry *key, - const void *keydata); + const struct hashmap_entry *key, + const void *keydata); /* * Removes a hashmap entry contained within @keyvar, @@ -422,7 +473,7 @@ struct hashmap_entry *hashmap_iter_next(struct hashmap_iter *iter); /* Initializes the iterator and returns the first entry, if any. */ static inline struct hashmap_entry *hashmap_iter_first(struct hashmap *map, - struct hashmap_iter *iter) + struct hashmap_iter *iter) { hashmap_iter_init(map, iter); return hashmap_iter_next(iter); diff --git a/log-tree.c b/log-tree.c index 1927f917ce..fd0dde97ec 100644 --- a/log-tree.c +++ b/log-tree.c @@ -367,7 +367,7 @@ void fmt_output_subject(struct strbuf *filename, const char *suffix = info->patch_suffix; int nr = info->nr; int start_len = filename->len; - int max_len = start_len + FORMAT_PATCH_NAME_MAX - (strlen(suffix) + 1); + int max_len = start_len + info->patch_name_max - (strlen(suffix) + 1); if (0 < info->reroll_count) strbuf_addf(filename, "v%d-", info->reroll_count); diff --git a/log-tree.h b/log-tree.h index 8fa79289ec..1e8c91dbf2 100644 --- a/log-tree.h +++ b/log-tree.h @@ -33,7 +33,6 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit, int maybe_multipart); void load_ref_decorations(struct decoration_filter *filter, int flags); -#define FORMAT_PATCH_NAME_MAX 64 void fmt_output_commit(struct strbuf *, struct commit *, struct rev_info *); void fmt_output_subject(struct strbuf *, const char *subject, struct rev_info *); void fmt_output_email_subject(struct strbuf *, struct rev_info *); diff --git a/merge-ort-wrappers.c b/merge-ort-wrappers.c new file mode 100644 index 0000000000..7eec25f93a --- /dev/null +++ b/merge-ort-wrappers.c @@ -0,0 +1,62 @@ +#include "cache.h" +#include "merge-ort.h" +#include "merge-ort-wrappers.h" + +#include "commit.h" + +static int unclean(struct merge_options *opt, struct tree *head) +{ + /* Sanity check on repo state; index must match head */ + struct strbuf sb = STRBUF_INIT; + + if (head && repo_index_has_changes(opt->repo, head, &sb)) { + fprintf(stderr, _("Your local changes to the following files would be overwritten by merge:\n %s"), + sb.buf); + strbuf_release(&sb); + return -1; + } + + return 0; +} + +int merge_ort_nonrecursive(struct merge_options *opt, + struct tree *head, + struct tree *merge, + struct tree *merge_base) +{ + struct merge_result result; + + if (unclean(opt, head)) + return -1; + + if (oideq(&merge_base->object.oid, &merge->object.oid)) { + printf(_("Already up to date!")); + return 1; + } + + memset(&result, 0, sizeof(result)); + merge_incore_nonrecursive(opt, merge_base, head, merge, &result); + merge_switch_to_result(opt, head, &result, 1, 1); + + return result.clean; +} + +int merge_ort_recursive(struct merge_options *opt, + struct commit *side1, + struct commit *side2, + struct commit_list *merge_bases, + struct commit **result) +{ + struct tree *head = repo_get_commit_tree(opt->repo, side1); + struct merge_result tmp; + + if (unclean(opt, head)) + return -1; + + memset(&tmp, 0, sizeof(tmp)); + merge_incore_recursive(opt, merge_bases, side1, side2, &tmp); + merge_switch_to_result(opt, head, &tmp, 1, 1); + *result = NULL; + + return tmp.clean; +} diff --git a/merge-ort-wrappers.h b/merge-ort-wrappers.h new file mode 100644 index 0000000000..0c4c57adbb --- /dev/null +++ b/merge-ort-wrappers.h @@ -0,0 +1,25 @@ +#ifndef MERGE_ORT_WRAPPERS_H +#define MERGE_ORT_WRAPPERS_H + +#include "merge-recursive.h" + +/* + * rename-detecting three-way merge, no recursion. + * Wrapper mimicking the old merge_trees() function. + */ +int merge_ort_nonrecursive(struct merge_options *opt, + struct tree *head, + struct tree *merge, + struct tree *common); + +/* + * rename-detecting three-way merge with recursive ancestor consolidation. + * Wrapper mimicking the old merge_recursive() function. + */ +int merge_ort_recursive(struct merge_options *opt, + struct commit *h1, + struct commit *h2, + struct commit_list *ancestors, + struct commit **result); + +#endif diff --git a/merge-ort.c b/merge-ort.c new file mode 100644 index 0000000000..b487901d3e --- /dev/null +++ b/merge-ort.c @@ -0,0 +1,52 @@ +/* + * "Ostensibly Recursive's Twin" merge strategy, or "ort" for short. Meant + * as a drop-in replacement for the "recursive" merge strategy, allowing one + * to replace + * + * git merge [-s recursive] + * + * with + * + * git merge -s ort + * + * Note: git's parser allows the space between '-s' and its argument to be + * missing. (Should I have backronymed "ham", "alsa", "kip", "nap, "alvo", + * "cale", "peedy", or "ins" instead of "ort"?) + */ + +#include "cache.h" +#include "merge-ort.h" + +void merge_switch_to_result(struct merge_options *opt, + struct tree *head, + struct merge_result *result, + int update_worktree_and_index, + int display_update_msgs) +{ + die("Not yet implemented"); + merge_finalize(opt, result); +} + +void merge_finalize(struct merge_options *opt, + struct merge_result *result) +{ + die("Not yet implemented"); +} + +void merge_incore_nonrecursive(struct merge_options *opt, + struct tree *merge_base, + struct tree *side1, + struct tree *side2, + struct merge_result *result) +{ + die("Not yet implemented"); +} + +void merge_incore_recursive(struct merge_options *opt, + struct commit_list *merge_bases, + struct commit *side1, + struct commit *side2, + struct merge_result *result) +{ + die("Not yet implemented"); +} diff --git a/merge-ort.h b/merge-ort.h new file mode 100644 index 0000000000..74adccad16 --- /dev/null +++ b/merge-ort.h @@ -0,0 +1,58 @@ +#ifndef MERGE_ORT_H +#define MERGE_ORT_H + +#include "merge-recursive.h" + +struct commit; +struct tree; + +struct merge_result { + /* Whether the merge is clean */ + int clean; + + /* + * Result of merge. If !clean, represents what would go in worktree + * (thus possibly including files containing conflict markers). + */ + struct tree *tree; + + /* + * Additional metadata used by merge_switch_to_result() or future calls + * to merge_incore_*(). Includes data needed to update the index (if + * !clean) and to print "CONFLICT" messages. Not for external use. + */ + void *priv; +}; + +/* + * rename-detecting three-way merge with recursive ancestor consolidation. + * working tree and index are untouched. + */ +void merge_incore_recursive(struct merge_options *opt, + struct commit_list *merge_bases, + struct commit *side1, + struct commit *side2, + struct merge_result *result); + +/* + * rename-detecting three-way merge, no recursion. + * working tree and index are untouched. + */ +void merge_incore_nonrecursive(struct merge_options *opt, + struct tree *merge_base, + struct tree *side1, + struct tree *side2, + struct merge_result *result); + +/* Update the working tree and index from head to result after incore merge */ +void merge_switch_to_result(struct merge_options *opt, + struct tree *head, + struct merge_result *result, + int update_worktree_and_index, + int display_update_msgs); + +/* Do needed cleanup when not calling merge_switch_to_result() */ +void merge_finalize(struct merge_options *opt, + struct merge_result *result); + +#endif diff --git a/merge-recursive.c b/merge-recursive.c index d0214335a7..f736a0f632 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -2651,7 +2651,7 @@ static struct string_list *get_renames(struct merge_options *opt, free(e->target_file); string_list_clear(&e->source_files, 0); } - hashmap_free_entries(&collisions, struct collision_entry, ent); + hashmap_clear_and_free(&collisions, struct collision_entry, ent); return renames; } @@ -2870,7 +2870,7 @@ static void initial_cleanup_rename(struct diff_queue_struct *pairs, strbuf_release(&e->new_dir); /* possible_new_dirs already cleared in get_directory_renames */ } - hashmap_free_entries(dir_renames, struct dir_rename_entry, ent); + hashmap_clear_and_free(dir_renames, struct dir_rename_entry, ent); free(dir_renames); free(pairs->queue); @@ -3497,7 +3497,7 @@ static int merge_trees_internal(struct merge_options *opt, string_list_clear(entries, 1); free(entries); - hashmap_free_entries(&opt->priv->current_file_dir_set, + hashmap_clear_and_free(&opt->priv->current_file_dir_set, struct path_hashmap_entry, e); if (clean < 0) { diff --git a/mergetools/bc b/mergetools/bc index a89086ee72..26c19d46a5 100644 --- a/mergetools/bc +++ b/mergetools/bc @@ -25,4 +25,5 @@ translate_merge_tool_path() { list_tool_variants () { echo bc echo bc3 + echo bc4 } diff --git a/name-hash.c b/name-hash.c index fb526a3775..5d3c7b12c1 100644 --- a/name-hash.c +++ b/name-hash.c @@ -726,6 +726,6 @@ void free_name_hash(struct index_state *istate) return; istate->name_hash_initialized = 0; - hashmap_free(&istate->name_hash); - hashmap_free_entries(&istate->dir_hash, struct dir_entry, ent); + hashmap_clear(&istate->name_hash); + hashmap_clear_and_free(&istate->dir_hash, struct dir_entry, ent); } @@ -453,12 +453,12 @@ void clear_object_flags(unsigned flags) } } -void clear_commit_marks_all(unsigned int flags) +void repo_clear_commit_marks(struct repository *r, unsigned int flags) { int i; - for (i = 0; i < the_repository->parsed_objects->obj_hash_size; i++) { - struct object *obj = the_repository->parsed_objects->obj_hash[i]; + for (i = 0; i < r->parsed_objects->obj_hash_size; i++) { + struct object *obj = r->parsed_objects->obj_hash[i]; if (obj && obj->type == OBJ_COMMIT) obj->flags &= ~flags; } @@ -532,7 +532,7 @@ void raw_object_store_clear(struct raw_object_store *o) close_object_store(o); o->packed_git = NULL; - hashmap_free(&o->pack_map); + hashmap_clear(&o->pack_map); } void parsed_object_pool_clear(struct parsed_object_pool *o) @@ -191,8 +191,9 @@ void object_array_clear(struct object_array *array); void clear_object_flags(unsigned flags); /* - * Clear the specified object flags from all in-core commit objects. + * Clear the specified object flags from all in-core commit objects from + * the specified repository. */ -void clear_commit_marks_all(unsigned int flags); +void repo_clear_commit_marks(struct repository *r, unsigned int flags); #endif /* OBJECT_H */ @@ -27,7 +27,7 @@ void oidmap_free(struct oidmap *map, int free_entries) return; /* TODO: make oidmap itself not depend on struct layouts */ - hashmap_free_(&map->map, free_entries ? 0 : -1); + hashmap_clear_(&map->map, free_entries ? 0 : -1); } void *oidmap_get(const struct oidmap *map, const struct object_id *key) @@ -72,9 +72,10 @@ void oidset_parse_file_carefully(struct oidset *set, const char *path, if (!sb.len) continue; - if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0' || - (fn && fn(&oid, cbdata))) + if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0') die("invalid object name: %s", sb.buf); + if (fn && fn(&oid, cbdata)) + continue; oidset_insert(set, &oid); } if (ferror(fp)) diff --git a/pack-write.c b/pack-write.c index a6cdb3c67c..23e19cc1ec 100644 --- a/pack-write.c +++ b/pack-write.c @@ -48,7 +48,6 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec struct hashfile *f; struct pack_idx_entry **sorted_by_sha, **list, **last; off_t last_obj_offset = 0; - uint32_t array[256]; int i, fd; uint32_t index_version; @@ -106,10 +105,9 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec break; next++; } - array[i] = htonl(next - sorted_by_sha); + hashwrite_be32(f, next - sorted_by_sha); list = next; } - hashwrite(f, array, 256 * 4); /* * Write the actual SHA1 entries.. diff --git a/patch-ids.c b/patch-ids.c index 12aa6d494b..21973e4933 100644 --- a/patch-ids.c +++ b/patch-ids.c @@ -71,7 +71,7 @@ int init_patch_ids(struct repository *r, struct patch_ids *ids) int free_patch_ids(struct patch_ids *ids) { - hashmap_free_entries(&ids->patches, struct patch_id, ent); + hashmap_clear_and_free(&ids->patches, struct patch_id, ent); return 0; } diff --git a/range-diff.c b/range-diff.c index 24dc435e48..b9950f10c8 100644 --- a/range-diff.c +++ b/range-diff.c @@ -232,11 +232,9 @@ static int patch_util_cmp(const void *dummy, const struct patch_util *a, static void find_exact_matches(struct string_list *a, struct string_list *b) { - struct hashmap map; + struct hashmap map = HASHMAP_INIT((hashmap_cmp_fn)patch_util_cmp, NULL); int i; - hashmap_init(&map, (hashmap_cmp_fn)patch_util_cmp, NULL, 0); - /* First, add the patches of a to a hash map */ for (i = 0; i < a->nr; i++) { struct patch_util *util = a->items[i].util; @@ -266,7 +264,7 @@ static void find_exact_matches(struct string_list *a, struct string_list *b) } } - hashmap_free(&map); + hashmap_clear(&map); } static void diffsize_consume(void *data, char *line, unsigned long len) diff --git a/ref-filter.c b/ref-filter.c index 6476686fea..aa260bfd09 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -2230,7 +2230,7 @@ void ref_array_clear(struct ref_array *array) used_atom_cnt = 0; if (ref_to_worktree_map.worktrees) { - hashmap_free_entries(&(ref_to_worktree_map.map), + hashmap_clear_and_free(&(ref_to_worktree_map.map), struct ref_to_worktree_entry, ent); free_worktrees(ref_to_worktree_map.worktrees); ref_to_worktree_map.worktrees = NULL; diff --git a/revision.c b/revision.c index aa62212040..c6e169e3eb 100644 --- a/revision.c +++ b/revision.c @@ -124,11 +124,6 @@ static int path_and_oids_cmp(const void *hashmap_cmp_fn_data, return strcmp(e1->path, e2->path); } -static void paths_and_oids_init(struct hashmap *map) -{ - hashmap_init(map, path_and_oids_cmp, NULL, 0); -} - static void paths_and_oids_clear(struct hashmap *map) { struct hashmap_iter iter; @@ -139,7 +134,7 @@ static void paths_and_oids_clear(struct hashmap *map) free(entry->path); } - hashmap_free_entries(map, struct path_and_oids_entry, ent); + hashmap_clear_and_free(map, struct path_and_oids_entry, ent); } static void paths_and_oids_insert(struct hashmap *map, @@ -213,7 +208,7 @@ void mark_trees_uninteresting_sparse(struct repository *r, struct oidset *trees) { unsigned has_interesting = 0, has_uninteresting = 0; - struct hashmap map; + struct hashmap map = HASHMAP_INIT(path_and_oids_cmp, NULL); struct hashmap_iter map_iter; struct path_and_oids_entry *entry; struct object_id *oid; @@ -237,8 +232,6 @@ void mark_trees_uninteresting_sparse(struct repository *r, if (!has_uninteresting || !has_interesting) return; - paths_and_oids_init(&map); - oidset_iter_init(trees, &iter); while ((oid = oidset_iter_next(&iter))) { struct tree *tree = lookup_tree(r, oid); diff --git a/revision.h b/revision.h index f6bf860d19..086ff10280 100644 --- a/revision.h +++ b/revision.h @@ -238,6 +238,7 @@ struct rev_info { const char *extra_headers; const char *log_reencode; const char *subject_prefix; + int patch_name_max; int no_inline; int show_log_size; struct string_list *mailmap; diff --git a/run-command.c b/run-command.c index 2ee59acdc8..ea4d0fb4b1 100644 --- a/run-command.c +++ b/run-command.c @@ -7,6 +7,7 @@ #include "strbuf.h" #include "string-list.h" #include "quote.h" +#include "config.h" void child_process_init(struct child_process *child) { @@ -1868,8 +1869,13 @@ int run_processes_parallel_tr2(int n, get_next_task_fn get_next_task, int run_auto_maintenance(int quiet) { + int enabled; struct child_process maint = CHILD_PROCESS_INIT; + if (!git_config_get_bool("maintenance.auto", &enabled) && + !enabled) + return 0; + maint.git_cmd = 1; strvec_pushl(&maint.args, "maintenance", "run", "--auto", NULL); strvec_push(&maint.args, quiet ? "--quiet" : "--no-quiet"); diff --git a/sequencer.c b/sequencer.c index 12443965c7..8909a46770 100644 --- a/sequencer.c +++ b/sequencer.c @@ -14,7 +14,8 @@ #include "diff.h" #include "revision.h" #include "rerere.h" -#include "merge-recursive.h" +#include "merge-ort.h" +#include "merge-ort-wrappers.h" #include "refs.h" #include "strvec.h" #include "quote.h" @@ -204,6 +205,20 @@ static int git_sequencer_config(const char *k, const char *v, void *cb) return 0; } + if (!opts->default_strategy && !strcmp(k, "pull.twohead")) { + int ret = git_config_string((const char**)&opts->default_strategy, k, v); + if (ret == 0) { + /* + * pull.twohead is allowed to be multi-valued; we only + * care about the first value. + */ + char *tmp = strchr(opts->default_strategy, ' '); + if (tmp) + *tmp = '\0'; + } + return ret; + } + status = git_gpg_config(k, v, NULL); if (status) return status; @@ -315,6 +330,7 @@ int sequencer_remove_state(struct replay_opts *opts) } free(opts->gpg_sign); + free(opts->default_strategy); free(opts->strategy); for (i = 0; i < opts->xopts_nr; i++) free(opts->xopts[i]); @@ -593,8 +609,9 @@ static int do_recursive_merge(struct repository *r, struct replay_opts *opts) { struct merge_options o; + struct merge_result result; struct tree *next_tree, *base_tree, *head_tree; - int clean; + int clean, show_output; int i; struct lock_file index_lock = LOCK_INIT; @@ -618,12 +635,27 @@ static int do_recursive_merge(struct repository *r, for (i = 0; i < opts->xopts_nr; i++) parse_merge_opt(&o, opts->xopts[i]); - clean = merge_trees(&o, - head_tree, - next_tree, base_tree); - if (is_rebase_i(opts) && clean <= 0) - fputs(o.obuf.buf, stdout); - strbuf_release(&o.obuf); + if (opts->strategy && !strcmp(opts->strategy, "ort")) { + memset(&result, 0, sizeof(result)); + merge_incore_nonrecursive(&o, base_tree, head_tree, next_tree, + &result); + show_output = !is_rebase_i(opts) || !result.clean; + /* + * TODO: merge_switch_to_result will update index/working tree; + * we only really want to do that if !result.clean || this is + * the final patch to be picked. But determining this is the + * final patch would take some work, and "head_tree" would need + * to be replace with the tree the index matched before we + * started doing any picks. + */ + merge_switch_to_result(&o, head_tree, &result, 1, show_output); + clean = result.clean; + } else { + clean = merge_trees(&o, head_tree, next_tree, base_tree); + if (is_rebase_i(opts) && clean <= 0) + fputs(o.obuf.buf, stdout); + strbuf_release(&o.obuf); + } if (clean < 0) { rollback_lock_file(&index_lock); return clean; @@ -1989,7 +2021,10 @@ static int do_pick_commit(struct repository *r, if (is_rebase_i(opts) && write_author_script(msg.message) < 0) res = -1; - else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) { + else if (!opts->strategy || + !strcmp(opts->strategy, "recursive") || + !strcmp(opts->strategy, "ort") || + command == TODO_REVERT) { res = do_recursive_merge(r, base, next, base_label, next_label, &head, &msgbuf, opts); if (res < 0) @@ -2651,7 +2686,7 @@ static int read_populate_opts(struct replay_opts *opts) } if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) { - if (get_oid_hex(buf.buf, &opts->squash_onto) < 0) { + if (get_oid_committish(buf.buf, &opts->squash_onto) < 0) { ret = error(_("unusable squash-onto")); goto done_rebase_i; } @@ -2690,7 +2725,7 @@ static void write_strategy_opts(struct replay_opts *opts) } int write_basic_state(struct replay_opts *opts, const char *head_name, - struct commit *onto, const char *orig_head) + struct commit *onto, const struct object_id *orig_head) { if (head_name) write_file(rebase_path_head_name(), "%s\n", head_name); @@ -2698,7 +2733,8 @@ int write_basic_state(struct replay_opts *opts, const char *head_name, write_file(rebase_path_onto(), "%s\n", oid_to_hex(&onto->object.oid)); if (orig_head) - write_file(rebase_path_orig_head(), "%s\n", orig_head); + write_file(rebase_path_orig_head(), "%s\n", + oid_to_hex(orig_head)); if (opts->quiet) write_file(rebase_path_quiet(), "%s", ""); @@ -3483,7 +3519,9 @@ static int do_merge(struct repository *r, struct commit_list *bases, *j, *reversed = NULL; struct commit_list *to_merge = NULL, **tail = &to_merge; const char *strategy = !opts->xopts_nr && - (!opts->strategy || !strcmp(opts->strategy, "recursive")) ? + (!opts->strategy || + !strcmp(opts->strategy, "recursive") || + !strcmp(opts->strategy, "ort")) ? NULL : opts->strategy; struct merge_options o; int merge_arg_len, oneline_offset, can_fast_forward, ret, k; @@ -3721,7 +3759,20 @@ static int do_merge(struct repository *r, o.branch2 = ref_name.buf; o.buffer_output = 2; - ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i); + if (opts->strategy && !strcmp(opts->strategy, "ort")) { + /* + * TODO: Should use merge_incore_recursive() and + * merge_switch_to_result(), skipping the call to + * merge_switch_to_result() when we don't actually need to + * update the index and working copy immediately. + */ + ret = merge_ort_recursive(&o, + head_commit, merge_commit, reversed, + &i); + } else { + ret = merge_recursive(&o, head_commit, merge_commit, reversed, + &i); + } if (ret <= 0) fputs(o.obuf.buf, stdout); strbuf_release(&o.obuf); @@ -3964,21 +4015,17 @@ static int run_git_checkout(struct repository *r, struct replay_opts *opts, static int checkout_onto(struct repository *r, struct replay_opts *opts, const char *onto_name, const struct object_id *onto, - const char *orig_head) + const struct object_id *orig_head) { - struct object_id oid; const char *action = reflog_message(opts, "start", "checkout %s", onto_name); - if (get_oid(orig_head, &oid)) - return error(_("%s: not a valid OID"), orig_head); - if (run_git_checkout(r, opts, oid_to_hex(onto), action)) { apply_autostash(rebase_path_autostash()); sequencer_remove_state(opts); return error(_("could not detach HEAD")); } - return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR); + return update_ref(NULL, "ORIG_HEAD", orig_head, NULL, 0, UPDATE_REFS_MSG_ON_ERR); } static int stopped_at_head(struct repository *r) @@ -5038,7 +5085,7 @@ static int make_script_with_merges(struct pretty_print_context *pp, oidmap_free(&commit2todo, 1); oidmap_free(&state.commit2label, 1); - hashmap_free_entries(&state.labels, struct labels_entry, entry); + hashmap_clear_and_free(&state.labels, struct labels_entry, entry); strbuf_release(&state.buf); return 0; @@ -5294,7 +5341,7 @@ static int skip_unnecessary_picks(struct repository *r, int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags, const char *shortrevisions, const char *onto_name, - struct commit *onto, const char *orig_head, + struct commit *onto, const struct object_id *orig_head, struct string_list *commands, unsigned autosquash, struct todo_list *todo_list) { @@ -5554,7 +5601,7 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) for (i = 0; i < todo_list->nr; i++) free(subjects[i]); free(subjects); - hashmap_free_entries(&subject2item, struct subject2item_entry, entry); + hashmap_clear_and_free(&subject2item, struct subject2item_entry, entry); clear_commit_todo_item(&commit_todo); diff --git a/sequencer.h b/sequencer.h index f925e349c5..f8b2e4ab85 100644 --- a/sequencer.h +++ b/sequencer.h @@ -55,6 +55,7 @@ struct replay_opts { int explicit_cleanup; /* Merge strategy */ + char *default_strategy; /* from config options */ char *strategy; char **xopts; size_t xopts_nr, xopts_alloc; @@ -161,8 +162,9 @@ void todo_list_add_exec_commands(struct todo_list *todo_list, struct string_list *commands); int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags, const char *shortrevisions, const char *onto_name, - struct commit *onto, const char *orig_head, struct string_list *commands, - unsigned autosquash, struct todo_list *todo_list); + struct commit *onto, const struct object_id *orig_head, + struct string_list *commands, unsigned autosquash, + struct todo_list *todo_list); int todo_list_rearrange_squash(struct todo_list *todo_list); /* @@ -224,7 +226,7 @@ int read_author_script(const char *path, char **name, char **email, char **date, int allow_missing); void parse_strategy_opts(struct replay_opts *opts, char *raw_opts); int write_basic_state(struct replay_opts *opts, const char *head_name, - struct commit *onto, const char *orig_head); + struct commit *onto, const struct object_id *orig_head); void sequencer_post_commit_cleanup(struct repository *r, int verbose); int sequencer_get_last_command(struct repository* r, enum replay_action *action); diff --git a/strmap.c b/strmap.c new file mode 100644 index 0000000000..4fb9f6100e --- /dev/null +++ b/strmap.c @@ -0,0 +1,178 @@ +#include "git-compat-util.h" +#include "strmap.h" +#include "mem-pool.h" + +int cmp_strmap_entry(const void *hashmap_cmp_fn_data, + const struct hashmap_entry *entry1, + const struct hashmap_entry *entry2, + const void *keydata) +{ + const struct strmap_entry *e1, *e2; + + e1 = container_of(entry1, const struct strmap_entry, ent); + e2 = container_of(entry2, const struct strmap_entry, ent); + return strcmp(e1->key, e2->key); +} + +static struct strmap_entry *find_strmap_entry(struct strmap *map, + const char *str) +{ + struct strmap_entry entry; + hashmap_entry_init(&entry.ent, strhash(str)); + entry.key = str; + return hashmap_get_entry(&map->map, &entry, ent, NULL); +} + +void strmap_init(struct strmap *map) +{ + strmap_init_with_options(map, NULL, 1); +} + +void strmap_init_with_options(struct strmap *map, + struct mem_pool *pool, + int strdup_strings) +{ + hashmap_init(&map->map, cmp_strmap_entry, NULL, 0); + map->pool = pool; + map->strdup_strings = strdup_strings; +} + +static void strmap_free_entries_(struct strmap *map, int free_values) +{ + struct hashmap_iter iter; + struct strmap_entry *e; + + if (!map) + return; + + if (!free_values && map->pool) + /* Memory other than util is owned by and freed with the pool */ + return; + + /* + * We need to iterate over the hashmap entries and free + * e->key and e->value ourselves; hashmap has no API to + * take care of that for us. Since we're already iterating over + * the hashmap, though, might as well free e too and avoid the need + * to make some call into the hashmap API to do that. + */ + hashmap_for_each_entry(&map->map, &iter, e, ent) { + if (free_values) + free(e->value); + if (!map->pool) + free(e); + } +} + +void strmap_clear(struct strmap *map, int free_values) +{ + strmap_free_entries_(map, free_values); + hashmap_clear(&map->map); +} + +void strmap_partial_clear(struct strmap *map, int free_values) +{ + strmap_free_entries_(map, free_values); + hashmap_partial_clear(&map->map); +} + +static struct strmap_entry *create_entry(struct strmap *map, + const char *str, + void *data) +{ + struct strmap_entry *entry; + + if (map->strdup_strings) { + if (!map->pool) { + FLEXPTR_ALLOC_STR(entry, key, str); + } else { + size_t len = st_add(strlen(str), 1); /* include NUL */ + entry = mem_pool_alloc(map->pool, + st_add(sizeof(*entry), len)); + memcpy(entry + 1, str, len); + entry->key = (void *)(entry + 1); + } + } else if (!map->pool) { + entry = xmalloc(sizeof(*entry)); + } else { + entry = mem_pool_alloc(map->pool, sizeof(*entry)); + } + hashmap_entry_init(&entry->ent, strhash(str)); + if (!map->strdup_strings) + entry->key = str; + entry->value = data; + return entry; +} + +void *strmap_put(struct strmap *map, const char *str, void *data) +{ + struct strmap_entry *entry = find_strmap_entry(map, str); + + if (entry) { + void *old = entry->value; + entry->value = data; + return old; + } + + entry = create_entry(map, str, data); + hashmap_add(&map->map, &entry->ent); + return NULL; +} + +struct strmap_entry *strmap_get_entry(struct strmap *map, const char *str) +{ + return find_strmap_entry(map, str); +} + +void *strmap_get(struct strmap *map, const char *str) +{ + struct strmap_entry *entry = find_strmap_entry(map, str); + return entry ? entry->value : NULL; +} + +int strmap_contains(struct strmap *map, const char *str) +{ + return find_strmap_entry(map, str) != NULL; +} + +void strmap_remove(struct strmap *map, const char *str, int free_value) +{ + struct strmap_entry entry, *ret; + hashmap_entry_init(&entry.ent, strhash(str)); + entry.key = str; + ret = hashmap_remove_entry(&map->map, &entry, ent, NULL); + if (!ret) + return; + if (free_value) + free(ret->value); + if (!map->pool) + free(ret); +} + +void strintmap_incr(struct strintmap *map, const char *str, intptr_t amt) +{ + struct strmap_entry *entry = find_strmap_entry(&map->map, str); + if (entry) { + intptr_t *whence = (intptr_t*)&entry->value; + *whence += amt; + } + else + strintmap_set(map, str, map->default_value + amt); +} + +int strset_add(struct strset *set, const char *str) +{ + /* + * Cannot use strmap_put() because it'll return NULL in both cases: + * - cannot find str: NULL means "not found" + * - does find str: NULL is the value associated with str + */ + struct strmap_entry *entry = find_strmap_entry(&set->map, str); + + if (entry) + return 0; + + entry = create_entry(&set->map, str, NULL); + hashmap_add(&set->map.map, &entry->ent); + return 1; +} diff --git a/strmap.h b/strmap.h new file mode 100644 index 0000000000..c4c104411b --- /dev/null +++ b/strmap.h @@ -0,0 +1,268 @@ +#ifndef STRMAP_H +#define STRMAP_H + +#include "hashmap.h" + +struct mem_pool; +struct strmap { + struct hashmap map; + struct mem_pool *pool; + unsigned int strdup_strings:1; +}; + +struct strmap_entry { + struct hashmap_entry ent; + const char *key; + void *value; + /* strmap_entry may be allocated extra space to store the key at end */ +}; + +int cmp_strmap_entry(const void *hashmap_cmp_fn_data, + const struct hashmap_entry *entry1, + const struct hashmap_entry *entry2, + const void *keydata); + +#define STRMAP_INIT { \ + .map = HASHMAP_INIT(cmp_strmap_entry, NULL), \ + .strdup_strings = 1, \ + } +#define STRINTMAP_INIT { \ + .map = STRMAP_INIT, \ + .default_value = 0, \ + } +#define STRSET_INIT { .map = STRMAP_INIT } + +/* + * Initialize the members of the strmap. Any keys added to the strmap will + * be strdup'ed with their memory managed by the strmap. + */ +void strmap_init(struct strmap *map); + +/* + * Same as strmap_init, but for those who want to control the memory management + * carefully instead of using the default of strdup_strings=1 and pool=NULL. + */ +void strmap_init_with_options(struct strmap *map, + struct mem_pool *pool, + int strdup_strings); + +/* + * Remove all entries from the map, releasing any allocated resources. + */ +void strmap_clear(struct strmap *map, int free_values); + +/* + * Similar to strmap_clear() but leaves map->map->table allocated and + * pre-sized so that subsequent uses won't need as many rehashings. + */ +void strmap_partial_clear(struct strmap *map, int free_values); + +/* + * Insert "str" into the map, pointing to "data". + * + * If an entry for "str" already exists, its data pointer is overwritten, and + * the original data pointer returned. Otherwise, returns NULL. + */ +void *strmap_put(struct strmap *map, const char *str, void *data); + +/* + * Return the strmap_entry mapped by "str", or NULL if there is not such + * an item in map. + */ +struct strmap_entry *strmap_get_entry(struct strmap *map, const char *str); + +/* + * Return the data pointer mapped by "str", or NULL if the entry does not + * exist. + */ +void *strmap_get(struct strmap *map, const char *str); + +/* + * Return non-zero iff "str" is present in the map. This differs from + * strmap_get() in that it can distinguish entries with a NULL data pointer. + */ +int strmap_contains(struct strmap *map, const char *str); + +/* + * Remove the given entry from the strmap. If the string isn't in the + * strmap, the map is not altered. + */ +void strmap_remove(struct strmap *map, const char *str, int free_value); + +/* + * Return how many entries the strmap has. + */ +static inline unsigned int strmap_get_size(struct strmap *map) +{ + return hashmap_get_size(&map->map); +} + +/* + * Return whether the strmap is empty. + */ +static inline int strmap_empty(struct strmap *map) +{ + return strmap_get_size(map) == 0; +} + +/* + * iterate through @map using @iter, @var is a pointer to a type strmap_entry + */ +#define strmap_for_each_entry(mystrmap, iter, var) \ + hashmap_for_each_entry(&(mystrmap)->map, iter, var, ent) + + +/* + * strintmap: + * A map of string -> int, typecasting the void* of strmap to an int. + * + * Primary differences: + * 1) Since the void* value is just an int in disguise, there is no value + * to free. (Thus one fewer argument to strintmap_clear) + * 2) strintmap_get() returns an int, or returns the default_value if the + * key is not found in the strintmap. + * 3) No strmap_put() equivalent; strintmap_set() and strintmap_incr() + * instead. + */ + +struct strintmap { + struct strmap map; + int default_value; +}; + +#define strintmap_for_each_entry(mystrmap, iter, var) \ + strmap_for_each_entry(&(mystrmap)->map, iter, var) + +static inline void strintmap_init(struct strintmap *map, int default_value) +{ + strmap_init(&map->map); + map->default_value = default_value; +} + +static inline void strintmap_init_with_options(struct strintmap *map, + int default_value, + struct mem_pool *pool, + int strdup_strings) +{ + strmap_init_with_options(&map->map, pool, strdup_strings); + map->default_value = default_value; +} + +static inline void strintmap_clear(struct strintmap *map) +{ + strmap_clear(&map->map, 0); +} + +static inline void strintmap_partial_clear(struct strintmap *map) +{ + strmap_partial_clear(&map->map, 0); +} + +static inline int strintmap_contains(struct strintmap *map, const char *str) +{ + return strmap_contains(&map->map, str); +} + +static inline void strintmap_remove(struct strintmap *map, const char *str) +{ + return strmap_remove(&map->map, str, 0); +} + +static inline int strintmap_empty(struct strintmap *map) +{ + return strmap_empty(&map->map); +} + +static inline unsigned int strintmap_get_size(struct strintmap *map) +{ + return strmap_get_size(&map->map); +} + +/* + * Returns the value for str in the map. If str isn't found in the map, + * the map's default_value is returned. + */ +static inline int strintmap_get(struct strintmap *map, const char *str) +{ + struct strmap_entry *result = strmap_get_entry(&map->map, str); + if (!result) + return map->default_value; + return (intptr_t)result->value; +} + +static inline void strintmap_set(struct strintmap *map, const char *str, + intptr_t v) +{ + strmap_put(&map->map, str, (void *)v); +} + +/* + * Increment the value for str by amt. If str isn't in the map, add it and + * set its value to default_value + amt. + */ +void strintmap_incr(struct strintmap *map, const char *str, intptr_t amt); + +/* + * strset: + * A set of strings. + * + * Primary differences with strmap: + * 1) The value is always NULL, and ignored. As there is no value to free, + * there is one fewer argument to strset_clear + * 2) No strset_get() because there is no value. + * 3) No strset_put(); use strset_add() instead. + */ + +struct strset { + struct strmap map; +}; + +#define strset_for_each_entry(mystrset, iter, var) \ + strmap_for_each_entry(&(mystrset)->map, iter, var) + +static inline void strset_init(struct strset *set) +{ + strmap_init(&set->map); +} + +static inline void strset_init_with_options(struct strset *set, + struct mem_pool *pool, + int strdup_strings) +{ + strmap_init_with_options(&set->map, pool, strdup_strings); +} + +static inline void strset_clear(struct strset *set) +{ + strmap_clear(&set->map, 0); +} + +static inline void strset_partial_clear(struct strset *set) +{ + strmap_partial_clear(&set->map, 0); +} + +static inline int strset_contains(struct strset *set, const char *str) +{ + return strmap_contains(&set->map, str); +} + +static inline void strset_remove(struct strset *set, const char *str) +{ + return strmap_remove(&set->map, str, 0); +} + +static inline int strset_empty(struct strset *set) +{ + return strmap_empty(&set->map); +} + +static inline unsigned int strset_get_size(struct strset *set) +{ + return strmap_get_size(&set->map); +} + +/* Returns 1 if str is added to the set; returns 0 if str was already in set */ +int strset_add(struct strset *set, const char *str); + +#endif /* STRMAP_H */ diff --git a/submodule-config.c b/submodule-config.c index c569e22aa3..f502505566 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -103,8 +103,8 @@ static void submodule_cache_clear(struct submodule_cache *cache) ent /* member name */) free_one_config(entry); - hashmap_free_entries(&cache->for_path, struct submodule_entry, ent); - hashmap_free_entries(&cache->for_name, struct submodule_entry, ent); + hashmap_clear_and_free(&cache->for_path, struct submodule_entry, ent); + hashmap_clear_and_free(&cache->for_name, struct submodule_entry, ent); cache->initialized = 0; cache->gitmodules_read = 0; } diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index d933af5714..3aee61d2cc 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -479,6 +479,24 @@ test_expect_success 'blame -L ^:RE (absolute: end-of-file)' ' check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1 ' +test_expect_success 'setup -L :funcname with userdiff driver' ' + echo "fortran-* diff=fortran" >.gitattributes && + fortran_file=fortran-external-function && + orig_file="$TEST_DIRECTORY/t4018/$fortran_file" && + cp $orig_file . && + git add $fortran_file && + GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \ + git commit -m "add fortran file" && + sed -e "s/ChangeMe/IWasChanged/" <"$orig_file" >$fortran_file && + git add $fortran_file && + GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \ + git commit -m "change fortran file" +' + +test_expect_success 'blame -L :funcname with userdiff driver' ' + check_count -f fortran-external-function -L:RIGHT A 7 B 1 +' + test_expect_success 'setup incremental' ' ( GIT_AUTHOR_NAME=I && diff --git a/t/helper/test-crontab.c b/t/helper/test-crontab.c new file mode 100644 index 0000000000..e7c0137a47 --- /dev/null +++ b/t/helper/test-crontab.c @@ -0,0 +1,35 @@ +#include "test-tool.h" +#include "cache.h" + +/* + * Usage: test-tool cron <file> [-l] + * + * If -l is specified, then write the contents of <file> to stdout. + * Otherwise, write from stdin into <file>. + */ +int cmd__crontab(int argc, const char **argv) +{ + int a; + FILE *from, *to; + + if (argc == 3 && !strcmp(argv[2], "-l")) { + from = fopen(argv[1], "r"); + if (!from) + return 0; + to = stdout; + } else if (argc == 2) { + from = stdin; + to = fopen(argv[1], "w"); + } else + return error("unknown arguments"); + + while ((a = fgetc(from)) != EOF) + fputc(a, to); + + if (argc == 3) + fclose(from); + else + fclose(to); + + return 0; +} diff --git a/t/helper/test-fast-rebase.c b/t/helper/test-fast-rebase.c new file mode 100644 index 0000000000..373212256a --- /dev/null +++ b/t/helper/test-fast-rebase.c @@ -0,0 +1,211 @@ +/* + * "git fast-rebase" builtin command + * + * FAST: Forking Any Subprocesses (is) Taboo + * + * This is meant SOLELY as a demo of what is possible. sequencer.c and + * rebase.c should be refactored to use the ideas here, rather than attempting + * to extend this file to replace those (unless Phillip or Dscho say that + * refactoring is too hard and we need a clean slate, but I'm guessing that + * refactoring is the better route). + */ + +#define USE_THE_INDEX_COMPATIBILITY_MACROS +#include "test-tool.h" + +#include "cache-tree.h" +#include "commit.h" +#include "lockfile.h" +#include "merge-ort.h" +#include "refs.h" +#include "revision.h" +#include "sequencer.h" +#include "strvec.h" +#include "tree.h" + +static const char *short_commit_name(struct commit *commit) +{ + return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV); +} + +static struct commit *peel_committish(const char *name) +{ + struct object *obj; + struct object_id oid; + + if (get_oid(name, &oid)) + return NULL; + obj = parse_object(the_repository, &oid); + return (struct commit *)peel_to_type(name, 0, obj, OBJ_COMMIT); +} + +static char *get_author(const char *message) +{ + size_t len; + const char *a; + + a = find_commit_header(message, "author", &len); + if (a) + return xmemdupz(a, len); + + return NULL; +} + +static struct commit *create_commit(struct tree *tree, + struct commit *based_on, + struct commit *parent) +{ + struct object_id ret; + struct object *obj; + struct commit_list *parents = NULL; + char *author; + char *sign_commit = NULL; + struct commit_extra_header *extra; + struct strbuf msg = STRBUF_INIT; + const char *out_enc = get_commit_output_encoding(); + const char *message = logmsg_reencode(based_on, NULL, out_enc); + const char *orig_message = NULL; + const char *exclude_gpgsig[] = { "gpgsig", NULL }; + + commit_list_insert(parent, &parents); + extra = read_commit_extra_headers(based_on, exclude_gpgsig); + find_commit_subject(message, &orig_message); + strbuf_addstr(&msg, orig_message); + author = get_author(message); + reset_ident_date(); + if (commit_tree_extended(msg.buf, msg.len, &tree->object.oid, parents, + &ret, author, NULL, sign_commit, extra)) { + error(_("failed to write commit object")); + return NULL; + } + free(author); + strbuf_release(&msg); + + obj = parse_object(the_repository, &ret); + return (struct commit *)obj; +} + +int cmd__fast_rebase(int argc, const char **argv) +{ + struct commit *onto; + struct commit *last_commit = NULL, *last_picked_commit = NULL; + struct object_id head; + struct lock_file lock = LOCK_INIT; + int clean = 1; + struct strvec rev_walk_args = STRVEC_INIT; + struct rev_info revs; + struct commit *commit; + struct merge_options merge_opt; + struct tree *next_tree, *base_tree, *head_tree; + struct merge_result result; + struct strbuf reflog_msg = STRBUF_INIT; + struct strbuf branch_name = STRBUF_INIT; + + /* + * test-tool stuff doesn't set up the git directory by default; need to + * do that manually. + */ + setup_git_directory(); + + if (argc == 2 && !strcmp(argv[1], "-h")) { + printf("Sorry, I am not a psychiatrist; I can not give you the help you need. Oh, you meant usage...\n"); + exit(129); + } + + if (argc != 5 || strcmp(argv[1], "--onto")) + die("usage: read the code, figure out how to use it, then do so"); + + onto = peel_committish(argv[2]); + strbuf_addf(&branch_name, "refs/heads/%s", argv[4]); + + /* Sanity check */ + if (get_oid("HEAD", &head)) + die(_("Cannot read HEAD")); + assert(oideq(&onto->object.oid, &head)); + + hold_locked_index(&lock, LOCK_DIE_ON_ERROR); + assert(repo_read_index(the_repository) >= 0); + + repo_init_revisions(the_repository, &revs, NULL); + revs.verbose_header = 1; + revs.max_parents = 1; + revs.cherry_mark = 1; + revs.limited = 1; + revs.reverse = 1; + revs.right_only = 1; + revs.sort_order = REV_SORT_IN_GRAPH_ORDER; + revs.topo_order = 1; + strvec_pushl(&rev_walk_args, "", argv[4], "--not", argv[3], NULL); + + if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) + return error(_("unhandled options")); + + strvec_clear(&rev_walk_args); + + if (prepare_revision_walk(&revs) < 0) + return error(_("error preparing revisions")); + + init_merge_options(&merge_opt, the_repository); + memset(&result, 0, sizeof(result)); + merge_opt.show_rename_progress = 1; + merge_opt.branch1 = "HEAD"; + head_tree = get_commit_tree(onto); + result.tree = head_tree; + last_commit = onto; + while ((commit = get_revision(&revs))) { + struct commit *base; + + fprintf(stderr, "Rebasing %s...\r", + oid_to_hex(&commit->object.oid)); + assert(commit->parents && !commit->parents->next); + base = commit->parents->item; + + next_tree = get_commit_tree(commit); + base_tree = get_commit_tree(base); + + merge_opt.branch2 = short_commit_name(commit); + merge_opt.ancestor = xstrfmt("parent of %s", merge_opt.branch2); + + merge_incore_nonrecursive(&merge_opt, + base_tree, + result.tree, + next_tree, + &result); + + free((char*)merge_opt.ancestor); + merge_opt.ancestor = NULL; + if (!result.clean) + die("Aborting: Hit a conflict and restarting is not implemented."); + last_picked_commit = commit; + last_commit = create_commit(result.tree, commit, last_commit); + } + fprintf(stderr, "\nDone.\n"); + /* TODO: There should be some kind of rev_info_free(&revs) call... */ + memset(&revs, 0, sizeof(revs)); + + merge_switch_to_result(&merge_opt, head_tree, &result, 1, !result.clean); + + if (result.clean < 0) + exit(128); + + strbuf_addf(&reflog_msg, "finish rebase %s onto %s", + oid_to_hex(&last_picked_commit->object.oid), + oid_to_hex(&last_commit->object.oid)); + if (update_ref(reflog_msg.buf, branch_name.buf, + &last_commit->object.oid, + &last_picked_commit->object.oid, + REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) { + error(_("could not update %s"), argv[4]); + die("Failed to update %s", argv[4]); + } + if (create_symref("HEAD", branch_name.buf, reflog_msg.buf) < 0) + die(_("unable to update HEAD")); + strbuf_release(&reflog_msg); + strbuf_release(&branch_name); + + prime_cache_tree(the_repository, the_repository->index, result.tree); + if (write_locked_index(&the_index, &lock, + COMMIT_LOCK | SKIP_IF_UNCHANGED)) + die(_("unable to write %s"), get_index_file()); + return (clean == 0); +} diff --git a/t/helper/test-hashmap.c b/t/helper/test-hashmap.c index f38706216f..36ff07bd4b 100644 --- a/t/helper/test-hashmap.c +++ b/t/helper/test-hashmap.c @@ -110,7 +110,7 @@ static void perf_hashmap(unsigned int method, unsigned int rounds) hashmap_add(&map, &entries[i]->ent); } - hashmap_free(&map); + hashmap_clear(&map); } } else { /* test map lookups */ @@ -130,7 +130,7 @@ static void perf_hashmap(unsigned int method, unsigned int rounds) } } - hashmap_free(&map); + hashmap_clear(&map); } } @@ -151,12 +151,11 @@ static void perf_hashmap(unsigned int method, unsigned int rounds) int cmd__hashmap(int argc, const char **argv) { struct strbuf line = STRBUF_INIT; - struct hashmap map; int icase; + struct hashmap map = HASHMAP_INIT(test_entry_cmp, &icase); /* init hash map */ icase = argc > 1 && !strcmp("ignorecase", argv[1]); - hashmap_init(&map, test_entry_cmp, &icase, 0); /* process commands from stdin */ while (strbuf_getline(&line, stdin) != EOF) { @@ -262,6 +261,6 @@ int cmd__hashmap(int argc, const char **argv) } strbuf_release(&line); - hashmap_free_entries(&map, struct test_entry, ent); + hashmap_clear_and_free(&map, struct test_entry, ent); return 0; } diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c index a0d3966b29..9d6d14d929 100644 --- a/t/helper/test-tool.c +++ b/t/helper/test-tool.c @@ -18,6 +18,7 @@ static struct test_cmd cmds[] = { { "bloom", cmd__bloom }, { "chmtime", cmd__chmtime }, { "config", cmd__config }, + { "crontab", cmd__crontab }, { "ctype", cmd__ctype }, { "date", cmd__date }, { "delta", cmd__delta }, @@ -28,6 +29,7 @@ static struct test_cmd cmds[] = { { "dump-split-index", cmd__dump_split_index }, { "dump-untracked-cache", cmd__dump_untracked_cache }, { "example-decorate", cmd__example_decorate }, + { "fast-rebase", cmd__fast_rebase }, { "genrandom", cmd__genrandom }, { "genzeros", cmd__genzeros }, { "hashmap", cmd__hashmap }, diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h index 07034d3f38..a6470ff62c 100644 --- a/t/helper/test-tool.h +++ b/t/helper/test-tool.h @@ -8,6 +8,7 @@ int cmd__advise_if_enabled(int argc, const char **argv); int cmd__bloom(int argc, const char **argv); int cmd__chmtime(int argc, const char **argv); int cmd__config(int argc, const char **argv); +int cmd__crontab(int argc, const char **argv); int cmd__ctype(int argc, const char **argv); int cmd__date(int argc, const char **argv); int cmd__delta(int argc, const char **argv); @@ -18,6 +19,7 @@ int cmd__dump_fsmonitor(int argc, const char **argv); int cmd__dump_split_index(int argc, const char **argv); int cmd__dump_untracked_cache(int argc, const char **argv); int cmd__example_decorate(int argc, const char **argv); +int cmd__fast_rebase(int argc, const char **argv); int cmd__genrandom(int argc, const char **argv); int cmd__genzeros(int argc, const char **argv); int cmd__hashmap(int argc, const char **argv); diff --git a/t/lib-merge.sh b/t/lib-merge.sh new file mode 100644 index 0000000000..8734ebfc17 --- /dev/null +++ b/t/lib-merge.sh @@ -0,0 +1,13 @@ +# Helper functions used by merge tests. + +test_expect_merge_algorithm () { + status_for_recursive=$1 status_for_ort=$2 + shift 2 + + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_expect_${status_for_ort} "$@" + else + test_expect_${status_for_recursive} "$@" + fi +} diff --git a/t/perf/p7519-fsmonitor.sh b/t/perf/p7519-fsmonitor.sh index fb20fe0937..163a13bea3 100755 --- a/t/perf/p7519-fsmonitor.sh +++ b/t/perf/p7519-fsmonitor.sh @@ -22,7 +22,9 @@ test_description="Test core.fsmonitor" # # GIT_PERF_7519_UNTRACKED_CACHE: used to configure core.untrackedCache # GIT_PERF_7519_SPLIT_INDEX: used to configure core.splitIndex -# GIT_PERF_7519_FSMONITOR: used to configure core.fsMonitor +# GIT_PERF_7519_FSMONITOR: used to configure core.fsMonitor. May be an +# absolute path to an integration. May be a space delimited list of +# absolute paths to integrations. # # The big win for using fsmonitor is the elimination of the need to scan the # working directory looking for changed and untracked files. If the file @@ -68,7 +70,7 @@ then fi fi -test_expect_success "setup for fsmonitor" ' +test_expect_success "one time repo setup" ' # set untrackedCache depending on the environment if test -n "$GIT_PERF_7519_UNTRACKED_CACHE" then @@ -88,24 +90,36 @@ test_expect_success "setup for fsmonitor" ' git config core.splitIndex "$GIT_PERF_7519_SPLIT_INDEX" fi && + mkdir 1_file 10_files 100_files 1000_files 10000_files && + for i in $(test_seq 1 10); do touch 10_files/$i; done && + for i in $(test_seq 1 100); do touch 100_files/$i; done && + for i in $(test_seq 1 1000); do touch 1000_files/$i; done && + for i in $(test_seq 1 10000); do touch 10000_files/$i; done && + git add 1_file 10_files 100_files 1000_files 10000_files && + git commit -qm "Add files" && + + # If Watchman exists, watch the work tree and attempt a query. + if test_have_prereq WATCHMAN; then + watchman watch "$GIT_WORK_TREE" && + watchman watch-list | grep -q -F "$GIT_WORK_TREE" + fi +' + +setup_for_fsmonitor() { # set INTEGRATION_SCRIPT depending on the environment - if test -n "$GIT_PERF_7519_FSMONITOR" + if test -n "$INTEGRATION_PATH" then - INTEGRATION_SCRIPT="$GIT_PERF_7519_FSMONITOR" + INTEGRATION_SCRIPT="$INTEGRATION_PATH" else # # Choose integration script based on existence of Watchman. - # If Watchman exists, watch the work tree and attempt a query. - # If everything succeeds, use Watchman integration script, - # else fall back to an empty integration script. + # Fall back to an empty integration script. # mkdir .git/hooks && if test_have_prereq WATCHMAN then INTEGRATION_SCRIPT=".git/hooks/fsmonitor-watchman" && - cp "$TEST_DIRECTORY/../templates/hooks--fsmonitor-watchman.sample" "$INTEGRATION_SCRIPT" && - watchman watch "$GIT_WORK_TREE" && - watchman watch-list | grep -q -F "$GIT_WORK_TREE" + cp "$TEST_DIRECTORY/../templates/hooks--fsmonitor-watchman.sample" "$INTEGRATION_SCRIPT" else INTEGRATION_SCRIPT=".git/hooks/fsmonitor-empty" && write_script "$INTEGRATION_SCRIPT"<<-\EOF @@ -114,16 +128,10 @@ test_expect_success "setup for fsmonitor" ' fi && git config core.fsmonitor "$INTEGRATION_SCRIPT" && - git update-index --fsmonitor && - mkdir 1_file 10_files 100_files 1000_files 10000_files && - for i in $(test_seq 1 10); do touch 10_files/$i; done && - for i in $(test_seq 1 100); do touch 100_files/$i; done && - for i in $(test_seq 1 1000); do touch 1000_files/$i; done && - for i in $(test_seq 1 10000); do touch 10000_files/$i; done && - git add 1_file 10_files 100_files 1000_files 10000_files && - git commit -m "Add files" && - git status # Warm caches -' + git update-index --fsmonitor 2>error && + cat error && + [ ! -s error ] # ensure no silent error +} test_perf_w_drop_caches () { if test -n "$GIT_PERF_7519_DROP_CACHE"; then @@ -134,48 +142,72 @@ test_perf_w_drop_caches () { } test_fsmonitor_suite() { - test_perf_w_drop_caches "status (fsmonitor=$INTEGRATION_SCRIPT)" ' + if test -n "$INTEGRATION_SCRIPT"; then + DESC="fsmonitor=$(basename $INTEGRATION_SCRIPT)" + else + DESC="fsmonitor=disabled" + fi + + test_expect_success "test_initialization" ' + git reset --hard && + git status # Warm caches + ' + + test_perf_w_drop_caches "status ($DESC)" ' git status ' - test_perf_w_drop_caches "status -uno (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "status -uno ($DESC)" ' git status -uno ' - test_perf_w_drop_caches "status -uall (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "status -uall ($DESC)" ' git status -uall ' - test_perf_w_drop_caches "diff (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "status (dirty) ($DESC)" ' + git ls-files | head -100000 | xargs -d "\n" touch -h && + git status + ' + + test_perf_w_drop_caches "diff ($DESC)" ' git diff ' - test_perf_w_drop_caches "diff -- 0_files (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "diff -- 0_files ($DESC)" ' git diff -- 1_file ' - test_perf_w_drop_caches "diff -- 10_files (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "diff -- 10_files ($DESC)" ' git diff -- 10_files ' - test_perf_w_drop_caches "diff -- 100_files (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "diff -- 100_files ($DESC)" ' git diff -- 100_files ' - test_perf_w_drop_caches "diff -- 1000_files (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "diff -- 1000_files ($DESC)" ' git diff -- 1000_files ' - test_perf_w_drop_caches "diff -- 10000_files (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "diff -- 10000_files ($DESC)" ' git diff -- 10000_files ' - test_perf_w_drop_caches "add (fsmonitor=$INTEGRATION_SCRIPT)" ' + test_perf_w_drop_caches "add ($DESC)" ' git add --all ' } -test_fsmonitor_suite +if test -n "$GIT_PERF_7519_FSMONITOR"; then + for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do + test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor' + test_fsmonitor_suite + done +else + test_expect_success "setup for fsmonitor" 'setup_for_fsmonitor' + test_fsmonitor_suite +fi test_expect_success "setup without fsmonitor" ' unset INTEGRATION_SCRIPT && diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh index 4bfffa9c31..f6deaf498b 100755 --- a/t/t0021-conversion.sh +++ b/t/t0021-conversion.sh @@ -23,10 +23,6 @@ generate_random_characters () { perl -pe "s/./chr((ord($&) % 26) + ord('a'))/sge" >"$TEST_ROOT/$NAME" } -file_size () { - test-tool path-utils file-size "$1" -} - filter_git () { rm -f *.log && git "$@" @@ -361,9 +357,9 @@ test_expect_success PERL 'required process filter should filter data' ' cp "$TEST_ROOT/test3 '\''sq'\'',\$x=.o" "testsubdir/test3 '\''sq'\'',\$x=.r" && >test4-empty.r && - S=$(file_size test.r) && - S2=$(file_size test2.r) && - S3=$(file_size "testsubdir/test3 '\''sq'\'',\$x=.r") && + S=$(test_file_size test.r) && + S2=$(test_file_size test2.r) && + S3=$(test_file_size "testsubdir/test3 '\''sq'\'',\$x=.r") && M=$(git hash-object test.r) && M2=$(git hash-object test2.r) && M3=$(git hash-object "testsubdir/test3 '\''sq'\'',\$x=.r") && @@ -432,9 +428,9 @@ test_expect_success PERL 'required process filter should filter data for various ( cd repo && - S=$(file_size test.r) && - S2=$(file_size test2.r) && - S3=$(file_size "testsubdir/test3 '\''sq'\'',\$x=.r") && + S=$(test_file_size test.r) && + S2=$(test_file_size test2.r) && + S3=$(test_file_size "testsubdir/test3 '\''sq'\'',\$x=.r") && M=$(git hash-object test.r) && M2=$(git hash-object test2.r) && M3=$(git hash-object "testsubdir/test3 '\''sq'\'',\$x=.r") && @@ -549,7 +545,7 @@ test_expect_success PERL 'required process filter takes precedence' ' echo "*.r filter=protocol" >.gitattributes && cp "$TEST_ROOT/test.o" test.r && - S=$(file_size test.r) && + S=$(test_file_size test.r) && # Check that the process filter is invoked here filter_git add . && @@ -573,7 +569,7 @@ test_expect_success PERL 'required process filter should be used only for "clean echo "*.r filter=protocol" >.gitattributes && cp "$TEST_ROOT/test.o" test.r && - S=$(file_size test.r) && + S=$(test_file_size test.r) && filter_git add . && cat >expected.log <<-EOF && @@ -697,9 +693,9 @@ test_expect_success PERL 'process filter should restart after unexpected write f echo "this is going to fail" >smudge-write-fail.o && cp smudge-write-fail.o smudge-write-fail.r && - S=$(file_size test.r) && - S2=$(file_size test2.r) && - SF=$(file_size smudge-write-fail.r) && + S=$(test_file_size test.r) && + S2=$(test_file_size test2.r) && + SF=$(test_file_size smudge-write-fail.r) && M=$(git hash-object test.r) && M2=$(git hash-object test2.r) && MF=$(git hash-object smudge-write-fail.r) && @@ -752,9 +748,9 @@ test_expect_success PERL 'process filter should not be restarted if it signals a echo "this will cause an error" >error.o && cp error.o error.r && - S=$(file_size test.r) && - S2=$(file_size test2.r) && - SE=$(file_size error.r) && + S=$(test_file_size test.r) && + S2=$(test_file_size test2.r) && + SE=$(test_file_size error.r) && M=$(git hash-object test.r) && M2=$(git hash-object test2.r) && ME=$(git hash-object error.r) && @@ -797,7 +793,7 @@ test_expect_success PERL 'process filter abort stops processing of all further f M="blob=$(git hash-object abort.r)" && rm -f debug.log && - SA=$(file_size abort.r) && + SA=$(test_file_size abort.r) && git add . && rm -f *.r && @@ -859,7 +855,7 @@ test_expect_success PERL 'delayed checkout in process filter' ' git commit -m "test commit" ) && - S=$(file_size "$TEST_ROOT/test.o") && + S=$(test_file_size "$TEST_ROOT/test.o") && PM="ref=refs/heads/master treeish=$(git -C repo rev-parse --verify master) " && M="${PM}blob=$(git -C repo rev-parse --verify master:test.a)" && cat >a.exp <<-EOF && diff --git a/t/t0068-for-each-repo.sh b/t/t0068-for-each-repo.sh new file mode 100755 index 0000000000..136b4ec839 --- /dev/null +++ b/t/t0068-for-each-repo.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +test_description='git for-each-repo builtin' + +. ./test-lib.sh + +test_expect_success 'run based on configured value' ' + git init one && + git init two && + git init three && + git -C two commit --allow-empty -m "DID NOT RUN" && + git config run.key "$TRASH_DIRECTORY/one" && + git config --add run.key "$TRASH_DIRECTORY/three" && + git for-each-repo --config=run.key commit --allow-empty -m "ran" && + git -C one log -1 --pretty=format:%s >message && + grep ran message && + git -C two log -1 --pretty=format:%s >message && + ! grep ran message && + git -C three log -1 --pretty=format:%s >message && + grep ran message && + git for-each-repo --config=run.key -- commit --allow-empty -m "ran again" && + git -C one log -1 --pretty=format:%s >message && + grep again message && + git -C two log -1 --pretty=format:%s >message && + ! grep again message && + git -C three log -1 --pretty=format:%s >message && + grep again message +' + +test_done diff --git a/t/t1004-read-tree-m-u-wf.sh b/t/t1004-read-tree-m-u-wf.sh index c13578a635..181956b241 100755 --- a/t/t1004-read-tree-m-u-wf.sh +++ b/t/t1004-read-tree-m-u-wf.sh @@ -20,7 +20,7 @@ test_expect_success 'two-way setup' ' git branch side && git tag -f branch-point && - echo file2 is not tracked on the master anymore && + echo file2 is not tracked on the master branch anymore && rm -f file2 subdir/file2 && git update-index --remove file2 subdir/file2 && git commit -a -m "master removes file2 and subdir/file2" diff --git a/t/t1050-large.sh b/t/t1050-large.sh index 61e89a8071..4bab6a513c 100755 --- a/t/t1050-large.sh +++ b/t/t1050-large.sh @@ -5,12 +5,6 @@ test_description='adding and checking out large blobs' . ./test-lib.sh -# This should be moved to test-lib.sh together with the -# copy in t0021 after both topics have graduated to 'master'. -file_size () { - test-tool path-utils file-size "$1" -} - test_expect_success setup ' # clone does not allow us to pass core.bigfilethreshold to # new repos, so set core.bigfilethreshold globally @@ -29,7 +23,7 @@ do test_expect_success "add with $config" ' test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" && git $config add large1 && - sz=$(file_size .git/objects/pack/pack-*.pack) && + sz=$(test_file_size .git/objects/pack/pack-*.pack) && case "$expect" in small) test "$sz" -le 100000 ;; large) test "$sz" -ge 100000 ;; diff --git a/t/t1503-rev-parse-verify.sh b/t/t1503-rev-parse-verify.sh index 492edffa9c..dc9fe3cbf1 100755 --- a/t/t1503-rev-parse-verify.sh +++ b/t/t1503-rev-parse-verify.sh @@ -144,4 +144,17 @@ test_expect_success SYMLINKS 'ref resolution not confused by broken symlinks' ' test_must_fail git rev-parse --verify broken ' +test_expect_success 'options can appear after --verify' ' + git rev-parse --verify HEAD >expect && + git rev-parse --verify -q HEAD >actual && + test_cmp expect actual +' + +test_expect_success 'verify respects --end-of-options' ' + git update-ref refs/heads/-tricky HEAD && + git rev-parse --verify HEAD >expect && + git rev-parse --verify --end-of-options -tricky >actual && + test_cmp expect actual +' + test_done diff --git a/t/t1506-rev-parse-diagnosis.sh b/t/t1506-rev-parse-diagnosis.sh index 3e657e693b..e2ae15a2cf 100755 --- a/t/t1506-rev-parse-diagnosis.sh +++ b/t/t1506-rev-parse-diagnosis.sh @@ -254,4 +254,29 @@ test_expect_success 'escaped char does not trigger wildcard rule' ' test_must_fail git rev-parse "foo\\*bar" ' +test_expect_success 'arg after dashdash not interpreted as option' ' + cat >expect <<-\EOF && + -- + --local-env-vars + EOF + git rev-parse -- --local-env-vars >actual && + test_cmp expect actual +' + +test_expect_success 'arg after end-of-options not interpreted as option' ' + test_must_fail git rev-parse --end-of-options --not-real -- 2>err && + test_i18ngrep bad.revision.*--not-real err +' + +test_expect_success 'end-of-options still allows --' ' + cat >expect <<-EOF && + --end-of-options + $(git rev-parse --verify HEAD) + -- + path + EOF + git rev-parse --end-of-options HEAD -- path >actual && + test_cmp expect actual +' + test_done diff --git a/t/t2402-worktree-list.sh b/t/t2402-worktree-list.sh index b85bd2655d..795ddca2e4 100755 --- a/t/t2402-worktree-list.sh +++ b/t/t2402-worktree-list.sh @@ -61,7 +61,7 @@ test_expect_success '"list" all worktrees --porcelain' ' test_cmp expect actual ' -test_expect_success '"list" all worktress with locked annotation' ' +test_expect_success '"list" all worktrees with locked annotation' ' test_when_finished "rm -rf locked unlocked out && git worktree prune" && git worktree add --detach locked master && git worktree add --detach unlocked master && diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 07a1617351..1e56696e4f 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -1797,6 +1797,17 @@ test_expect_success 'todo has correct onto hash' ' test_i18ngrep "^# Rebase ..* onto $onto" actual ' +test_expect_success 'ORIG_HEAD is updated correctly' ' + test_when_finished "git checkout master && git branch -D test-orig-head" && + git checkout -b test-orig-head A && + git commit --allow-empty -m A1 && + git commit --allow-empty -m A2 && + git commit --allow-empty -m A3 && + git commit --allow-empty -m A4 && + git rebase master && + test_cmp_rev ORIG_HEAD test-orig-head@{1} +' + # This must be the last test in this file test_expect_success '$EDITOR and friends are unchanged' ' test_editor_unchanged diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh index 927a4f4a4e..4afc528165 100755 --- a/t/t3406-rebase-message.sh +++ b/t/t3406-rebase-message.sh @@ -46,22 +46,22 @@ test_expect_success 'rebase fast-forward to master' ' test_expect_success 'rebase --stat' ' git reset --hard start && - git rebase --stat master >diffstat.txt && - grep "^ fileX | *1 +$" diffstat.txt + git rebase --stat master >diffstat.txt && + grep "^ fileX | *1 +$" diffstat.txt ' test_expect_success 'rebase w/config rebase.stat' ' git reset --hard start && - git config rebase.stat true && - git rebase master >diffstat.txt && - grep "^ fileX | *1 +$" diffstat.txt + git config rebase.stat true && + git rebase master >diffstat.txt && + grep "^ fileX | *1 +$" diffstat.txt ' test_expect_success 'rebase -n overrides config rebase.stat config' ' git reset --hard start && - git config rebase.stat true && - git rebase -n master >diffstat.txt && - ! grep "^ fileX | *1 +$" diffstat.txt + git config rebase.stat true && + git rebase -n master >diffstat.txt && + ! grep "^ fileX | *1 +$" diffstat.txt ' # Output to stderr: diff --git a/t/t3427-rebase-subtree.sh b/t/t3427-rebase-subtree.sh index 2a7d958ea7..5839719ba1 100755 --- a/t/t3427-rebase-subtree.sh +++ b/t/t3427-rebase-subtree.sh @@ -19,7 +19,7 @@ commit_message() { # \ # README ---------------------- Add subproject master - topic_4 - files_subtree/topic_5 # -# Where the merge moves the files master[123].t into the subdirectory +# Where the merge moves the files topic_[123].t into the subdirectory # files_subtree/ and topic_4 as well as files_subtree/topic_5 add files to that # directory directly. # diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index 294e76c860..c5e5e0da3f 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -313,6 +313,60 @@ test_expect_success 'multiple files' ' ls patches/0001-Side-changes-1.patch patches/0002-Side-changes-2.patch patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch ' +test_expect_success 'filename length limit' ' + test_when_finished "rm -f 000*" && + rm -rf 000[1-9]-*.patch && + for len in 15 25 35 + do + git format-patch --filename-max-length=$len -3 side && + max=$( + for patch in 000[1-9]-*.patch + do + echo "$patch" | wc -c + done | + sort -nr | + head -n 1 + ) && + test $max -le $len || return 1 + done +' + +test_expect_success 'filename length limit from config' ' + test_when_finished "rm -f 000*" && + rm -rf 000[1-9]-*.patch && + for len in 15 25 35 + do + git -c format.filenameMaxLength=$len format-patch -3 side && + max=$( + for patch in 000[1-9]-*.patch + do + echo "$patch" | wc -c + done | + sort -nr | + head -n 1 + ) && + test $max -le $len || return 1 + done +' + +test_expect_success 'filename limit applies only to basename' ' + test_when_finished "rm -rf patches/" && + rm -rf patches/ && + for len in 15 25 35 + do + git format-patch -o patches --filename-max-length=$len -3 side && + max=$( + for patch in patches/000[1-9]-*.patch + do + echo "${patch#patches/}" | wc -c + done | + sort -nr | + head -n 1 + ) && + test $max -le $len || return 1 + done +' + test_expect_success 'reroll count' ' rm -fr patches && git format-patch -o patches --cover-letter --reroll-count 4 master..side >list && @@ -1919,6 +1973,39 @@ test_expect_success 'format-patch -o overrides format.outputDirectory' ' test_path_is_dir patchset ' +test_expect_success 'format-patch forbids multiple outputs' ' + rm -fr outfile outdir && + test_must_fail \ + git format-patch --stdout --output-directory=outdir && + test_must_fail \ + git format-patch --stdout --output=outfile && + test_must_fail \ + git format-patch --output=outfile --output-directory=outdir +' + +test_expect_success 'configured outdir does not conflict with output options' ' + rm -fr outfile outdir && + test_config format.outputDirectory outdir && + git format-patch --stdout && + test_path_is_missing outdir && + git format-patch --output=outfile && + test_path_is_missing outdir +' + +test_expect_success 'format-patch --output' ' + rm -fr outfile && + git format-patch -3 --stdout HEAD >expect && + git format-patch -3 --output=outfile HEAD && + test_cmp expect outfile +' + +test_expect_success 'format-patch --cover-letter --output' ' + rm -fr outfile && + git format-patch --cover-letter -3 --stdout HEAD >expect && + git format-patch --cover-letter -3 --output=outfile HEAD && + test_cmp expect outfile +' + test_expect_success 'format-patch --base' ' git checkout patchid && diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh index 2d1d7b5d19..85d151423d 100755 --- a/t/t4211-line-log.sh +++ b/t/t4211-line-log.sh @@ -8,6 +8,28 @@ test_expect_success 'setup (import history)' ' git reset --hard ' +test_expect_success 'basic command line parsing' ' + # This may fail due to "no such path a.c in commit", or + # "-L is incompatible with pathspec", depending on the + # order the error is checked. Either is acceptable. + test_must_fail git log -L1,1:a.c -- a.c && + + # -L requires there is no pathspec + test_must_fail git log -L1,1:b.c -- b.c 2>error && + test_i18ngrep "cannot be used with pathspec" error && + + # This would fail because --follow wants a single path, but + # we may fail due to incompatibility between -L/--follow in + # the future. Either is acceptable. + test_must_fail git log -L1,1:b.c --follow && + test_must_fail git log --follow -L1,1:b.c && + + # This would fail because -L wants no pathspec, but + # we may fail due to incompatibility between -L/--follow in + # the future. Either is acceptable. + test_must_fail git log --follow -L1,1:b.c -- b.c +' + canned_test_1 () { test_expect_$1 "$2" " git log $2 >actual && diff --git a/t/t5315-pack-objects-compression.sh b/t/t5315-pack-objects-compression.sh index df970d7584..8bacd96275 100755 --- a/t/t5315-pack-objects-compression.sh +++ b/t/t5315-pack-objects-compression.sh @@ -4,12 +4,6 @@ test_description='pack-object compression configuration' . ./test-lib.sh -# This should be moved to test-lib.sh together with the -# copy in t0021 after both topics have graduated to 'master'. -file_size () { - test-tool path-utils file-size "$1" -} - test_expect_success setup ' printf "%2000000s" X | git hash-object -w --stdin >object-name && @@ -24,7 +18,7 @@ do test_expect_success "pack-objects with $config" ' test_when_finished "rm -f pack-*.*" && git $config pack-objects pack <object-name && - sz=$(file_size pack-*.pack) && + sz=$(test_file_size pack-*.pack) && case "$expect" in small) test "$sz" -le 100000 ;; large) test "$sz" -ge 100000 ;; diff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh index b84618c925..cc86ef213e 100755 --- a/t/t5400-send-pack.sh +++ b/t/t5400-send-pack.sh @@ -21,14 +21,15 @@ test_expect_success setup ' i=0 && while test $i -le $cnt do - i=$(($i+1)) && - test_tick && - echo "Commit #$i" >mozart/is/pink && - git update-index --add mozart/is/pink && - tree=$(git write-tree) && - commit=$(echo "Commit #$i" | git commit-tree $tree -p $parent) && - git update-ref refs/tags/commit$i $commit && - parent=$commit || return 1 + i=$(($i+1)) && + test_tick && + echo "Commit #$i" >mozart/is/pink && + git update-index --add mozart/is/pink && + tree=$(git write-tree) && + commit=$(echo "Commit #$i" | + git commit-tree $tree -p $parent) && + git update-ref refs/tags/commit$i $commit && + parent=$commit || return 1 done && git update-ref HEAD "$commit" && git clone ./. victim && @@ -38,14 +39,14 @@ test_expect_success setup ' i=0 && while test $i -le $cnt do - i=$(($i+1)) && - test_tick && - echo "Rebase #$i" >mozart/is/pink && - git update-index --add mozart/is/pink && - tree=$(git write-tree) && - commit=$(echo "Rebase #$i" | git commit-tree $tree -p $parent) && - git update-ref refs/tags/rebase$i $commit && - parent=$commit || return 1 + i=$(($i+1)) && + test_tick && + echo "Rebase #$i" >mozart/is/pink && + git update-index --add mozart/is/pink && + tree=$(git write-tree) && + commit=$(echo "Rebase #$i" | git commit-tree $tree -p $parent) && + git update-ref refs/tags/rebase$i $commit && + parent=$commit || return 1 done && git update-ref HEAD "$commit" && echo Rebase && @@ -57,11 +58,11 @@ test_expect_success 'pack the source repository' ' ' test_expect_success 'pack the destination repository' ' - ( - cd victim && - git repack -a -d && - git prune - ) + ( + cd victim && + git repack -a -d && + git prune + ) ' test_expect_success 'refuse pushing rewound head without --force' ' @@ -85,10 +86,10 @@ test_expect_success 'push can be used to delete a ref' ' test_expect_success 'refuse deleting push with denyDeletes' ' ( - cd victim && - test_might_fail git branch -D extra && - git config receive.denyDeletes true && - git branch extra master + cd victim && + test_might_fail git branch -D extra && + git config receive.denyDeletes true && + git branch extra master ) && test_must_fail git send-pack ./victim :extra master ' @@ -118,9 +119,9 @@ test_expect_success 'override denyDeletes with git -c receive-pack' ' test_expect_success 'denyNonFastforwards trumps --force' ' ( - cd victim && - test_might_fail git branch -D extra && - git config receive.denyNonFastforwards true + cd victim && + test_might_fail git branch -D extra && + git config receive.denyNonFastforwards true ) && victim_orig=$(cd victim && git rev-parse --verify master) && test_must_fail git send-pack --force ./victim master^:master && @@ -143,16 +144,16 @@ test_expect_success 'send-pack --all sends all branches' ' test_expect_success 'push --all excludes remote-tracking hierarchy' ' mkdir parent && ( - cd parent && - git init && : >file && git add file && git commit -m add + cd parent && + git init && : >file && git add file && git commit -m add ) && git clone parent child && ( - cd child && git push --all + cd child && git push --all ) && ( - cd parent && - test -z "$(git for-each-ref refs/remotes/origin)" + cd parent && + test -z "$(git for-each-ref refs/remotes/origin)" ) ' @@ -160,33 +161,33 @@ test_expect_success 'receive-pack runs auto-gc in remote repo' ' rm -rf parent child && git init parent && ( - # Setup a repo with 2 packs - cd parent && - echo "Some text" >file.txt && - git add . && - git commit -m "Initial commit" && - git repack -adl && - echo "Some more text" >>file.txt && - git commit -a -m "Second commit" && - git repack + # Setup a repo with 2 packs + cd parent && + echo "Some text" >file.txt && + git add . && + git commit -m "Initial commit" && + git repack -adl && + echo "Some more text" >>file.txt && + git commit -a -m "Second commit" && + git repack ) && cp -R parent child && ( - # Set the child to auto-pack if more than one pack exists - cd child && - git config gc.autopacklimit 1 && - git config gc.autodetach false && - git branch test_auto_gc && - # And create a file that follows the temporary object naming - # convention for the auto-gc to remove - : >.git/objects/tmp_test_object && - test-tool chmtime =-1209601 .git/objects/tmp_test_object + # Set the child to auto-pack if more than one pack exists + cd child && + git config gc.autopacklimit 1 && + git config gc.autodetach false && + git branch test_auto_gc && + # And create a file that follows the temporary object naming + # convention for the auto-gc to remove + : >.git/objects/tmp_test_object && + test-tool chmtime =-1209601 .git/objects/tmp_test_object ) && ( - cd parent && - echo "Even more text" >>file.txt && - git commit -a -m "Third commit" && - git send-pack ../child HEAD:refs/heads/test_auto_gc + cd parent && + echo "Even more text" >>file.txt && + git commit -a -m "Third commit" && + git send-pack ../child HEAD:refs/heads/test_auto_gc ) && test ! -e child/.git/objects/tmp_test_object ' @@ -195,15 +196,15 @@ rewound_push_setup() { rm -rf parent child && mkdir parent && ( - cd parent && - git init && - echo one >file && git add file && git commit -m one && - git config receive.denyCurrentBranch warn && - echo two >file && git commit -a -m two + cd parent && + git init && + echo one >file && git add file && git commit -m one && + git config receive.denyCurrentBranch warn && + echo two >file && git commit -a -m two ) && git clone parent child && ( - cd child && git reset --hard HEAD^ + cd child && git reset --hard HEAD^ ) } @@ -211,16 +212,16 @@ test_expect_success 'pushing explicit refspecs respects forcing' ' rewound_push_setup && parent_orig=$(cd parent && git rev-parse --verify master) && ( - cd child && - test_must_fail git send-pack ../parent \ - refs/heads/master:refs/heads/master + cd child && + test_must_fail git send-pack ../parent \ + refs/heads/master:refs/heads/master ) && parent_head=$(cd parent && git rev-parse --verify master) && test "$parent_orig" = "$parent_head" && ( - cd child && - git send-pack ../parent \ - +refs/heads/master:refs/heads/master + cd child && + git send-pack ../parent \ + +refs/heads/master:refs/heads/master ) && parent_head=$(cd parent && git rev-parse --verify master) && child_head=$(cd child && git rev-parse --verify master) && @@ -231,16 +232,16 @@ test_expect_success 'pushing wildcard refspecs respects forcing' ' rewound_push_setup && parent_orig=$(cd parent && git rev-parse --verify master) && ( - cd child && - test_must_fail git send-pack ../parent \ - "refs/heads/*:refs/heads/*" + cd child && + test_must_fail git send-pack ../parent \ + "refs/heads/*:refs/heads/*" ) && parent_head=$(cd parent && git rev-parse --verify master) && test "$parent_orig" = "$parent_head" && ( - cd child && - git send-pack ../parent \ - "+refs/heads/*:refs/heads/*" + cd child && + git send-pack ../parent \ + "+refs/heads/*:refs/heads/*" ) && parent_head=$(cd parent && git rev-parse --verify master) && child_head=$(cd child && git rev-parse --verify master) && @@ -250,8 +251,8 @@ test_expect_success 'pushing wildcard refspecs respects forcing' ' test_expect_success 'deny pushing to delete current branch' ' rewound_push_setup && ( - cd child && - test_must_fail git send-pack ../parent :refs/heads/master 2>errs + cd child && + test_must_fail git send-pack ../parent :refs/heads/master 2>errs ) ' @@ -289,7 +290,7 @@ test_expect_success 'receive-pack de-dupes .have lines' ' EOF GIT_TRACE_PACKET=$(pwd)/trace GIT_TEST_PROTOCOL_VERSION=0 \ - git push \ + git push \ --receive-pack="unset GIT_TRACE_PACKET; git-receive-pack" \ fork HEAD:foo && extract_ref_advertisement <trace >refs && diff --git a/t/t5402-post-merge-hook.sh b/t/t5402-post-merge-hook.sh index 6eb2ffd6ec..4aeea8f5b7 100755 --- a/t/t5402-post-merge-hook.sh +++ b/t/t5402-post-merge-hook.sh @@ -15,7 +15,7 @@ test_expect_success setup ' git update-index a && tree1=$(git write-tree) && commit1=$(echo modify | git commit-tree $tree1 -p $commit0) && - git update-ref refs/heads/master $commit0 && + git update-ref refs/heads/master $commit0 && git clone ./. clone1 && GIT_DIR=clone1/.git git update-index --add a && git clone ./. clone2 && @@ -23,34 +23,34 @@ test_expect_success setup ' ' for clone in 1 2; do - cat >clone${clone}/.git/hooks/post-merge <<'EOF' + cat >clone${clone}/.git/hooks/post-merge <<'EOF' #!/bin/sh echo $@ >> $GIT_DIR/post-merge.args EOF - chmod u+x clone${clone}/.git/hooks/post-merge + chmod u+x clone${clone}/.git/hooks/post-merge done test_expect_success 'post-merge does not run for up-to-date ' ' - GIT_DIR=clone1/.git git merge $commit0 && + GIT_DIR=clone1/.git git merge $commit0 && ! test -f clone1/.git/post-merge.args ' test_expect_success 'post-merge runs as expected ' ' - GIT_DIR=clone1/.git git merge $commit1 && + GIT_DIR=clone1/.git git merge $commit1 && test -e clone1/.git/post-merge.args ' test_expect_success 'post-merge from normal merge receives the right argument ' ' - grep 0 clone1/.git/post-merge.args + grep 0 clone1/.git/post-merge.args ' test_expect_success 'post-merge from squash merge runs as expected ' ' - GIT_DIR=clone2/.git git merge --squash $commit1 && + GIT_DIR=clone2/.git git merge --squash $commit1 && test -e clone2/.git/post-merge.args ' test_expect_success 'post-merge from squash merge receives the right argument ' ' - grep 1 clone2/.git/post-merge.args + grep 1 clone2/.git/post-merge.args ' test_done diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh index 70a9d2d8ab..50f14101c5 100755 --- a/t/t5515-fetch-merge-logic.sh +++ b/t/t5515-fetch-merge-logic.sh @@ -11,11 +11,14 @@ test_description='Merge logic in fetch' GIT_TEST_PROTOCOL_VERSION=0 export GIT_TEST_PROTOCOL_VERSION +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + . ./test-lib.sh build_script () { script="$1" && - for i in one three_file master topic_2 one_tree three two two2 three2 + for i in one three_file main topic_2 one_tree three two two2 three2 do echo "s/$(test_oid --hash=sha1 "$i")/$(test_oid "$i")/g" >>"$script" done @@ -40,8 +43,8 @@ test_expect_success setup ' three_file sha1:0e3b14047d3ee365f4f2a1b673db059c3972589c three_file sha256:bc4447d50c07497a8bfe6eef817f2364ecca9d471452e43b52756cc1a908bd32 - master sha1:6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 - master sha256:8521c3072461fcfe8f32d67f95cc6e6b832a2db2fa29769ffc788bce85ebcd75 + main sha1:ecf3b3627b498bdcb735cc4343bf165f76964e9a + main sha256:fff666109892bb4b1c80cd1649d2d8762a0663db8b5d46c8be98360b64fbba5f one_tree sha1:22feea448b023a2d864ef94b013735af34d238ba one_tree sha256:6e4743f4ef2356b881dda5e91f5c7cdffe870faf350bf7b312f80a20935f5d83 @@ -52,8 +55,8 @@ test_expect_success setup ' two sha1:525b7fb068d59950d185a8779dc957c77eed73ba two sha256:3b21de3440cd38c2a9e9b464adb923f7054949ed4c918e1a0ac4c95cd52774db - topic_2 sha1:754b754407bf032e9a2f9d5a9ad05ca79a6b228f - topic_2 sha256:6c7abaea8a6d8ef4d89877e68462758dc6774690fbbbb0e6d7dd57415c9abde0 + topic_2 sha1:b4ab76b1a01ea602209932134a44f1e6bd610832 + topic_2 sha256:380ebae0113f877ce46fcdf39d5bc33e4dc0928db5c5a4d5fdc78381c4d55ae3 two2 sha1:6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 two2 sha256:87a2d3ee29c83a3dc7afd41c0606b11f67603120b910a7be7840accdc18344d4 @@ -80,9 +83,9 @@ test_expect_success setup ' git tag -a -m "Tag Three file" tag-three-file HEAD^{tree}:file && git branch three && - echo master >> file && - git commit -a -m Master && - git tag -a -m "Tag Master" tag-master && + echo main >> file && + git commit -a -m Main && + git tag -a -m "Tag Main" tag-main && git checkout three && @@ -91,7 +94,7 @@ test_expect_success setup ' git config remote.origin.url ../.git/ && git config remote.config-explicit.url ../.git/ && - git config remote.config-explicit.fetch refs/heads/master:remotes/rem/master && + git config remote.config-explicit.fetch refs/heads/main:remotes/rem/main && git config --add remote.config-explicit.fetch refs/heads/one:remotes/rem/one && git config --add remote.config-explicit.fetch two:remotes/rem/two && git config --add remote.config-explicit.fetch refs/heads/three:remotes/rem/three && @@ -104,7 +107,7 @@ test_expect_success setup ' mkdir -p .git/remotes && { echo "URL: ../.git/" - echo "Pull: refs/heads/master:remotes/rem/master" + echo "Pull: refs/heads/main:remotes/rem/main" echo "Pull: refs/heads/one:remotes/rem/one" echo "Pull: two:remotes/rem/two" echo "Pull: refs/heads/three:remotes/rem/three" @@ -149,7 +152,7 @@ done > tests # but does depend on Pull: or fetch lines. # Use two branches completely unrelated from the arguments, # the clone default and one without branch properties -for branch in master br-unconfig ; do +for branch in main br-unconfig ; do echo $branch for remote in $remotes ; do echo $branch $remote @@ -158,7 +161,7 @@ done >> tests # Merge logic does not depend on branch properties # neither in the Pull: or .fetch config -for branch in master br-unconfig ; do +for branch in main br-unconfig ; do cat <<EOF $branch ../.git $branch ../.git one diff --git a/t/t5515/fetch.br-branches-default b/t/t5515/fetch.br-branches-default index a1bc3d53a6..0bed09cc12 100644 --- a/t/t5515/fetch.br-branches-default +++ b/t/t5515/fetch.br-branches-default @@ -1,6 +1,6 @@ # br-branches-default -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-default-merge b/t/t5515/fetch.br-branches-default-merge index 12ab08e8ac..59eef63527 100644 --- a/t/t5515/fetch.br-branches-default-merge +++ b/t/t5515/fetch.br-branches-default-merge @@ -1,7 +1,7 @@ # br-branches-default-merge 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-default-merge_branches-default b/t/t5515/fetch.br-branches-default-merge_branches-default index 54427522dd..490186c158 100644 --- a/t/t5515/fetch.br-branches-default-merge_branches-default +++ b/t/t5515/fetch.br-branches-default-merge_branches-default @@ -1,7 +1,7 @@ # br-branches-default-merge branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-default-octopus b/t/t5515/fetch.br-branches-default-octopus index 498a761aae..d484138c27 100644 --- a/t/t5515/fetch.br-branches-default-octopus +++ b/t/t5515/fetch.br-branches-default-octopus @@ -1,8 +1,8 @@ # br-branches-default-octopus 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-default-octopus_branches-default b/t/t5515/fetch.br-branches-default-octopus_branches-default index 0857f134e1..b79a5fe2c3 100644 --- a/t/t5515/fetch.br-branches-default-octopus_branches-default +++ b/t/t5515/fetch.br-branches-default-octopus_branches-default @@ -1,8 +1,8 @@ # br-branches-default-octopus branches-default 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-default_branches-default b/t/t5515/fetch.br-branches-default_branches-default index 8cbd718936..1c866d85e6 100644 --- a/t/t5515/fetch.br-branches-default_branches-default +++ b/t/t5515/fetch.br-branches-default_branches-default @@ -1,6 +1,6 @@ # br-branches-default branches-default -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-one b/t/t5515/fetch.br-branches-one index c98f670526..6925a775b6 100644 --- a/t/t5515/fetch.br-branches-one +++ b/t/t5515/fetch.br-branches-one @@ -1,6 +1,6 @@ # br-branches-one 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-one-merge b/t/t5515/fetch.br-branches-one-merge index 54a77420d5..85257031ce 100644 --- a/t/t5515/fetch.br-branches-one-merge +++ b/t/t5515/fetch.br-branches-one-merge @@ -1,7 +1,7 @@ # br-branches-one-merge 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-one-merge_branches-one b/t/t5515/fetch.br-branches-one-merge_branches-one index b4d1bb0b0b..3a63a7f450 100644 --- a/t/t5515/fetch.br-branches-one-merge_branches-one +++ b/t/t5515/fetch.br-branches-one-merge_branches-one @@ -1,7 +1,7 @@ # br-branches-one-merge branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-one-octopus b/t/t5515/fetch.br-branches-one-octopus index 97c4b544b8..46af763fec 100644 --- a/t/t5515/fetch.br-branches-one-octopus +++ b/t/t5515/fetch.br-branches-one-octopus @@ -1,7 +1,7 @@ # br-branches-one-octopus 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-one-octopus_branches-one b/t/t5515/fetch.br-branches-one-octopus_branches-one index df705f74c7..becfde9ddd 100644 --- a/t/t5515/fetch.br-branches-one-octopus_branches-one +++ b/t/t5515/fetch.br-branches-one-octopus_branches-one @@ -1,7 +1,7 @@ # br-branches-one-octopus branches-one 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-branches-one_branches-one b/t/t5515/fetch.br-branches-one_branches-one index 96890e5bd9..9ba34c6754 100644 --- a/t/t5515/fetch.br-branches-one_branches-one +++ b/t/t5515/fetch.br-branches-one_branches-one @@ -1,6 +1,6 @@ # br-branches-one branches-one 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-explicit b/t/t5515/fetch.br-config-explicit index 68fc927263..7466a73214 100644 --- a/t/t5515/fetch.br-config-explicit +++ b/t/t5515/fetch.br-config-explicit @@ -1,9 +1,9 @@ # br-config-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-explicit-merge b/t/t5515/fetch.br-config-explicit-merge index 5ce764a06e..9375b7d21d 100644 --- a/t/t5515/fetch.br-config-explicit-merge +++ b/t/t5515/fetch.br-config-explicit-merge @@ -1,9 +1,9 @@ # br-config-explicit-merge 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-explicit-merge_config-explicit b/t/t5515/fetch.br-config-explicit-merge_config-explicit index b1152b76dc..6335e2b113 100644 --- a/t/t5515/fetch.br-config-explicit-merge_config-explicit +++ b/t/t5515/fetch.br-config-explicit-merge_config-explicit @@ -1,9 +1,9 @@ # br-config-explicit-merge config-explicit 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-explicit-octopus b/t/t5515/fetch.br-config-explicit-octopus index 110577bb67..c379aa9b31 100644 --- a/t/t5515/fetch.br-config-explicit-octopus +++ b/t/t5515/fetch.br-config-explicit-octopus @@ -1,9 +1,9 @@ # br-config-explicit-octopus 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-explicit-octopus_config-explicit b/t/t5515/fetch.br-config-explicit-octopus_config-explicit index a29dd8baba..7fb3a3eef8 100644 --- a/t/t5515/fetch.br-config-explicit-octopus_config-explicit +++ b/t/t5515/fetch.br-config-explicit-octopus_config-explicit @@ -1,9 +1,9 @@ # br-config-explicit-octopus config-explicit 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-explicit_config-explicit b/t/t5515/fetch.br-config-explicit_config-explicit index b19b0162e1..86045a79d4 100644 --- a/t/t5515/fetch.br-config-explicit_config-explicit +++ b/t/t5515/fetch.br-config-explicit_config-explicit @@ -1,9 +1,9 @@ # br-config-explicit config-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-glob b/t/t5515/fetch.br-config-glob index 946d70ca07..bfeef2b716 100644 --- a/t/t5515/fetch.br-config-glob +++ b/t/t5515/fetch.br-config-glob @@ -1,9 +1,9 @@ # br-config-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-glob-merge b/t/t5515/fetch.br-config-glob-merge index 89f2596cb9..5376a4ac1d 100644 --- a/t/t5515/fetch.br-config-glob-merge +++ b/t/t5515/fetch.br-config-glob-merge @@ -1,9 +1,9 @@ # br-config-glob-merge 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-glob-merge_config-glob b/t/t5515/fetch.br-config-glob-merge_config-glob index 2ba4832160..7dfc2feb35 100644 --- a/t/t5515/fetch.br-config-glob-merge_config-glob +++ b/t/t5515/fetch.br-config-glob-merge_config-glob @@ -1,9 +1,9 @@ # br-config-glob-merge config-glob 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-glob-octopus b/t/t5515/fetch.br-config-glob-octopus index 64994df7e2..10840309ef 100644 --- a/t/t5515/fetch.br-config-glob-octopus +++ b/t/t5515/fetch.br-config-glob-octopus @@ -1,9 +1,9 @@ # br-config-glob-octopus 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-glob-octopus_config-glob b/t/t5515/fetch.br-config-glob-octopus_config-glob index 681a725adc..839866daf3 100644 --- a/t/t5515/fetch.br-config-glob-octopus_config-glob +++ b/t/t5515/fetch.br-config-glob-octopus_config-glob @@ -1,9 +1,9 @@ # br-config-glob-octopus config-glob 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-config-glob_config-glob b/t/t5515/fetch.br-config-glob_config-glob index 19daf0cb77..7b0cb91e51 100644 --- a/t/t5515/fetch.br-config-glob_config-glob +++ b/t/t5515/fetch.br-config-glob_config-glob @@ -1,9 +1,9 @@ # br-config-glob config-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-explicit b/t/t5515/fetch.br-remote-explicit index ab44bc5519..d6619e7fc0 100644 --- a/t/t5515/fetch.br-remote-explicit +++ b/t/t5515/fetch.br-remote-explicit @@ -1,9 +1,9 @@ # br-remote-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-explicit-merge b/t/t5515/fetch.br-remote-explicit-merge index d018b3515f..5b49b7c4c5 100644 --- a/t/t5515/fetch.br-remote-explicit-merge +++ b/t/t5515/fetch.br-remote-explicit-merge @@ -1,9 +1,9 @@ # br-remote-explicit-merge 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-explicit-merge_remote-explicit b/t/t5515/fetch.br-remote-explicit-merge_remote-explicit index 0d3d780dd0..417261d8eb 100644 --- a/t/t5515/fetch.br-remote-explicit-merge_remote-explicit +++ b/t/t5515/fetch.br-remote-explicit-merge_remote-explicit @@ -1,9 +1,9 @@ # br-remote-explicit-merge remote-explicit 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-explicit-octopus b/t/t5515/fetch.br-remote-explicit-octopus index 6f843044ed..2edef64473 100644 --- a/t/t5515/fetch.br-remote-explicit-octopus +++ b/t/t5515/fetch.br-remote-explicit-octopus @@ -1,9 +1,9 @@ # br-remote-explicit-octopus 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit b/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit index 3546a83713..ceb8752e1f 100644 --- a/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit +++ b/t/t5515/fetch.br-remote-explicit-octopus_remote-explicit @@ -1,9 +1,9 @@ # br-remote-explicit-octopus remote-explicit 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-explicit_remote-explicit b/t/t5515/fetch.br-remote-explicit_remote-explicit index 01e014e6a0..b7abbd227c 100644 --- a/t/t5515/fetch.br-remote-explicit_remote-explicit +++ b/t/t5515/fetch.br-remote-explicit_remote-explicit @@ -1,9 +1,9 @@ # br-remote-explicit remote-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-glob b/t/t5515/fetch.br-remote-glob index 09bfcee00f..645412c73f 100644 --- a/t/t5515/fetch.br-remote-glob +++ b/t/t5515/fetch.br-remote-glob @@ -1,9 +1,9 @@ # br-remote-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-glob-merge b/t/t5515/fetch.br-remote-glob-merge index 7e1a433a64..8512cfd8d3 100644 --- a/t/t5515/fetch.br-remote-glob-merge +++ b/t/t5515/fetch.br-remote-glob-merge @@ -1,9 +1,9 @@ # br-remote-glob-merge 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-glob-merge_remote-glob b/t/t5515/fetch.br-remote-glob-merge_remote-glob index 53571bb4ec..7394164d85 100644 --- a/t/t5515/fetch.br-remote-glob-merge_remote-glob +++ b/t/t5515/fetch.br-remote-glob-merge_remote-glob @@ -1,9 +1,9 @@ # br-remote-glob-merge remote-glob 0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-glob-octopus b/t/t5515/fetch.br-remote-glob-octopus index c7c8b6d7f4..0ca4719ef8 100644 --- a/t/t5515/fetch.br-remote-glob-octopus +++ b/t/t5515/fetch.br-remote-glob-octopus @@ -1,9 +1,9 @@ # br-remote-glob-octopus 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-glob-octopus_remote-glob b/t/t5515/fetch.br-remote-glob-octopus_remote-glob index 36076fba0c..7e7b0ba5f5 100644 --- a/t/t5515/fetch.br-remote-glob-octopus_remote-glob +++ b/t/t5515/fetch.br-remote-glob-octopus_remote-glob @@ -1,9 +1,9 @@ # br-remote-glob-octopus remote-glob 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-remote-glob_remote-glob b/t/t5515/fetch.br-remote-glob_remote-glob index 20ba5cb172..7bae5ecfb7 100644 --- a/t/t5515/fetch.br-remote-glob_remote-glob +++ b/t/t5515/fetch.br-remote-glob_remote-glob @@ -1,9 +1,9 @@ # br-remote-glob remote-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig b/t/t5515/fetch.br-unconfig index 887ccfc41f..ccaa54fed2 100644 --- a/t/t5515/fetch.br-unconfig +++ b/t/t5515/fetch.br-unconfig @@ -1,9 +1,9 @@ # br-unconfig -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_--tags_.._.git b/t/t5515/fetch.br-unconfig_--tags_.._.git index 0f70f66c70..3afb4f850d 100644 --- a/t/t5515/fetch.br-unconfig_--tags_.._.git +++ b/t/t5515/fetch.br-unconfig_--tags_.._.git @@ -1,6 +1,6 @@ # br-unconfig --tags ../.git 0567da4d5edd2ff4bb292a465ba9e64dcad9536b ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file b/t/t5515/fetch.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file index 74115361ba..525713a2ab 100644 --- a/t/t5515/fetch.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file +++ b/t/t5515/fetch.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file @@ -2,7 +2,7 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../ 0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ 525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file b/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file index 7726983818..18c871f512 100644 --- a/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file +++ b/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file @@ -1,7 +1,7 @@ # br-unconfig ../.git tag tag-one-tree tag tag-three-file 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ 0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ 525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one_tag_tag-three b/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one_tag_tag-three index 7b3750ce5c..7328d30c67 100644 --- a/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one_tag_tag-three +++ b/t/t5515/fetch.br-unconfig_.._.git_tag_tag-one_tag_tag-three @@ -1,7 +1,7 @@ # br-unconfig ../.git tag tag-one tag tag-three 8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 tag 'tag-three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ 0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ 525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.br-unconfig_branches-default b/t/t5515/fetch.br-unconfig_branches-default index da30e3c62c..3d82f94376 100644 --- a/t/t5515/fetch.br-unconfig_branches-default +++ b/t/t5515/fetch.br-unconfig_branches-default @@ -1,6 +1,6 @@ # br-unconfig branches-default -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_branches-one b/t/t5515/fetch.br-unconfig_branches-one index e4614314c5..948ed0c3d9 100644 --- a/t/t5515/fetch.br-unconfig_branches-one +++ b/t/t5515/fetch.br-unconfig_branches-one @@ -1,6 +1,6 @@ # br-unconfig branches-one 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_config-explicit b/t/t5515/fetch.br-unconfig_config-explicit index ed323c9871..65aaec8a7b 100644 --- a/t/t5515/fetch.br-unconfig_config-explicit +++ b/t/t5515/fetch.br-unconfig_config-explicit @@ -1,9 +1,9 @@ # br-unconfig config-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_config-glob b/t/t5515/fetch.br-unconfig_config-glob index 2372ed03c5..1aa3d4598a 100644 --- a/t/t5515/fetch.br-unconfig_config-glob +++ b/t/t5515/fetch.br-unconfig_config-glob @@ -1,9 +1,9 @@ # br-unconfig config-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_remote-explicit b/t/t5515/fetch.br-unconfig_remote-explicit index 6318dd11b4..16438d2085 100644 --- a/t/t5515/fetch.br-unconfig_remote-explicit +++ b/t/t5515/fetch.br-unconfig_remote-explicit @@ -1,9 +1,9 @@ # br-unconfig remote-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.br-unconfig_remote-glob b/t/t5515/fetch.br-unconfig_remote-glob index 1d9afad7d8..7a01d2e0f6 100644 --- a/t/t5515/fetch.br-unconfig_remote-glob +++ b/t/t5515/fetch.br-unconfig_remote-glob @@ -1,9 +1,9 @@ # br-unconfig remote-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master b/t/t5515/fetch.main index 9b29d67200..819ed33bf5 100644 --- a/t/t5515/fetch.master +++ b/t/t5515/fetch.main @@ -1,9 +1,9 @@ -# master -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +# main +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master_--tags_.._.git b/t/t5515/fetch.main_--tags_.._.git index ab473a6e1f..ddf67a613b 100644 --- a/t/t5515/fetch.master_--tags_.._.git +++ b/t/t5515/fetch.main_--tags_.._.git @@ -1,6 +1,6 @@ -# master --tags ../.git +# main --tags ../.git 0567da4d5edd2ff4bb292a465ba9e64dcad9536b ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master_.._.git b/t/t5515/fetch.main_.._.git index 66d1aaddae..285e57eaf5 100644 --- a/t/t5515/fetch.master_.._.git +++ b/t/t5515/fetch.main_.._.git @@ -1,2 +1,2 @@ -# master ../.git +# main ../.git 0567da4d5edd2ff4bb292a465ba9e64dcad9536b ../ diff --git a/t/t5515/fetch.master_.._.git_one b/t/t5515/fetch.main_.._.git_one index 35deddbd2c..f9f511efbc 100644 --- a/t/t5515/fetch.master_.._.git_one +++ b/t/t5515/fetch.main_.._.git_one @@ -1,2 +1,2 @@ -# master ../.git one +# main ../.git one 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ diff --git a/t/t5515/fetch.master_.._.git_one_tag_tag-one_tag_tag-three-file b/t/t5515/fetch.main_.._.git_one_tag_tag-one_tag_tag-three-file index 0672d1292f..187643e2ce 100644 --- a/t/t5515/fetch.master_.._.git_one_tag_tag-one_tag_tag-three-file +++ b/t/t5515/fetch.main_.._.git_one_tag_tag-one_tag_tag-three-file @@ -1,8 +1,8 @@ -# master ../.git one tag tag-one tag tag-three-file +# main ../.git one tag tag-one tag tag-three-file 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../ 0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ 525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.master_.._.git_one_two b/t/t5515/fetch.main_.._.git_one_two index 35ec5782c8..048ad97a15 100644 --- a/t/t5515/fetch.master_.._.git_one_two +++ b/t/t5515/fetch.main_.._.git_one_two @@ -1,3 +1,3 @@ -# master ../.git one two +# main ../.git one two 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../ diff --git a/t/t5515/fetch.master_.._.git_tag_tag-one-tree_tag_tag-three-file b/t/t5515/fetch.main_.._.git_tag_tag-one-tree_tag_tag-three-file index 0fd737cf81..df5f2a7d5f 100644 --- a/t/t5515/fetch.master_.._.git_tag_tag-one-tree_tag_tag-three-file +++ b/t/t5515/fetch.main_.._.git_tag_tag-one-tree_tag_tag-three-file @@ -1,7 +1,7 @@ -# master ../.git tag tag-one-tree tag tag-three-file +# main ../.git tag tag-one-tree tag tag-three-file 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ 0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ 525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.master_.._.git_tag_tag-one_tag_tag-three b/t/t5515/fetch.main_.._.git_tag_tag-one_tag_tag-three index e488986653..a40b72817b 100644 --- a/t/t5515/fetch.master_.._.git_tag_tag-one_tag_tag-three +++ b/t/t5515/fetch.main_.._.git_tag_tag-one_tag_tag-three @@ -1,7 +1,7 @@ -# master ../.git tag tag-one tag tag-three +# main ../.git tag tag-one tag tag-three 8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 tag 'tag-three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ 0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ 525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.master_branches-default b/t/t5515/fetch.main_branches-default index 2eedd3bfa4..e3466e8329 100644 --- a/t/t5515/fetch.master_branches-default +++ b/t/t5515/fetch.main_branches-default @@ -1,6 +1,6 @@ -# master branches-default -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +# main branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master_branches-one b/t/t5515/fetch.main_branches-one index 901ce21d33..a94f11af4c 100644 --- a/t/t5515/fetch.master_branches-one +++ b/t/t5515/fetch.main_branches-one @@ -1,6 +1,6 @@ -# master branches-one +# main branches-one 8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master_config-explicit b/t/t5515/fetch.main_config-explicit index 251c826aa9..16d04c14d2 100644 --- a/t/t5515/fetch.master_config-explicit +++ b/t/t5515/fetch.main_config-explicit @@ -1,9 +1,9 @@ -# master config-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +# main config-explicit +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master_config-glob b/t/t5515/fetch.main_config-glob index 27c158e332..f6a6f56991 100644 --- a/t/t5515/fetch.master_config-glob +++ b/t/t5515/fetch.main_config-glob @@ -1,9 +1,9 @@ -# master config-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ +# main config-glob +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.master_remote-explicit b/t/t5515/fetch.main_remote-explicit index b3cfe6b98b..bf4fd65e00 100644 --- a/t/t5515/fetch.master_remote-explicit +++ b/t/t5515/fetch.main_remote-explicit @@ -1,9 +1,9 @@ -# master remote-explicit -754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../ +# main remote-explicit +b4ab76b1a01ea602209932134a44f1e6bd610832 branch 'main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ 8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ 22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ diff --git a/t/t5515/fetch.main_remote-glob b/t/t5515/fetch.main_remote-glob new file mode 100644 index 0000000000..91dc2e26ef --- /dev/null +++ b/t/t5515/fetch.main_remote-glob @@ -0,0 +1,11 @@ +# main remote-glob +b4ab76b1a01ea602209932134a44f1e6bd610832 not-for-merge branch 'main' of ../ +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ +ecf3b3627b498bdcb735cc4343bf165f76964e9a not-for-merge tag 'tag-main' of ../ +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ +22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ +c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ +0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ +525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/fetch.master_remote-glob b/t/t5515/fetch.master_remote-glob deleted file mode 100644 index 118befd1e4..0000000000 --- a/t/t5515/fetch.master_remote-glob +++ /dev/null @@ -1,11 +0,0 @@ -# master remote-glob -754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../ -8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../ -0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../ -6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../ -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../ -8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../ -22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../ -c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../ -0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../ -525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../ diff --git a/t/t5515/refs.br-branches-default b/t/t5515/refs.br-branches-default index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-branches-default +++ b/t/t5515/refs.br-branches-default @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-default-merge b/t/t5515/refs.br-branches-default-merge index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-branches-default-merge +++ b/t/t5515/refs.br-branches-default-merge @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-default-merge_branches-default b/t/t5515/refs.br-branches-default-merge_branches-default index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-branches-default-merge_branches-default +++ b/t/t5515/refs.br-branches-default-merge_branches-default @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-default-octopus b/t/t5515/refs.br-branches-default-octopus index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-branches-default-octopus +++ b/t/t5515/refs.br-branches-default-octopus @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-default-octopus_branches-default b/t/t5515/refs.br-branches-default-octopus_branches-default index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-branches-default-octopus_branches-default +++ b/t/t5515/refs.br-branches-default-octopus_branches-default @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-default_branches-default b/t/t5515/refs.br-branches-default_branches-default index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-branches-default_branches-default +++ b/t/t5515/refs.br-branches-default_branches-default @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-one b/t/t5515/refs.br-branches-one index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-branches-one +++ b/t/t5515/refs.br-branches-one @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-one-merge b/t/t5515/refs.br-branches-one-merge index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-branches-one-merge +++ b/t/t5515/refs.br-branches-one-merge @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-one-merge_branches-one b/t/t5515/refs.br-branches-one-merge_branches-one index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-branches-one-merge_branches-one +++ b/t/t5515/refs.br-branches-one-merge_branches-one @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-one-octopus b/t/t5515/refs.br-branches-one-octopus index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-branches-one-octopus +++ b/t/t5515/refs.br-branches-one-octopus @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-one-octopus_branches-one b/t/t5515/refs.br-branches-one-octopus_branches-one index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-branches-one-octopus_branches-one +++ b/t/t5515/refs.br-branches-one-octopus_branches-one @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-branches-one_branches-one b/t/t5515/refs.br-branches-one_branches-one index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-branches-one_branches-one +++ b/t/t5515/refs.br-branches-one_branches-one @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-explicit b/t/t5515/refs.br-config-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-explicit +++ b/t/t5515/refs.br-config-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-explicit-merge b/t/t5515/refs.br-config-explicit-merge index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-explicit-merge +++ b/t/t5515/refs.br-config-explicit-merge @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-explicit-merge_config-explicit b/t/t5515/refs.br-config-explicit-merge_config-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-explicit-merge_config-explicit +++ b/t/t5515/refs.br-config-explicit-merge_config-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-explicit-octopus b/t/t5515/refs.br-config-explicit-octopus index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-explicit-octopus +++ b/t/t5515/refs.br-config-explicit-octopus @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-explicit-octopus_config-explicit b/t/t5515/refs.br-config-explicit-octopus_config-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-explicit-octopus_config-explicit +++ b/t/t5515/refs.br-config-explicit-octopus_config-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-explicit_config-explicit b/t/t5515/refs.br-config-explicit_config-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-explicit_config-explicit +++ b/t/t5515/refs.br-config-explicit_config-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-glob b/t/t5515/refs.br-config-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-glob +++ b/t/t5515/refs.br-config-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-glob-merge b/t/t5515/refs.br-config-glob-merge index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-glob-merge +++ b/t/t5515/refs.br-config-glob-merge @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-glob-merge_config-glob b/t/t5515/refs.br-config-glob-merge_config-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-glob-merge_config-glob +++ b/t/t5515/refs.br-config-glob-merge_config-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-glob-octopus b/t/t5515/refs.br-config-glob-octopus index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-glob-octopus +++ b/t/t5515/refs.br-config-glob-octopus @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-glob-octopus_config-glob b/t/t5515/refs.br-config-glob-octopus_config-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-glob-octopus_config-glob +++ b/t/t5515/refs.br-config-glob-octopus_config-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-config-glob_config-glob b/t/t5515/refs.br-config-glob_config-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-config-glob_config-glob +++ b/t/t5515/refs.br-config-glob_config-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-explicit b/t/t5515/refs.br-remote-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-explicit +++ b/t/t5515/refs.br-remote-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-explicit-merge b/t/t5515/refs.br-remote-explicit-merge index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-explicit-merge +++ b/t/t5515/refs.br-remote-explicit-merge @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-explicit-merge_remote-explicit b/t/t5515/refs.br-remote-explicit-merge_remote-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-explicit-merge_remote-explicit +++ b/t/t5515/refs.br-remote-explicit-merge_remote-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-explicit-octopus b/t/t5515/refs.br-remote-explicit-octopus index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-explicit-octopus +++ b/t/t5515/refs.br-remote-explicit-octopus @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-explicit-octopus_remote-explicit b/t/t5515/refs.br-remote-explicit-octopus_remote-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-explicit-octopus_remote-explicit +++ b/t/t5515/refs.br-remote-explicit-octopus_remote-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-explicit_remote-explicit b/t/t5515/refs.br-remote-explicit_remote-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-explicit_remote-explicit +++ b/t/t5515/refs.br-remote-explicit_remote-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-glob b/t/t5515/refs.br-remote-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-glob +++ b/t/t5515/refs.br-remote-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-glob-merge b/t/t5515/refs.br-remote-glob-merge index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-glob-merge +++ b/t/t5515/refs.br-remote-glob-merge @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-glob-merge_remote-glob b/t/t5515/refs.br-remote-glob-merge_remote-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-glob-merge_remote-glob +++ b/t/t5515/refs.br-remote-glob-merge_remote-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-glob-octopus b/t/t5515/refs.br-remote-glob-octopus index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-glob-octopus +++ b/t/t5515/refs.br-remote-glob-octopus @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-glob-octopus_remote-glob b/t/t5515/refs.br-remote-glob-octopus_remote-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-glob-octopus_remote-glob +++ b/t/t5515/refs.br-remote-glob-octopus_remote-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-remote-glob_remote-glob b/t/t5515/refs.br-remote-glob_remote-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-remote-glob_remote-glob +++ b/t/t5515/refs.br-remote-glob_remote-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig b/t/t5515/refs.br-unconfig index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.br-unconfig +++ b/t/t5515/refs.br-unconfig @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_--tags_.._.git b/t/t5515/refs.br-unconfig_--tags_.._.git index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.br-unconfig_--tags_.._.git +++ b/t/t5515/refs.br-unconfig_--tags_.._.git @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_.._.git b/t/t5515/refs.br-unconfig_.._.git index 70962eaac1..4a74b68029 100644 --- a/t/t5515/refs.br-unconfig_.._.git +++ b/t/t5515/refs.br-unconfig_.._.git @@ -1,5 +1,5 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two diff --git a/t/t5515/refs.br-unconfig_.._.git_one b/t/t5515/refs.br-unconfig_.._.git_one index 70962eaac1..4a74b68029 100644 --- a/t/t5515/refs.br-unconfig_.._.git_one +++ b/t/t5515/refs.br-unconfig_.._.git_one @@ -1,5 +1,5 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two diff --git a/t/t5515/refs.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file b/t/t5515/refs.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file +++ b/t/t5515/refs.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_.._.git_one_two b/t/t5515/refs.br-unconfig_.._.git_one_two index 70962eaac1..4a74b68029 100644 --- a/t/t5515/refs.br-unconfig_.._.git_one_two +++ b/t/t5515/refs.br-unconfig_.._.git_one_two @@ -1,5 +1,5 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two diff --git a/t/t5515/refs.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file b/t/t5515/refs.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file +++ b/t/t5515/refs.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_.._.git_tag_tag-one_tag_tag-three b/t/t5515/refs.br-unconfig_.._.git_tag_tag-one_tag_tag-three index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.br-unconfig_.._.git_tag_tag-one_tag_tag-three +++ b/t/t5515/refs.br-unconfig_.._.git_tag_tag-one_tag_tag-three @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_branches-default b/t/t5515/refs.br-unconfig_branches-default index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.br-unconfig_branches-default +++ b/t/t5515/refs.br-unconfig_branches-default @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_branches-one b/t/t5515/refs.br-unconfig_branches-one index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.br-unconfig_branches-one +++ b/t/t5515/refs.br-unconfig_branches-one @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_config-explicit b/t/t5515/refs.br-unconfig_config-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-unconfig_config-explicit +++ b/t/t5515/refs.br-unconfig_config-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_config-glob b/t/t5515/refs.br-unconfig_config-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-unconfig_config-glob +++ b/t/t5515/refs.br-unconfig_config-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_remote-explicit b/t/t5515/refs.br-unconfig_remote-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-unconfig_remote-explicit +++ b/t/t5515/refs.br-unconfig_remote-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.br-unconfig_remote-glob b/t/t5515/refs.br-unconfig_remote-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.br-unconfig_remote-glob +++ b/t/t5515/refs.br-unconfig_remote-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_.._.git_one_tag_tag-one_tag_tag-three-file b/t/t5515/refs.main index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.master_.._.git_one_tag_tag-one_tag_tag-three-file +++ b/t/t5515/refs.main @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_.._.git_tag_tag-one-tree_tag_tag-three-file b/t/t5515/refs.main_--tags_.._.git index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.master_.._.git_tag_tag-one-tree_tag_tag-three-file +++ b/t/t5515/refs.main_--tags_.._.git @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_.._.git_one_two b/t/t5515/refs.main_.._.git index 70962eaac1..4a74b68029 100644 --- a/t/t5515/refs.master_.._.git_one_two +++ b/t/t5515/refs.main_.._.git @@ -1,5 +1,5 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two diff --git a/t/t5515/refs.master_.._.git b/t/t5515/refs.main_.._.git_one index 70962eaac1..4a74b68029 100644 --- a/t/t5515/refs.master_.._.git +++ b/t/t5515/refs.main_.._.git_one @@ -1,5 +1,5 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two diff --git a/t/t5515/refs.master b/t/t5515/refs.main_.._.git_one_tag_tag-one_tag_tag-three-file index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.master +++ b/t/t5515/refs.main_.._.git_one_tag_tag-one_tag_tag-three-file @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_.._.git_one b/t/t5515/refs.main_.._.git_one_two index 70962eaac1..4a74b68029 100644 --- a/t/t5515/refs.master_.._.git_one +++ b/t/t5515/refs.main_.._.git_one_two @@ -1,5 +1,5 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two diff --git a/t/t5515/refs.master_--tags_.._.git b/t/t5515/refs.main_.._.git_tag_tag-one-tree_tag_tag-three-file index 13e4ad2e46..f2ab01f68b 100644 --- a/t/t5515/refs.master_--tags_.._.git +++ b/t/t5515/refs.main_.._.git_tag_tag-one-tree_tag_tag-three-file @@ -1,9 +1,9 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.main_.._.git_tag_tag-one_tag_tag-three b/t/t5515/refs.main_.._.git_tag_tag-one_tag_tag-three new file mode 100644 index 0000000000..f2ab01f68b --- /dev/null +++ b/t/t5515/refs.main_.._.git_tag_tag-one_tag_tag-three @@ -0,0 +1,11 @@ +0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main +8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one +0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main +8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one +22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree +c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three +0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file +525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two diff --git a/t/t5515/refs.master_branches-default b/t/t5515/refs.main_branches-default index 21917c1e5d..dc4f2b7a4e 100644 --- a/t/t5515/refs.master_branches-default +++ b/t/t5515/refs.main_branches-default @@ -1,10 +1,10 @@ -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/heads/branches-default +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/heads/branches-default 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_branches-one b/t/t5515/refs.main_branches-one index 8a705a5df2..e8f79bf4b1 100644 --- a/t/t5515/refs.master_branches-one +++ b/t/t5515/refs.main_branches-one @@ -1,10 +1,10 @@ 8e32a6d901327a23ef831511badce7bf3bf46689 refs/heads/branches-one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_config-explicit b/t/t5515/refs.main_config-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.master_config-explicit +++ b/t/t5515/refs.main_config-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_config-glob b/t/t5515/refs.main_config-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.master_config-glob +++ b/t/t5515/refs.main_config-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_remote-explicit b/t/t5515/refs.main_remote-explicit index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.master_remote-explicit +++ b/t/t5515/refs.main_remote-explicit @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_remote-glob b/t/t5515/refs.main_remote-glob index 9bbbfd9fc5..a28fa5f56e 100644 --- a/t/t5515/refs.master_remote-glob +++ b/t/t5515/refs.main_remote-glob @@ -1,13 +1,13 @@ 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/origin/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/rem/master +b4ab76b1a01ea602209932134a44f1e6bd610832 refs/remotes/rem/main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/rem/one 0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/rem/three 6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/rem/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master +ecf3b3627b498bdcb735cc4343bf165f76964e9a refs/tags/tag-main 8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one 22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three diff --git a/t/t5515/refs.master_.._.git_tag_tag-one_tag_tag-three b/t/t5515/refs.master_.._.git_tag_tag-one_tag_tag-three deleted file mode 100644 index 13e4ad2e46..0000000000 --- a/t/t5515/refs.master_.._.git_tag_tag-one_tag_tag-three +++ /dev/null @@ -1,11 +0,0 @@ -0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/HEAD -754b754407bf032e9a2f9d5a9ad05ca79a6b228f refs/remotes/origin/master -8e32a6d901327a23ef831511badce7bf3bf46689 refs/remotes/origin/one -0567da4d5edd2ff4bb292a465ba9e64dcad9536b refs/remotes/origin/three -6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 refs/remotes/origin/two -6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 refs/tags/tag-master -8e32a6d901327a23ef831511badce7bf3bf46689 refs/tags/tag-one -22feea448b023a2d864ef94b013735af34d238ba refs/tags/tag-one-tree -c61a82b60967180544e3c19f819ddbd0c9f89899 refs/tags/tag-three -0e3b14047d3ee365f4f2a1b673db059c3972589c refs/tags/tag-three-file -525b7fb068d59950d185a8779dc957c77eed73ba refs/tags/tag-two diff --git a/t/t5530-upload-pack-error.sh b/t/t5530-upload-pack-error.sh index 205a2631e7..9dd2d2457a 100755 --- a/t/t5530-upload-pack-error.sh +++ b/t/t5530-upload-pack-error.sh @@ -88,6 +88,23 @@ test_expect_success 'upload-pack fails due to error in pack-objects enumeration' grep "pack-objects died" output.err ' +test_expect_success 'upload-pack tolerates EOF just after stateless client wants' ' + test_commit initial && + head=$(git rev-parse HEAD) && + + { + packetize "want $head" && + packetize "shallow $head" && + packetize "deepen 1" && + printf "0000" + } >request && + + printf "0000" >expect && + + git upload-pack --stateless-rpc . <request >actual && + test_cmp expect actual +' + test_expect_success 'create empty repository' ' mkdir foo && diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh index 34487bbb8c..8f69a7854f 100755 --- a/t/t5570-git-daemon.sh +++ b/t/t5570-git-daemon.sh @@ -147,18 +147,18 @@ test_remote_error() } msg="access denied or repository not exported" -test_expect_success 'clone non-existent' "test_remote_error '$msg' clone nowhere.git " +test_expect_success 'clone non-existent' "test_remote_error '$msg' clone nowhere.git" test_expect_success 'push disabled' "test_remote_error '$msg' push repo.git master" -test_expect_success 'read access denied' "test_remote_error -x '$msg' fetch repo.git " -test_expect_success 'not exported' "test_remote_error -n '$msg' fetch repo.git " +test_expect_success 'read access denied' "test_remote_error -x '$msg' fetch repo.git" +test_expect_success 'not exported' "test_remote_error -n '$msg' fetch repo.git" stop_git_daemon start_git_daemon --informative-errors -test_expect_success 'clone non-existent' "test_remote_error 'no such repository' clone nowhere.git " +test_expect_success 'clone non-existent' "test_remote_error 'no such repository' clone nowhere.git" test_expect_success 'push disabled' "test_remote_error 'service not enabled' push repo.git master" -test_expect_success 'read access denied' "test_remote_error -x 'no such repository' fetch repo.git " -test_expect_success 'not exported' "test_remote_error -n 'repository not exported' fetch repo.git " +test_expect_success 'read access denied' "test_remote_error -x 'no such repository' fetch repo.git" +test_expect_success 'not exported' "test_remote_error -n 'repository not exported' fetch repo.git" stop_git_daemon start_git_daemon --interpolated-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH/%H%D" diff --git a/t/t6400-merge-df.sh b/t/t6400-merge-df.sh index f1b84617af..9da0838216 100755 --- a/t/t6400-merge-df.sh +++ b/t/t6400-merge-df.sh @@ -81,7 +81,12 @@ test_expect_success 'modify/delete + directory/file conflict' ' test 5 -eq $(git ls-files -s | wc -l) && test 4 -eq $(git ls-files -u | wc -l) && - test 1 -eq $(git ls-files -o | wc -l) && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 0 -eq $(git ls-files -o | wc -l) + else + test 1 -eq $(git ls-files -o | wc -l) + fi && test_path_is_file letters/file && test_path_is_file letters.txt && @@ -97,7 +102,12 @@ test_expect_success 'modify/delete + directory/file conflict; other way' ' test 5 -eq $(git ls-files -s | wc -l) && test 4 -eq $(git ls-files -u | wc -l) && - test 1 -eq $(git ls-files -o | wc -l) && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 0 -eq $(git ls-files -o | wc -l) + else + test 1 -eq $(git ls-files -o | wc -l) + fi && test_path_is_file letters/file && test_path_is_file letters.txt && diff --git a/t/t6402-merge-rename.sh b/t/t6402-merge-rename.sh index bbbba3dcbf..3f64f62224 100755 --- a/t/t6402-merge-rename.sh +++ b/t/t6402-merge-rename.sh @@ -320,7 +320,12 @@ test_expect_success 'Rename+D/F conflict; renamed file merges but dir in way' ' test_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output && test_i18ngrep "Auto-merging dir" output && - test_i18ngrep "Adding as dir~HEAD instead" output && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_i18ngrep "moving it to dir~HEAD instead" output + else + test_i18ngrep "Adding as dir~HEAD instead" output + fi && test 3 -eq "$(git ls-files -u | wc -l)" && test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && @@ -342,7 +347,12 @@ test_expect_success 'Same as previous, but merged other way' ' ! grep "error: refusing to lose untracked file at" errors && test_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output && test_i18ngrep "Auto-merging dir" output && - test_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_i18ngrep "moving it to dir~renamed-file-has-no-conflicts instead" output + else + test_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output + fi && test 3 -eq "$(git ls-files -u | wc -l)" && test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && @@ -397,7 +407,12 @@ test_expect_success 'Rename+D/F conflict; renamed file cannot merge and dir in t test_must_fail git merge --strategy=recursive dir-in-way && test 5 -eq "$(git ls-files -u | wc -l)" && - test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 3 -eq "$(git ls-files -u dir~HEAD | wc -l)" + else + test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" + fi && test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && test_must_fail git diff --quiet && @@ -415,7 +430,12 @@ test_expect_success 'Same as previous, but merged other way' ' test_must_fail git merge --strategy=recursive renamed-file-has-conflicts && test 5 -eq "$(git ls-files -u | wc -l)" && - test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 3 -eq "$(git ls-files -u dir~renamed-file-has-conflicts | wc -l)" + else + test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" + fi && test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && test_must_fail git diff --quiet && @@ -471,7 +491,12 @@ test_expect_success 'both rename source and destination involved in D/F conflict git checkout -q rename-dest^0 && test_must_fail git merge --strategy=recursive source-conflict && - test 1 -eq "$(git ls-files -u | wc -l)" && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 2 -eq "$(git ls-files -u | wc -l)" + else + test 1 -eq "$(git ls-files -u | wc -l)" + fi && test_must_fail git diff --quiet && @@ -505,34 +530,63 @@ test_expect_success 'setup pair rename to parent of other (D/F conflicts)' ' git commit -m "Rename one/file -> two" ' -test_expect_success 'pair rename to parent of other (D/F conflicts) w/ untracked dir' ' - git checkout -q rename-one^0 && - mkdir one && - test_must_fail git merge --strategy=recursive rename-two && +if test "$GIT_TEST_MERGE_ALGORITHM" = ort +then + test_expect_success 'pair rename to parent of other (D/F conflicts) w/ untracked dir' ' + git checkout -q rename-one^0 && + mkdir one && + test_must_fail git merge --strategy=recursive rename-two && - test 2 -eq "$(git ls-files -u | wc -l)" && - test 1 -eq "$(git ls-files -u one | wc -l)" && - test 1 -eq "$(git ls-files -u two | wc -l)" && + test 4 -eq "$(git ls-files -u | wc -l)" && + test 2 -eq "$(git ls-files -u one | wc -l)" && + test 2 -eq "$(git ls-files -u two | wc -l)" && - test_must_fail git diff --quiet && + test_must_fail git diff --quiet && - test 4 -eq $(find . | grep -v .git | wc -l) && + test 3 -eq $(find . | grep -v .git | wc -l) && - test_path_is_dir one && - test_path_is_file one~rename-two && - test_path_is_file two && - test "other" = $(cat one~rename-two) && - test "stuff" = $(cat two) -' + test_path_is_file one && + test_path_is_file two && + test "other" = $(cat one) && + test "stuff" = $(cat two) + ' +else + test_expect_success 'pair rename to parent of other (D/F conflicts) w/ untracked dir' ' + git checkout -q rename-one^0 && + mkdir one && + test_must_fail git merge --strategy=recursive rename-two && + + test 2 -eq "$(git ls-files -u | wc -l)" && + test 1 -eq "$(git ls-files -u one | wc -l)" && + test 1 -eq "$(git ls-files -u two | wc -l)" && + + test_must_fail git diff --quiet && + + test 4 -eq $(find . | grep -v .git | wc -l) && + + test_path_is_dir one && + test_path_is_file one~rename-two && + test_path_is_file two && + test "other" = $(cat one~rename-two) && + test "stuff" = $(cat two) + ' +fi test_expect_success 'pair rename to parent of other (D/F conflicts) w/ clean start' ' git reset --hard && git clean -fdqx && test_must_fail git merge --strategy=recursive rename-two && - test 2 -eq "$(git ls-files -u | wc -l)" && - test 1 -eq "$(git ls-files -u one | wc -l)" && - test 1 -eq "$(git ls-files -u two | wc -l)" && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 4 -eq "$(git ls-files -u | wc -l)" && + test 2 -eq "$(git ls-files -u one | wc -l)" && + test 2 -eq "$(git ls-files -u two | wc -l)" + else + test 2 -eq "$(git ls-files -u | wc -l)" && + test 1 -eq "$(git ls-files -u one | wc -l)" && + test 1 -eq "$(git ls-files -u two | wc -l)" + fi && test_must_fail git diff --quiet && @@ -572,12 +626,22 @@ test_expect_success 'check handling of differently renamed file with D/F conflic git checkout -q first-rename^0 && test_must_fail git merge --strategy=recursive second-rename && - test 5 -eq "$(git ls-files -s | wc -l)" && - test 3 -eq "$(git ls-files -u | wc -l)" && - test 1 -eq "$(git ls-files -u one | wc -l)" && - test 1 -eq "$(git ls-files -u two | wc -l)" && - test 1 -eq "$(git ls-files -u original | wc -l)" && - test 2 -eq "$(git ls-files -o | wc -l)" && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 5 -eq "$(git ls-files -s | wc -l)" && + test 3 -eq "$(git ls-files -u | wc -l)" && + test 1 -eq "$(git ls-files -u one~HEAD | wc -l)" && + test 1 -eq "$(git ls-files -u two~second-rename | wc -l)" && + test 1 -eq "$(git ls-files -u original | wc -l)" && + test 0 -eq "$(git ls-files -o | wc -l)" + else + test 5 -eq "$(git ls-files -s | wc -l)" && + test 3 -eq "$(git ls-files -u | wc -l)" && + test 1 -eq "$(git ls-files -u one | wc -l)" && + test 1 -eq "$(git ls-files -u two | wc -l)" && + test 1 -eq "$(git ls-files -u original | wc -l)" && + test 2 -eq "$(git ls-files -o | wc -l)" + fi && test_path_is_file one/file && test_path_is_file two/file && diff --git a/t/t6404-recursive-merge.sh b/t/t6404-recursive-merge.sh index 332cfc53fd..b1c3d4dda4 100755 --- a/t/t6404-recursive-merge.sh +++ b/t/t6404-recursive-merge.sh @@ -118,12 +118,22 @@ test_expect_success 'mark rename/delete as unmerged' ' test_tick && git commit -m rename && test_must_fail git merge delete && - test 1 = $(git ls-files --unmerged | wc -l) && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 2 = $(git ls-files --unmerged | wc -l) + else + test 1 = $(git ls-files --unmerged | wc -l) + fi && git rev-parse --verify :2:a2 && test_must_fail git rev-parse --verify :3:a2 && git checkout -f delete && test_must_fail git merge rename && - test 1 = $(git ls-files --unmerged | wc -l) && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test 2 = $(git ls-files --unmerged | wc -l) + else + test 1 = $(git ls-files --unmerged | wc -l) + fi && test_must_fail git rev-parse --verify :2:a2 && git rev-parse --verify :3:a2 ' diff --git a/t/t6416-recursive-corner-cases.sh b/t/t6416-recursive-corner-cases.sh index fd98989b14..887c2195a9 100755 --- a/t/t6416-recursive-corner-cases.sh +++ b/t/t6416-recursive-corner-cases.sh @@ -3,6 +3,7 @@ test_description='recursive merge corner cases involving criss-cross merges' . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh # # L1 L2 @@ -537,9 +538,15 @@ test_expect_success 'setup differently handled merges of directory/file conflict git checkout B^0 && test_must_fail git merge C^0 && - git clean -fd && - git rm -rf a/ && - git rm a && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git rm -rf a/ && + git rm a~HEAD + else + git clean -fd && + git rm -rf a/ && + git rm a + fi && git cat-file -p B:a >a2 && git add a2 && git commit -m D2 && @@ -558,7 +565,12 @@ test_expect_success 'setup differently handled merges of directory/file conflict git checkout C^0 && test_must_fail git merge B^0 && - git clean -fd && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git rm a~B^0 + else + git clean -fd + fi && git rm -rf a/ && test_write_lines 1 2 3 4 5 6 7 8 >a && git add a && @@ -567,9 +579,15 @@ test_expect_success 'setup differently handled merges of directory/file conflict git checkout C^0 && test_must_fail git merge B^0 && - git clean -fd && - git rm -rf a/ && - git rm a && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git rm -rf a/ && + git rm a~B^0 + else + git clean -fd && + git rm -rf a/ && + git rm a + fi && test_write_lines 1 2 3 4 5 6 7 8 >a2 && git add a2 && git commit -m E4 && @@ -587,18 +605,34 @@ test_expect_success 'merge of D1 & E1 fails but has appropriate contents' ' test_must_fail git merge -s recursive E1^0 && - git ls-files -s >out && - test_line_count = 2 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 1 out && - - git rev-parse >expect \ - A:ignore-me B:a && - git rev-parse >actual \ - :0:ignore-me :2:a && - test_cmp expect actual + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 3 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >expect \ + A:ignore-me B:a D1:a && + git rev-parse >actual \ + :0:ignore-me :1:a :2:a && + test_cmp expect actual + else + git ls-files -s >out && + test_line_count = 2 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >expect \ + A:ignore-me B:a && + git rev-parse >actual \ + :0:ignore-me :2:a && + test_cmp expect actual + fi ) ' @@ -612,18 +646,34 @@ test_expect_success 'merge of E1 & D1 fails but has appropriate contents' ' test_must_fail git merge -s recursive D1^0 && - git ls-files -s >out && - test_line_count = 2 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 1 out && - - git rev-parse >expect \ - A:ignore-me B:a && - git rev-parse >actual \ - :0:ignore-me :3:a && - test_cmp expect actual + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 3 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >expect \ + A:ignore-me B:a D1:a && + git rev-parse >actual \ + :0:ignore-me :1:a :3:a && + test_cmp expect actual + else + git ls-files -s >out && + test_line_count = 2 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >expect \ + A:ignore-me B:a && + git rev-parse >actual \ + :0:ignore-me :3:a && + test_cmp expect actual + fi ) ' @@ -637,17 +687,32 @@ test_expect_success 'merge of D1 & E2 fails but has appropriate contents' ' test_must_fail git merge -s recursive E2^0 && - git ls-files -s >out && - test_line_count = 4 out && - git ls-files -u >out && - test_line_count = 3 out && - git ls-files -o >out && - test_line_count = 2 out && - - git rev-parse >expect \ - B:a E2:a/file C:a/file A:ignore-me && - git rev-parse >actual \ - :2:a :3:a/file :1:a/file :0:ignore-me && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 5 out && + git ls-files -u >out && + test_line_count = 4 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >expect \ + B:a D1:a E2:a/file C:a/file A:ignore-me && + git rev-parse >actual \ + :1:a~HEAD :2:a~HEAD :3:a/file :1:a/file :0:ignore-me + else + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 3 out && + git ls-files -o >out && + test_line_count = 2 out && + + git rev-parse >expect \ + B:a E2:a/file C:a/file A:ignore-me && + git rev-parse >actual \ + :2:a :3:a/file :1:a/file :0:ignore-me + fi && test_cmp expect actual && test_path_is_file a~HEAD @@ -664,17 +729,32 @@ test_expect_success 'merge of E2 & D1 fails but has appropriate contents' ' test_must_fail git merge -s recursive D1^0 && - git ls-files -s >out && - test_line_count = 4 out && - git ls-files -u >out && - test_line_count = 3 out && - git ls-files -o >out && - test_line_count = 2 out && - - git rev-parse >expect \ - B:a E2:a/file C:a/file A:ignore-me && - git rev-parse >actual \ - :3:a :2:a/file :1:a/file :0:ignore-me && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 5 out && + git ls-files -u >out && + test_line_count = 4 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >expect \ + B:a D1:a E2:a/file C:a/file A:ignore-me && + git rev-parse >actual \ + :1:a~D1^0 :3:a~D1^0 :2:a/file :1:a/file :0:ignore-me + else + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 3 out && + git ls-files -o >out && + test_line_count = 2 out && + + git rev-parse >expect \ + B:a E2:a/file C:a/file A:ignore-me && + git rev-parse >actual \ + :3:a :2:a/file :1:a/file :0:ignore-me + fi && test_cmp expect actual && test_path_is_file a~D1^0 @@ -706,7 +786,7 @@ test_expect_success 'merge of D1 & E3 succeeds' ' ) ' -test_expect_success 'merge of D1 & E4 notifies user a and a2 are related' ' +test_expect_merge_algorithm failure success 'merge of D1 & E4 puts merge of a and a2 in both a and a2' ' test_when_finished "git -C directory-file reset --hard" && test_when_finished "git -C directory-file clean -fdqx" && ( @@ -724,7 +804,7 @@ test_expect_success 'merge of D1 & E4 notifies user a and a2 are related' ' test_line_count = 1 out && git rev-parse >expect \ - A:ignore-me B:a D1:a E4:a2 && + A:ignore-me B:a E4:a2 E4:a2 && git rev-parse >actual \ :0:ignore-me :1:a~Temporary\ merge\ branch\ 2 :2:a :3:a2 && test_cmp expect actual @@ -1069,7 +1149,7 @@ test_expect_success 'setup symlink modify/modify' ' ) ' -test_expect_failure 'check symlink modify/modify' ' +test_expect_merge_algorithm failure success 'check symlink modify/modify' ' ( cd symlink-modify-modify && @@ -1135,7 +1215,7 @@ test_expect_success 'setup symlink add/add' ' ) ' -test_expect_failure 'check symlink add/add' ' +test_expect_merge_algorithm failure success 'check symlink add/add' ' ( cd symlink-add-add && @@ -1223,7 +1303,7 @@ test_expect_success 'setup submodule modify/modify' ' ) ' -test_expect_failure 'check submodule modify/modify' ' +test_expect_merge_algorithm failure success 'check submodule modify/modify' ' ( cd submodule-modify-modify && @@ -1311,7 +1391,7 @@ test_expect_success 'setup submodule add/add' ' ) ' -test_expect_failure 'check submodule add/add' ' +test_expect_merge_algorithm failure success 'check submodule add/add' ' ( cd submodule-add-add && @@ -1386,7 +1466,7 @@ test_expect_success 'setup conflicting entry types (submodule vs symlink)' ' ) ' -test_expect_failure 'check conflicting entry types (submodule vs symlink)' ' +test_expect_merge_algorithm failure success 'check conflicting entry types (submodule vs symlink)' ' ( cd submodule-symlink-add-add && diff --git a/t/t6422-merge-rename-corner-cases.sh b/t/t6422-merge-rename-corner-cases.sh index 3375eaf4e7..78bfaf17f0 100755 --- a/t/t6422-merge-rename-corner-cases.sh +++ b/t/t6422-merge-rename-corner-cases.sh @@ -4,6 +4,7 @@ test_description="recursive merge corner cases w/ renames but not criss-crosses" # t6036 has corner cases that involve both criss-cross merges and renames . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh test_setup_rename_delete_untracked () { test_create_repo rename-delete-untracked && @@ -312,15 +313,18 @@ test_expect_success 'rename/directory conflict + clean content merge' ' git ls-files -u >out && test_line_count = 1 out && git ls-files -o >out && - test_line_count = 2 out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_line_count = 1 out + else + test_line_count = 2 out + fi && echo 0 >expect && git cat-file -p base:file >>expect && echo 7 >>expect && test_cmp expect newfile~HEAD && - test $(git rev-parse :2:newfile) = $(git hash-object expect) && - test_path_is_file newfile/realfile && test_path_is_file newfile~HEAD ) @@ -343,7 +347,12 @@ test_expect_success 'rename/directory conflict + content merge conflict' ' git ls-files -u >out && test_line_count = 3 out && git ls-files -o >out && - test_line_count = 2 out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_line_count = 1 out + else + test_line_count = 2 out + fi && git cat-file -p left-conflict:newfile >left && git cat-file -p base:file >base && @@ -355,10 +364,16 @@ test_expect_success 'rename/directory conflict + content merge conflict' ' left base right && test_cmp left newfile~HEAD && - git rev-parse >expect \ - base:file left-conflict:newfile right:file && - git rev-parse >actual \ - :1:newfile :2:newfile :3:newfile && + git rev-parse >expect \ + base:file left-conflict:newfile right:file && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git rev-parse >actual \ + :1:newfile~HEAD :2:newfile~HEAD :3:newfile~HEAD + else + git rev-parse >actual \ + :1:newfile :2:newfile :3:newfile + fi && test_cmp expect actual && test_path_is_file newfile/realfile && @@ -878,7 +893,7 @@ test_setup_rad () { ) } -test_expect_failure 'rad-check: rename/add/delete conflict' ' +test_expect_merge_algorithm failure success 'rad-check: rename/add/delete conflict' ' test_setup_rad && ( cd rad && @@ -951,7 +966,7 @@ test_setup_rrdd () { ) } -test_expect_failure 'rrdd-check: rename/rename(2to1)/delete/delete conflict' ' +test_expect_merge_algorithm failure success 'rrdd-check: rename/rename(2to1)/delete/delete conflict' ' test_setup_rrdd && ( cd rrdd && @@ -1040,7 +1055,7 @@ test_setup_mod6 () { ) } -test_expect_failure 'mod6-check: chains of rename/rename(1to2) and rename/rename(2to1)' ' +test_expect_merge_algorithm failure success 'mod6-check: chains of rename/rename(1to2) and rename/rename(2to1)' ' test_setup_mod6 && ( cd mod6 && diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh index 06b46af765..4ab133f489 100755 --- a/t/t6423-merge-rename-directories.sh +++ b/t/t6423-merge-rename-directories.sh @@ -26,6 +26,7 @@ test_description="recursive merge with directory renames" # files that might be renamed into each other's paths.) . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh ########################################################################### @@ -301,11 +302,20 @@ test_expect_success '1d: Directory renames cause a rename/rename(2to1) conflict' git cat-file -p :2:x/wham >expect && git cat-file -p :3:x/wham >other && >empty && - test_must_fail git merge-file \ - -L "HEAD" \ - -L "" \ - -L "B^0" \ - expect empty other && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_must_fail git merge-file \ + -L "HEAD:y/wham" \ + -L "" \ + -L "B^0:z/wham" \ + expect empty other + else + test_must_fail git merge-file \ + -L "HEAD" \ + -L "" \ + -L "B^0" \ + expect empty other + fi && test_cmp expect x/wham ) ' @@ -1176,10 +1186,18 @@ test_expect_success '5d: Directory/file/file conflict due to directory rename' ' git ls-files -u >out && test_line_count = 1 out && git ls-files -o >out && - test_line_count = 2 out && - - git rev-parse >actual \ - :0:y/b :0:y/c :0:z/d :0:y/f :2:y/d :0:y/d/e && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_line_count = 1 out && + + git rev-parse >actual \ + :0:y/b :0:y/c :0:z/d :0:y/f :2:y/d~HEAD :0:y/d/e + else + test_line_count = 2 out && + + git rev-parse >actual \ + :0:y/b :0:y/c :0:z/d :0:y/f :2:y/d :0:y/d/e + fi && git rev-parse >expect \ O:z/b O:z/c B:z/d B:z/f A:y/d B:y/d/e && test_cmp expect actual && @@ -1262,17 +1280,32 @@ test_expect_success '6a: Tricky rename/delete' ' test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out && test_i18ngrep "CONFLICT (rename/delete).*z/c.*y/c" out && - git ls-files -s >out && - test_line_count = 2 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 1 out && - - git rev-parse >actual \ - :0:y/b :3:y/c && - git rev-parse >expect \ - O:z/b O:z/c && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 3 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >actual \ + :0:y/b :1:y/c :3:y/c && + git rev-parse >expect \ + O:z/b O:z/c O:z/c + else + git ls-files -s >out && + test_line_count = 2 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >actual \ + :0:y/b :3:y/c && + git rev-parse >expect \ + O:z/b O:z/c + fi && test_cmp expect actual ) ' @@ -1339,7 +1372,7 @@ test_setup_6b1 () { ) } -test_expect_failure '6b1: Same renames done on both sides, plus another rename' ' +test_expect_merge_algorithm failure success '6b1: Same renames done on both sides, plus another rename' ' test_setup_6b1 && ( cd 6b1 && @@ -1412,7 +1445,7 @@ test_setup_6b2 () { ) } -test_expect_failure '6b2: Same rename done on both sides' ' +test_expect_merge_algorithm failure success '6b2: Same rename done on both sides' ' test_setup_6b2 && ( cd 6b2 && @@ -1799,11 +1832,20 @@ test_expect_success '7b: rename/rename(2to1), but only due to transitive rename' git cat-file -p :2:y/d >expect && git cat-file -p :3:y/d >other && >empty && - test_must_fail git merge-file \ - -L "HEAD" \ - -L "" \ - -L "B^0" \ - expect empty other && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_must_fail git merge-file \ + -L "HEAD:y/d" \ + -L "" \ + -L "B^0:z/d" \ + expect empty other + else + test_must_fail git merge-file \ + -L "HEAD" \ + -L "" \ + -L "B^0" \ + expect empty other + fi && test_cmp expect y/d ) ' @@ -1925,17 +1967,32 @@ test_expect_success '7d: transitive rename involved in rename/delete; how is it test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out && test_i18ngrep "CONFLICT (rename/delete).*x/d.*y/d" out && - git ls-files -s >out && - test_line_count = 3 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 1 out && - - git rev-parse >actual \ - :0:y/b :0:y/c :3:y/d && - git rev-parse >expect \ - O:z/b O:z/c O:x/d && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >actual \ + :0:y/b :0:y/c :1:y/d :3:y/d && + git rev-parse >expect \ + O:z/b O:z/c O:x/d O:x/d + else + git ls-files -s >out && + test_line_count = 3 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >actual \ + :0:y/b :0:y/c :3:y/d && + git rev-parse >expect \ + O:z/b O:z/c O:x/d + fi && test_cmp expect actual ) ' @@ -2016,17 +2073,32 @@ test_expect_success '7e: transitive rename in rename/delete AND dirs in the way' test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out && test_i18ngrep "CONFLICT (rename/delete).*x/d.*y/d" out && - git ls-files -s >out && - test_line_count = 5 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 2 out && - - git rev-parse >actual \ - :0:x/d/f :0:y/d/g :0:y/b :0:y/c :3:y/d && - git rev-parse >expect \ - A:x/d/f A:y/d/g O:z/b O:z/c O:x/d && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git ls-files -s >out && + test_line_count = 6 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 1 out && + + git rev-parse >actual \ + :0:x/d/f :0:y/d/g :0:y/b :0:y/c :1:y/d~B^0 :3:y/d~B^0 && + git rev-parse >expect \ + A:x/d/f A:y/d/g O:z/b O:z/c O:x/d O:x/d + else + git ls-files -s >out && + test_line_count = 5 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 2 out && + + git rev-parse >actual \ + :0:x/d/f :0:y/d/g :0:y/b :0:y/c :3:y/d && + git rev-parse >expect \ + A:x/d/f A:y/d/g O:z/b O:z/c O:x/d + fi && test_cmp expect actual && git hash-object y/d~B^0 >actual && @@ -3142,6 +3214,7 @@ test_expect_success '10a: Overwrite untracked with normal rename/delete' ' echo important >z/d && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && + test_path_is_missing .git/MERGE_HEAD && test_i18ngrep "The following untracked working tree files would be overwritten by merge" err && git ls-files -s >out && @@ -3211,21 +3284,34 @@ test_expect_success '10b: Overwrite untracked with dir rename + delete' ' echo contents >y/e && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "CONFLICT (rename/delete).*Version B\^0 of y/d left in tree at y/d~B\^0" out && - test_i18ngrep "Error: Refusing to lose untracked file at y/e; writing to y/e~B\^0 instead" out && - - git ls-files -s >out && - test_line_count = 3 out && - git ls-files -u >out && - test_line_count = 2 out && - git ls-files -o >out && - test_line_count = 5 out && - - git rev-parse >actual \ - :0:y/b :3:y/d :3:y/e && - git rev-parse >expect \ - O:z/b O:z/c B:z/e && - test_cmp expect actual && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err && + + git ls-files -s >out && + test_line_count = 1 out && + git ls-files -u >out && + test_line_count = 0 out && + git ls-files -o >out && + test_line_count = 5 out + else + test_i18ngrep "CONFLICT (rename/delete).*Version B\^0 of y/d left in tree at y/d~B\^0" out && + test_i18ngrep "Error: Refusing to lose untracked file at y/e; writing to y/e~B\^0 instead" out && + + git ls-files -s >out && + test_line_count = 3 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 5 out && + + git rev-parse >actual \ + :0:y/b :3:y/d :3:y/e && + git rev-parse >expect \ + O:z/b O:z/c B:z/e && + test_cmp expect actual + fi && echo very >expect && test_cmp expect y/c && @@ -3288,25 +3374,38 @@ test_expect_success '10c1: Overwrite untracked with dir rename/rename(1to2)' ' echo important >y/c && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "CONFLICT (rename/rename)" out && - test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~B\^0 instead" out && - - git ls-files -s >out && - test_line_count = 6 out && - git ls-files -u >out && - test_line_count = 3 out && - git ls-files -o >out && - test_line_count = 3 out && - - git rev-parse >actual \ - :0:y/a :0:y/b :0:x/d :1:x/c :2:w/c :3:y/c && - git rev-parse >expect \ - O:z/a O:z/b O:x/d O:x/c O:x/c O:x/c && - test_cmp expect actual && - - git hash-object y/c~B^0 >actual && - git rev-parse O:x/c >expect && - test_cmp expect actual && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err && + + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 0 out && + git ls-files -o >out && + test_line_count = 3 out + else + test_i18ngrep "CONFLICT (rename/rename)" out && + test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~B\^0 instead" out && + + git ls-files -s >out && + test_line_count = 6 out && + git ls-files -u >out && + test_line_count = 3 out && + git ls-files -o >out && + test_line_count = 3 out && + + git rev-parse >actual \ + :0:y/a :0:y/b :0:x/d :1:x/c :2:w/c :3:y/c && + git rev-parse >expect \ + O:z/a O:z/b O:x/d O:x/c O:x/c O:x/c && + test_cmp expect actual && + + git hash-object y/c~B^0 >actual && + git rev-parse O:x/c >expect && + test_cmp expect actual + fi && echo important >expect && test_cmp expect y/c @@ -3326,25 +3425,38 @@ test_expect_success '10c2: Overwrite untracked with dir rename/rename(1to2), oth echo important >y/c && test_must_fail git -c merge.directoryRenames=true merge -s recursive A^0 >out 2>err && - test_i18ngrep "CONFLICT (rename/rename)" out && - test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~HEAD instead" out && - - git ls-files -s >out && - test_line_count = 6 out && - git ls-files -u >out && - test_line_count = 3 out && - git ls-files -o >out && - test_line_count = 3 out && - - git rev-parse >actual \ - :0:y/a :0:y/b :0:x/d :1:x/c :3:w/c :2:y/c && - git rev-parse >expect \ - O:z/a O:z/b O:x/d O:x/c O:x/c O:x/c && - test_cmp expect actual && - - git hash-object y/c~HEAD >actual && - git rev-parse O:x/c >expect && - test_cmp expect actual && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err && + + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 0 out && + git ls-files -o >out && + test_line_count = 3 out + else + test_i18ngrep "CONFLICT (rename/rename)" out && + test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~HEAD instead" out && + + git ls-files -s >out && + test_line_count = 6 out && + git ls-files -u >out && + test_line_count = 3 out && + git ls-files -o >out && + test_line_count = 3 out && + + git rev-parse >actual \ + :0:y/a :0:y/b :0:x/d :1:x/c :3:w/c :2:y/c && + git rev-parse >expect \ + O:z/a O:z/b O:x/d O:x/c O:x/c O:x/c && + test_cmp expect actual && + + git hash-object y/c~HEAD >actual && + git rev-parse O:x/c >expect && + test_cmp expect actual + fi && echo important >expect && test_cmp expect y/c @@ -3402,37 +3514,50 @@ test_expect_success '10d: Delete untracked with dir rename/rename(2to1)' ' echo important >y/wham && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "CONFLICT (rename/rename)" out && - test_i18ngrep "Refusing to lose untracked file at y/wham" out && - - git ls-files -s >out && - test_line_count = 6 out && - git ls-files -u >out && - test_line_count = 2 out && - git ls-files -o >out && - test_line_count = 3 out && - - git rev-parse >actual \ - :0:y/a :0:y/b :0:y/d :0:y/e :2:y/wham :3:y/wham && - git rev-parse >expect \ - O:z/a O:z/b O:x/d O:x/e O:z/c O:x/f && - test_cmp expect actual && - - test_must_fail git rev-parse :1:y/wham && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err && + + git ls-files -s >out && + test_line_count = 6 out && + git ls-files -u >out && + test_line_count = 0 out && + git ls-files -o >out && + test_line_count = 3 out + else + test_i18ngrep "CONFLICT (rename/rename)" out && + test_i18ngrep "Refusing to lose untracked file at y/wham" out && + + git ls-files -s >out && + test_line_count = 6 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 3 out && + + git rev-parse >actual \ + :0:y/a :0:y/b :0:y/d :0:y/e :2:y/wham :3:y/wham && + git rev-parse >expect \ + O:z/a O:z/b O:x/d O:x/e O:z/c O:x/f && + test_cmp expect actual && + + test_must_fail git rev-parse :1:y/wham && + + # Test that two-way merge in y/wham~merged is as expected + git cat-file -p :2:y/wham >expect && + git cat-file -p :3:y/wham >other && + >empty && + test_must_fail git merge-file \ + -L "HEAD" \ + -L "" \ + -L "B^0" \ + expect empty other && + test_cmp expect y/wham~merged + fi && echo important >expect && - test_cmp expect y/wham && - - # Test that the two-way merge in y/wham~merged is as expected - git cat-file -p :2:y/wham >expect && - git cat-file -p :3:y/wham >other && - >empty && - test_must_fail git merge-file \ - -L "HEAD" \ - -L "" \ - -L "B^0" \ - expect empty other && - test_cmp expect y/wham~merged + test_cmp expect y/wham ) ' @@ -3471,7 +3596,7 @@ test_setup_10e () { ) } -test_expect_failure '10e: Does git complain about untracked file that is not really in the way?' ' +test_expect_merge_algorithm failure success '10e: Does git complain about untracked file that is not really in the way?' ' test_setup_10e && ( cd 10e && @@ -3562,28 +3687,35 @@ test_expect_success '11a: Avoid losing dirty contents with simple rename' ' echo stuff >>z/c && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "Refusing to lose dirty file at z/c" out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err + else + test_i18ngrep "Refusing to lose dirty file at z/c" out && + + git ls-files -s >out && + test_line_count = 2 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 3 out && + + git rev-parse >actual \ + :0:z/a :2:z/c && + git rev-parse >expect \ + O:z/a B:z/b && + test_cmp expect actual && + + git hash-object z/c~HEAD >actual && + git rev-parse B:z/b >expect && + test_cmp expect actual + fi && test_seq 1 10 >expected && echo stuff >>expected && - test_cmp expected z/c && - - git ls-files -s >out && - test_line_count = 2 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 4 out && - - git rev-parse >actual \ - :0:z/a :2:z/c && - git rev-parse >expect \ - O:z/a B:z/b && - test_cmp expect actual && + test_cmp expected z/c - git hash-object z/c~HEAD >actual && - git rev-parse B:z/b >expect && - test_cmp expect actual ) ' @@ -3634,32 +3766,39 @@ test_expect_success '11b: Avoid losing dirty file involved in directory rename' git checkout A^0 && echo stuff >>z/c && - git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "Refusing to lose dirty file at z/c" out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err + else + git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && + test_i18ngrep "Refusing to lose dirty file at z/c" out && + + git ls-files -s >out && + test_line_count = 3 out && + git ls-files -u >out && + test_line_count = 0 out && + git ls-files -m >out && + test_line_count = 0 out && + git ls-files -o >out && + test_line_count = 3 out && + + git rev-parse >actual \ + :0:x/b :0:y/a :0:y/c && + git rev-parse >expect \ + O:x/b O:z/a B:x/c && + test_cmp expect actual && + + git hash-object y/c >actual && + git rev-parse B:x/c >expect && + test_cmp expect actual + fi && grep -q stuff z/c && test_seq 1 10 >expected && echo stuff >>expected && - test_cmp expected z/c && - - git ls-files -s >out && - test_line_count = 3 out && - git ls-files -u >out && - test_line_count = 0 out && - git ls-files -m >out && - test_line_count = 0 out && - git ls-files -o >out && - test_line_count = 4 out && - - git rev-parse >actual \ - :0:x/b :0:y/a :0:y/c && - git rev-parse >expect \ - O:x/b O:z/a B:x/c && - test_cmp expect actual && - - git hash-object y/c >actual && - git rev-parse B:x/c >expect && - test_cmp expect actual + test_cmp expected z/c ) ' @@ -3711,7 +3850,13 @@ test_expect_success '11c: Avoid losing not-uptodate with rename + D/F conflict' echo stuff >>y/c && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "following files would be overwritten by merge" err && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err + else + test_i18ngrep "following files would be overwritten by merge" err + fi && grep -q stuff y/c && test_seq 1 10 >expected && @@ -3779,29 +3924,35 @@ test_expect_success '11d: Avoid losing not-uptodate with rename + D/F conflict' echo stuff >>z/c && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "Refusing to lose dirty file at z/c" out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err + else + test_i18ngrep "Refusing to lose dirty file at z/c" out && + + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 1 out && + git ls-files -o >out && + test_line_count = 4 out && + + git rev-parse >actual \ + :0:x/b :0:y/a :0:y/c/d :3:y/c && + git rev-parse >expect \ + O:x/b O:z/a B:y/c/d B:x/c && + test_cmp expect actual && + + git hash-object y/c~HEAD >actual && + git rev-parse B:x/c >expect && + test_cmp expect actual + fi && grep -q stuff z/c && test_seq 1 10 >expected && echo stuff >>expected && - test_cmp expected z/c && - - git ls-files -s >out && - test_line_count = 4 out && - git ls-files -u >out && - test_line_count = 1 out && - git ls-files -o >out && - test_line_count = 5 out && - - git rev-parse >actual \ - :0:x/b :0:y/a :0:y/c/d :3:y/c && - git rev-parse >expect \ - O:x/b O:z/a B:y/c/d B:x/c && - test_cmp expect actual && - - git hash-object y/c~HEAD >actual && - git rev-parse B:x/c >expect && - test_cmp expect actual + test_cmp expected z/c ) ' @@ -3859,37 +4010,43 @@ test_expect_success '11e: Avoid deleting not-uptodate with dir rename/rename(1to echo mods >>y/c && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "CONFLICT (rename/rename)" out && - test_i18ngrep "Refusing to lose dirty file at y/c" out && - - git ls-files -s >out && - test_line_count = 7 out && - git ls-files -u >out && - test_line_count = 4 out && - git ls-files -o >out && - test_line_count = 3 out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err + else + test_i18ngrep "CONFLICT (rename/rename)" out && + test_i18ngrep "Refusing to lose dirty file at y/c" out && + + git ls-files -s >out && + test_line_count = 7 out && + git ls-files -u >out && + test_line_count = 4 out && + git ls-files -o >out && + test_line_count = 3 out && + + git rev-parse >actual \ + :0:y/a :0:y/b :0:x/d :1:x/c :2:w/c :2:y/c :3:y/c && + git rev-parse >expect \ + O:z/a O:z/b O:x/d O:x/c O:x/c A:y/c O:x/c && + test_cmp expect actual && + + # See if y/c~merged has expected contents; requires manually + # doing the expected file merge + git cat-file -p A:y/c >c1 && + git cat-file -p B:z/c >c2 && + >empty && + test_must_fail git merge-file \ + -L "HEAD" \ + -L "" \ + -L "B^0" \ + c1 empty c2 && + test_cmp c1 y/c~merged + fi && echo different >expected && echo mods >>expected && - test_cmp expected y/c && - - git rev-parse >actual \ - :0:y/a :0:y/b :0:x/d :1:x/c :2:w/c :2:y/c :3:y/c && - git rev-parse >expect \ - O:z/a O:z/b O:x/d O:x/c O:x/c A:y/c O:x/c && - test_cmp expect actual && - - # See if y/c~merged has expected contents; requires manually - # doing the expected file merge - git cat-file -p A:y/c >c1 && - git cat-file -p B:z/c >c2 && - >empty && - test_must_fail git merge-file \ - -L "HEAD" \ - -L "" \ - -L "B^0" \ - c1 empty c2 && - test_cmp c1 y/c~merged + test_cmp expected y/c ) ' @@ -3942,38 +4099,44 @@ test_expect_success '11f: Avoid deleting not-uptodate with dir rename/rename(2to echo important >>y/wham && test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err && - test_i18ngrep "CONFLICT (rename/rename)" out && - test_i18ngrep "Refusing to lose dirty file at y/wham" out && - - git ls-files -s >out && - test_line_count = 4 out && - git ls-files -u >out && - test_line_count = 2 out && - git ls-files -o >out && - test_line_count = 3 out && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_path_is_missing .git/MERGE_HEAD && + test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err + else + test_i18ngrep "CONFLICT (rename/rename)" out && + test_i18ngrep "Refusing to lose dirty file at y/wham" out && + + git ls-files -s >out && + test_line_count = 4 out && + git ls-files -u >out && + test_line_count = 2 out && + git ls-files -o >out && + test_line_count = 3 out && + + test_must_fail git rev-parse :1:y/wham && + + git rev-parse >actual \ + :0:y/a :0:y/b :2:y/wham :3:y/wham && + git rev-parse >expect \ + O:z/a O:z/b O:x/c O:x/d && + test_cmp expect actual && + + # Test that two-way merge in y/wham~merged is as expected + git cat-file -p :2:y/wham >expect && + git cat-file -p :3:y/wham >other && + >empty && + test_must_fail git merge-file \ + -L "HEAD" \ + -L "" \ + -L "B^0" \ + expect empty other && + test_cmp expect y/wham~merged + fi && test_seq 1 10 >expected && echo important >>expected && - test_cmp expected y/wham && - - test_must_fail git rev-parse :1:y/wham && - - git rev-parse >actual \ - :0:y/a :0:y/b :2:y/wham :3:y/wham && - git rev-parse >expect \ - O:z/a O:z/b O:x/c O:x/d && - test_cmp expect actual && - - # Test that the two-way merge in y/wham~merged is as expected - git cat-file -p :2:y/wham >expect && - git cat-file -p :3:y/wham >other && - >empty && - test_must_fail git merge-file \ - -L "HEAD" \ - -L "" \ - -L "B^0" \ - expect empty other && - test_cmp expect y/wham~merged + test_cmp expected y/wham ) ' @@ -4104,7 +4267,7 @@ test_setup_12b1 () { ) } -test_expect_failure '12b1: Moving two directory hierarchies into each other' ' +test_expect_merge_algorithm failure success '12b1: Moving two directory hierarchies into each other' ' test_setup_12b1 && ( cd 12b1 && @@ -4272,7 +4435,7 @@ test_setup_12c1 () { ) } -test_expect_failure '12c1: Moving one directory hierarchy into another w/ content merge' ' +test_expect_merge_algorithm failure success '12c1: Moving one directory hierarchy into another w/ content merge' ' test_setup_12c1 && ( cd 12c1 && @@ -4562,20 +4725,22 @@ test_expect_success '12e: Rename/merge subdir into the root, variant 2' ' # folder/subdir/newsubdir/e_Merge2 # folder/subdir/tweaked/{h,Makefile_SUB_Merge1,newfile.py} # folder/unchanged/<LOTS OF FILES> -# -# Notes: This testcase happens to exercise lots of the -# optimization-specific codepaths in merge-ort, and also -# demonstrated a failing of the directory rename detection algorithm -# in merge-recursive; newfile.c should not get pushed into -# folder/subdir/newsubdir/, yet merge-recursive put it there because -# the rename of dir/subdir/{a,b,c,d} -> folder/subdir/{a,b,c,d} -# looks like -# dir/ -> folder/, -# whereas the rename of dir/subdir/e -> folder/subdir/newsubdir/e -# looks like -# dir/subdir/ -> folder/subdir/newsubdir/ -# and if we note that newfile.c is found in dir/subdir/, we might -# overlook the dir/ -> folder/ rule that has more weight. +# Things being checked here: +# 1. dir/subdir/newfile.c does not get pushed into folder/subdir/newsubdir/. +# dir/subdir/{a,b,c,d} -> folder/subdir/{a,b,c,d} looks like +# dir/ -> folder/, +# whereas dir/subdir/e -> folder/subdir/newsubdir/e looks like +# dir/subdir/ -> folder/subdir/newsubdir/ +# and if we note that newfile.c is found in dir/subdir/, we might overlook +# the dir/ -> folder/ rule that has more weight. Older git versions did +# this. +# 2. The code to do trivial directory resolves. Note that +# dir/subdir/unchanged/ is unchanged and can be deleted, and files in the +# new folder/subdir/unchanged/ are not needed as a target to any renames. +# Thus, in the second collect_merge_info_callback() we can just resolve +# these two directories trivially without recursing.) +# 3. Exercising the codepaths for caching renames and deletes from one cherry +# pick and re-applying them in the subsequent one. test_setup_12f () { test_create_repo 12f && @@ -4632,7 +4797,7 @@ test_setup_12f () { ) } -test_expect_failure '12f: Trivial directory resolve, caching, all kinds of fun' ' +test_expect_merge_algorithm failure success '12f: Trivial directory resolve, caching, all kinds of fun' ' test_setup_12f && ( cd 12f && @@ -4640,7 +4805,7 @@ test_expect_failure '12f: Trivial directory resolve, caching, all kinds of fun' git checkout A^0 && git branch Bmod B && - git -c merge.directoryRenames=true rebase A Bmod && + GIT_TRACE2_PERF="$(pwd)/trace.output" git -c merge.directoryRenames=true rebase A Bmod && echo Checking the pick of B1... && @@ -4721,7 +4886,12 @@ test_expect_failure '12f: Trivial directory resolve, caching, all kinds of fun' test_seq 2 12 >e_Merge2 && git hash-object e_Merge2 >expect && git rev-parse Bmod:folder/subdir/newsubdir/e >actual && - test_cmp expect actual + test_cmp expect actual && + + grep region_enter.*collect_merge_info trace.output >collect && + test_line_count = 4 collect && + grep region_enter.*process_entries$ trace.output >process && + test_line_count = 2 process ) ' diff --git a/t/t6426-merge-skip-unneeded-updates.sh b/t/t6426-merge-skip-unneeded-updates.sh index 699813671c..d7eeee4310 100755 --- a/t/t6426-merge-skip-unneeded-updates.sh +++ b/t/t6426-merge-skip-unneeded-updates.sh @@ -23,6 +23,7 @@ test_description="merge cases" # files that might be renamed into each other's paths.) . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh ########################################################################### @@ -666,7 +667,7 @@ test_setup_4a () { # correct requires doing the merge in-memory first, then realizing that no # updates to the file are necessary, and thus that we can just leave the path # alone. -test_expect_failure '4a: Change on A, change on B subset of A, dirty mods present' ' +test_expect_merge_algorithm failure success '4a: Change on A, change on B subset of A, dirty mods present' ' test_setup_4a && ( cd 4a && diff --git a/t/t6430-merge-recursive.sh b/t/t6430-merge-recursive.sh index a328260d42..9c08e63af2 100755 --- a/t/t6430-merge-recursive.sh +++ b/t/t6430-merge-recursive.sh @@ -3,6 +3,7 @@ test_description='merge-recursive backend test' . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh test_expect_success 'setup 1' ' @@ -641,7 +642,7 @@ test_expect_success 'merge-recursive copy vs. rename' ' test_cmp expected actual ' -test_expect_failure 'merge-recursive rename vs. rename/symlink' ' +test_expect_merge_algorithm failure success 'merge-recursive rename vs. rename/symlink' ' git checkout -f rename && git merge rename-ln && diff --git a/t/t6436-merge-overwrite.sh b/t/t6436-merge-overwrite.sh index dd8ab7ede1..dd9376842f 100755 --- a/t/t6436-merge-overwrite.sh +++ b/t/t6436-merge-overwrite.sh @@ -97,11 +97,19 @@ test_expect_success 'will not overwrite unstaged changes in renamed file' ' git mv c1.c other.c && git commit -m rename && cp important other.c && - test_must_fail git merge c1a >out && - test_i18ngrep "Refusing to lose dirty file at other.c" out && - test_path_is_file other.c~HEAD && - test $(git hash-object other.c~HEAD) = $(git rev-parse c1a:c1.c) && - test_cmp important other.c + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_must_fail git merge c1a >out 2>err && + test_i18ngrep "would be overwritten by merge" err && + test_cmp important other.c && + test_path_is_missing .git/MERGE_HEAD + else + test_must_fail git merge c1a >out && + test_i18ngrep "Refusing to lose dirty file at other.c" out && + test_path_is_file other.c~HEAD && + test $(git hash-object other.c~HEAD) = $(git rev-parse c1a:c1.c) && + test_cmp important other.c + fi ' test_expect_success 'will not overwrite untracked subtree' ' diff --git a/t/t6437-submodule-merge.sh b/t/t6437-submodule-merge.sh index 6a1e5f8232..3ead2b726f 100755 --- a/t/t6437-submodule-merge.sh +++ b/t/t6437-submodule-merge.sh @@ -127,7 +127,12 @@ test_expect_success 'merging should conflict for non fast-forward' ' git checkout -b test-nonforward b && (cd sub && git rev-parse sub-d > ../expect) && - test_must_fail git merge c 2> actual && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_must_fail git merge c >actual + else + test_must_fail git merge c 2> actual + fi && grep $(cat expect) actual > /dev/null && git reset --hard) ' @@ -138,9 +143,21 @@ test_expect_success 'merging should fail for ambiguous common parent' ' (cd sub && git checkout -b ambiguous sub-b && git merge sub-c && - git rev-parse sub-d > ../expect1 && - git rev-parse ambiguous > ../expect2) && - test_must_fail git merge c 2> actual && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + git rev-parse --short sub-d >../expect1 && + git rev-parse --short ambiguous >../expect2 + else + git rev-parse sub-d > ../expect1 && + git rev-parse ambiguous > ../expect2 + fi + ) && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + test_must_fail git merge c >actual + else + test_must_fail git merge c 2> actual + fi && grep $(cat expect1) actual > /dev/null && grep $(cat expect2) actual > /dev/null && git reset --hard) diff --git a/t/t7602-merge-octopus-many.sh b/t/t7602-merge-octopus-many.sh index 6abe441ae3..13859ec859 100755 --- a/t/t7602-merge-octopus-many.sh +++ b/t/t7602-merge-octopus-many.sh @@ -77,6 +77,12 @@ Merge made by the 'recursive' strategy. EOF test_expect_success 'merge reduces irrelevant remote heads' ' + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + mv expected expected.tmp && + sed s/recursive/ort/ expected.tmp >expected && + rm expected.tmp + fi && GIT_MERGE_VERBOSITY=0 git merge c4 c5 >actual && test_i18ncmp expected actual ' diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index ad288ddc69..70afdd06fa 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -532,7 +532,14 @@ test_expect_success 'file vs modified submodule' ' yes "" | git mergetool file1 file2 spaced\ name subdir/file3 && yes "" | git mergetool both && yes "d" | git mergetool file11 file12 && - yes "l" | git mergetool submod && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + yes "c" | git mergetool submod~HEAD && + git rm submod && + git mv submod~HEAD submod + else + yes "l" | git mergetool submod + fi && git submodule update -N && echo "not a submodule" >expect && test_cmp expect submod && @@ -549,7 +556,15 @@ test_expect_success 'file vs modified submodule' ' yes "" | git mergetool file1 file2 spaced\ name subdir/file3 && yes "" | git mergetool both && yes "d" | git mergetool file11 file12 && - yes "r" | git mergetool submod && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + mv submod submod.orig && + git rm --cached submod && + yes "c" | git mergetool submod~test19 && + git mv submod~test19 submod + else + yes "r" | git mergetool submod + fi && test -d submod.orig && git submodule update -N && echo "not a submodule" >expect && @@ -567,6 +582,10 @@ test_expect_success 'file vs modified submodule' ' yes "" | git mergetool both && yes "d" | git mergetool file11 file12 && yes "l" | git mergetool submod && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + yes "d" | git mergetool submod~test19 + fi && echo "master submodule" >expect && test_cmp expect submod/bar && git submodule update -N && @@ -664,7 +683,14 @@ test_expect_success 'directory vs modified submodule' ' test_must_fail git merge master && test -n "$(git ls-files -u)" && test ! -e submod.orig && - yes "r" | git mergetool submod && + if test "$GIT_TEST_MERGE_ALGORITHM" = ort + then + yes "r" | git mergetool submod~master && + git mv submod submod.orig && + git mv submod~master submod + else + yes "r" | git mergetool submod + fi && test -d submod.orig && echo "not a submodule" >expect && test_cmp expect submod.orig/file16 && diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh index 524f30f7dc..a578b35761 100755 --- a/t/t7800-difftool.sh +++ b/t/t7800-difftool.sh @@ -728,6 +728,19 @@ test_expect_success 'add -N and difftool -d' ' git difftool --dir-diff --extcmd ls ' +test_expect_success 'difftool --cached with unmerged files' ' + test_when_finished git reset --hard && + + test_commit conflicting && + test_commit conflict-a conflict.t a && + git reset --hard conflicting && + test_commit conflict-b conflict.t b && + test_must_fail git merge conflict-a && + + git difftool --cached --no-prompt >output && + test_must_be_empty output +' + test_expect_success 'outside worktree' ' echo 1 >1 && echo 2 >2 && diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh index b2def8bb16..d9e68bb2bf 100755 --- a/t/t7900-maintenance.sh +++ b/t/t7900-maintenance.sh @@ -9,7 +9,7 @@ GIT_TEST_MULTI_PACK_INDEX=0 test_expect_success 'help text' ' test_expect_code 129 git maintenance -h 2>err && - test_i18ngrep "usage: git maintenance run" err && + test_i18ngrep "usage: git maintenance <subcommand>" err && test_expect_code 128 git maintenance barf 2>err && test_i18ngrep "invalid subcommand: barf" err && test_expect_code 129 git maintenance 2>err && @@ -28,6 +28,19 @@ test_expect_success 'run [--auto|--quiet]' ' test_subcommand git gc --no-quiet <run-no-quiet.txt ' +test_expect_success 'maintenance.auto config option' ' + GIT_TRACE2_EVENT="$(pwd)/default" git commit --quiet --allow-empty -m 1 && + test_subcommand git maintenance run --auto --quiet <default && + GIT_TRACE2_EVENT="$(pwd)/true" \ + git -c maintenance.auto=true \ + commit --quiet --allow-empty -m 2 && + test_subcommand git maintenance run --auto --quiet <true && + GIT_TRACE2_EVENT="$(pwd)/false" \ + git -c maintenance.auto=false \ + commit --quiet --allow-empty -m 3 && + test_subcommand ! git maintenance run --auto --quiet <false +' + test_expect_success 'maintenance.<task>.enabled' ' git config maintenance.gc.enabled false && git config maintenance.commit-graph.enabled true && @@ -284,4 +297,148 @@ test_expect_success 'maintenance.incremental-repack.auto' ' test_subcommand git multi-pack-index write --no-progress <trace-B ' +test_expect_success '--auto and --schedule incompatible' ' + test_must_fail git maintenance run --auto --schedule=daily 2>err && + test_i18ngrep "at most one" err +' + +test_expect_success 'invalid --schedule value' ' + test_must_fail git maintenance run --schedule=annually 2>err && + test_i18ngrep "unrecognized --schedule" err +' + +test_expect_success '--schedule inheritance weekly -> daily -> hourly' ' + git config maintenance.loose-objects.enabled true && + git config maintenance.loose-objects.schedule hourly && + git config maintenance.commit-graph.enabled true && + git config maintenance.commit-graph.schedule daily && + git config maintenance.incremental-repack.enabled true && + git config maintenance.incremental-repack.schedule weekly && + + GIT_TRACE2_EVENT="$(pwd)/hourly.txt" \ + git maintenance run --schedule=hourly 2>/dev/null && + test_subcommand git prune-packed --quiet <hourly.txt && + test_subcommand ! git commit-graph write --split --reachable \ + --no-progress <hourly.txt && + test_subcommand ! git multi-pack-index write --no-progress <hourly.txt && + + GIT_TRACE2_EVENT="$(pwd)/daily.txt" \ + git maintenance run --schedule=daily 2>/dev/null && + test_subcommand git prune-packed --quiet <daily.txt && + test_subcommand git commit-graph write --split --reachable \ + --no-progress <daily.txt && + test_subcommand ! git multi-pack-index write --no-progress <daily.txt && + + GIT_TRACE2_EVENT="$(pwd)/weekly.txt" \ + git maintenance run --schedule=weekly 2>/dev/null && + test_subcommand git prune-packed --quiet <weekly.txt && + test_subcommand git commit-graph write --split --reachable \ + --no-progress <weekly.txt && + test_subcommand git multi-pack-index write --no-progress <weekly.txt +' + +test_expect_success 'maintenance.strategy inheritance' ' + for task in commit-graph loose-objects incremental-repack + do + git config --unset maintenance.$task.schedule || return 1 + done && + + test_when_finished git config --unset maintenance.strategy && + git config maintenance.strategy incremental && + + GIT_TRACE2_EVENT="$(pwd)/incremental-hourly.txt" \ + git maintenance run --schedule=hourly --quiet && + GIT_TRACE2_EVENT="$(pwd)/incremental-daily.txt" \ + git maintenance run --schedule=daily --quiet && + + test_subcommand git commit-graph write --split --reachable \ + --no-progress <incremental-hourly.txt && + test_subcommand ! git prune-packed --quiet <incremental-hourly.txt && + test_subcommand ! git multi-pack-index write --no-progress \ + <incremental-hourly.txt && + + test_subcommand git commit-graph write --split --reachable \ + --no-progress <incremental-daily.txt && + test_subcommand git prune-packed --quiet <incremental-daily.txt && + test_subcommand git multi-pack-index write --no-progress \ + <incremental-daily.txt && + + # Modify defaults + git config maintenance.commit-graph.schedule daily && + git config maintenance.loose-objects.schedule hourly && + git config maintenance.incremental-repack.enabled false && + + GIT_TRACE2_EVENT="$(pwd)/modified-hourly.txt" \ + git maintenance run --schedule=hourly --quiet && + GIT_TRACE2_EVENT="$(pwd)/modified-daily.txt" \ + git maintenance run --schedule=daily --quiet && + + test_subcommand ! git commit-graph write --split --reachable \ + --no-progress <modified-hourly.txt && + test_subcommand git prune-packed --quiet <modified-hourly.txt && + test_subcommand ! git multi-pack-index write --no-progress \ + <modified-hourly.txt && + + test_subcommand git commit-graph write --split --reachable \ + --no-progress <modified-daily.txt && + test_subcommand git prune-packed --quiet <modified-daily.txt && + test_subcommand ! git multi-pack-index write --no-progress \ + <modified-daily.txt +' + +test_expect_success 'register and unregister' ' + test_when_finished git config --global --unset-all maintenance.repo && + git config --global --add maintenance.repo /existing1 && + git config --global --add maintenance.repo /existing2 && + git config --global --get-all maintenance.repo >before && + + git maintenance register && + test_cmp_config false maintenance.auto && + git config --global --get-all maintenance.repo >between && + cp before expect && + pwd >>expect && + test_cmp expect between && + + git maintenance unregister && + git config --global --get-all maintenance.repo >actual && + test_cmp before actual +' + +test_expect_success 'start from empty cron table' ' + GIT_TEST_CRONTAB="test-tool crontab cron.txt" git maintenance start && + + # start registers the repo + git config --get --global maintenance.repo "$(pwd)" && + + grep "for-each-repo --config=maintenance.repo maintenance run --schedule=daily" cron.txt && + grep "for-each-repo --config=maintenance.repo maintenance run --schedule=hourly" cron.txt && + grep "for-each-repo --config=maintenance.repo maintenance run --schedule=weekly" cron.txt +' + +test_expect_success 'stop from existing schedule' ' + GIT_TEST_CRONTAB="test-tool crontab cron.txt" git maintenance stop && + + # stop does not unregister the repo + git config --get --global maintenance.repo "$(pwd)" && + + # Operation is idempotent + GIT_TEST_CRONTAB="test-tool crontab cron.txt" git maintenance stop && + test_must_be_empty cron.txt +' + +test_expect_success 'start preserves existing schedule' ' + echo "Important information!" >cron.txt && + GIT_TEST_CRONTAB="test-tool crontab cron.txt" git maintenance start && + grep "Important information!" cron.txt +' + +test_expect_success 'register preserves existing strategy' ' + git config maintenance.strategy none && + git maintenance register && + test_config maintenance.strategy none && + git config --unset maintenance.strategy && + git maintenance register && + test_config maintenance.strategy incremental +' + test_done diff --git a/t/t8013-blame-ignore-revs.sh b/t/t8013-blame-ignore-revs.sh index 24ae5018e8..b18633dee1 100755 --- a/t/t8013-blame-ignore-revs.sh +++ b/t/t8013-blame-ignore-revs.sh @@ -39,10 +39,10 @@ test_expect_success 'validate --ignore-rev' ' test_must_fail git blame --ignore-rev X^{tree} file ' -# Ensure bogus --ignore-revs-file requests are caught +# Ensure bogus --ignore-revs-file requests are silently accepted test_expect_success 'validate --ignore-revs-file' ' git rev-parse X^{tree} >ignore_x && - test_must_fail git blame --ignore-revs-file ignore_x file + git blame --ignore-revs-file ignore_x file ' for I in X XT diff --git a/t/t9303-fast-import-compression.sh b/t/t9303-fast-import-compression.sh index 5045f02a53..57d916524e 100755 --- a/t/t9303-fast-import-compression.sh +++ b/t/t9303-fast-import-compression.sh @@ -3,12 +3,6 @@ test_description='compression setting of fast-import utility' . ./test-lib.sh -# This should be moved to test-lib.sh together with the -# copy in t0021 after both topics have graduated to 'master'. -file_size () { - test-tool path-utils file-size "$1" -} - import_large () { ( echo blob @@ -24,7 +18,7 @@ do test_when_finished "rm -f .git/objects/pack/pack-*.*" && test_when_finished "rm -rf .git/objects/??" && import_large -c fastimport.unpacklimit=0 $config && - sz=$(file_size .git/objects/pack/pack-*.pack) && + sz=$(test_file_size .git/objects/pack/pack-*.pack) && case "$expect" in small) test "$sz" -le 100000 ;; large) test "$sz" -ge 100000 ;; @@ -47,7 +41,7 @@ do test_when_finished "rm -f .git/objects/pack/pack-*.*" && test_when_finished "rm -rf .git/objects/??" && import_large -c fastimport.unpacklimit=9 $config && - sz=$(file_size .git/objects/??/????*) && + sz=$(test_file_size .git/objects/??/????*) && case "$expect" in small) test "$sz" -le 100000 ;; large) test "$sz" -ge 100000 ;; diff --git a/t/t9603-cvsimport-patchsets.sh b/t/t9603-cvsimport-patchsets.sh index 3e64b11eac..e7a91611dc 100755 --- a/t/t9603-cvsimport-patchsets.sh +++ b/t/t9603-cvsimport-patchsets.sh @@ -17,23 +17,23 @@ test_description='git cvsimport testing for correct patchset estimation' setup_cvs_test_repository t9603 test_expect_failure PERL 'import with criss cross times on revisions' ' - - git cvsimport -p"-x" -C module-git module && - (cd module-git && - git log --pretty=format:%s > ../actual-master && - git log A~2..A --pretty="format:%s %ad" -- > ../actual-A && - echo "" >> ../actual-master && - echo "" >> ../actual-A - ) && - echo "Rev 4 + git cvsimport -p"-x" -C module-git module && + ( + cd module-git && + git log --pretty=format:%s > ../actual-master && + git log A~2..A --pretty="format:%s %ad" -- > ../actual-A && + echo "" >> ../actual-master && + echo "" >> ../actual-A + ) && + echo "Rev 4 Rev 3 Rev 2 Rev 1" > expect-master && - test_cmp expect-master actual-master && + test_cmp expect-master actual-master && - echo "Rev 5 Branch A Wed Mar 11 19:09:10 2009 +0000 + echo "Rev 5 Branch A Wed Mar 11 19:09:10 2009 +0000 Rev 4 Branch A Wed Mar 11 19:03:52 2009 +0000" > expect-A && - test_cmp expect-A actual-A + test_cmp expect-A actual-A ' test_done diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 4a35bde145..59bbf75e83 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -783,6 +783,10 @@ test_line_count () { fi } +test_file_size () { + test-tool path-utils file-size "$1" +} + # Returns success if a comma separated string of keywords ($1) contains a # given keyword ($2). # Examples: diff --git a/t/test-lib.sh b/t/test-lib.sh index fa347ed3e1..a863ccee7e 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -1711,6 +1711,7 @@ test_lazy_prereq SHA1 ' test_lazy_prereq REBASE_P ' test -z "$GIT_TEST_SKIP_REBASE_P" ' + # Special-purpose prereq for transitioning to a new default branch name: # Some tests need more than just a mindless (case-preserving) s/master/main/g # replacement. The non-trivial adjustments are guarded behind this @@ -1718,3 +1719,9 @@ test_lazy_prereq REBASE_P ' test_lazy_prereq PREPARE_FOR_MAIN_BRANCH ' test "$GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME" = main ' + +# Ensure that no test accidentally triggers a Git command +# that runs 'crontab', affecting a user's cron schedule. +# Tests that verify the cron integration must set this locally +# to avoid errors. +GIT_TEST_CRONTAB="exit 1" diff --git a/upload-pack.c b/upload-pack.c index 3b858eb457..5dc8e1f844 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -1344,7 +1344,18 @@ void upload_pack(struct upload_pack_options *options) PACKET_READ_DIE_ON_ERR_PACKET); receive_needs(&data, &reader); - if (data.want_obj.nr) { + + /* + * An EOF at this exact point in negotiation should be + * acceptable from stateless clients as they will consume the + * shallow list before doing subsequent rpc with haves/etc. + */ + if (data.stateless_rpc) + reader.options |= PACKET_READ_GENTLE_ON_EOF; + + if (data.want_obj.nr && + packet_reader_peek(&reader) != PACKET_READ_EOF) { + reader.options &= ~PACKET_READ_GENTLE_ON_EOF; get_common_commits(&data, &reader); create_pack_file(&data, NULL); } |