Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
git-mirror
/
git
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
0
Pull requests
0
Actions
Projects
0
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security
Insights
Files
3c86474
Documentation
block-sha1
builtin
compat
contrib
git-gui
gitk-git
gitweb
mergetools
perl
po
ppc
t
Git-SVN
lib-gpg
lib-httpd
perf
t0110
t0200
t0202
t1013
t1509
t3900
t4013
t4020
t4034
t4100
t4101
t4109
t4110
t4135
t4211
t4252
t5000
t5003
t5004
t5100
t5515
t7500
t8005
t9110
t9111
t9115
t9121
t9126
t9135
t9136
t9150
t9151
t9153
t9154
t9161
t9601
t9602
t9603
t9604
t9700
valgrind
.gitattributes
.gitignore
Makefile
README
aggregate-results.sh
annotate-tests.sh
check-non-portable-shell.pl
diff-lib.sh
gitweb-lib.sh
lib-bash.sh
lib-credential.sh
lib-cvs.sh
lib-diff-alternative.sh
lib-gettext.sh
lib-git-daemon.sh
lib-git-p4.sh
lib-git-svn.sh
lib-gpg.sh
lib-httpd.sh
lib-pack.sh
lib-pager.sh
lib-patch-mode.sh
lib-prereq-FILEMODE.sh
lib-read-tree-m-3way.sh
lib-read-tree.sh
lib-rebase.sh
lib-t6000.sh
lib-terminal.sh
t0000-basic.sh
t0001-init.sh
t0002-gitfile.sh
t0003-attributes.sh
t0004-unwritable.sh
t0005-signals.sh
t0006-date.sh
t0007-git-var.sh
t0008-ignores.sh
t0009-prio-queue.sh
t0010-racy-git.sh
t0020-crlf.sh
t0021-conversion.sh
t0022-crlf-rename.sh
t0023-crlf-am.sh
t0024-crlf-archive.sh
t0025-crlf-auto.sh
t0026-eol-config.sh
t0030-stripspace.sh
t0040-parse-options.sh
t0050-filesystem.sh
t0055-beyond-symlinks.sh
t0056-git-C.sh
t0060-path-utils.sh
t0061-run-command.sh
t0062-revision-walking.sh
t0063-string-list.sh
t0070-fundamental.sh
t0081-line-buffer.sh
t0090-cache-tree.sh
t0100-previous.sh
t0101-at-syntax.sh
t0110-urlmatch-normalization.sh
t0200-gettext-basic.sh
t0201-gettext-fallbacks.sh
t0202-gettext-perl.sh
t0203-gettext-setlocale-sanity.sh
t0204-gettext-reencode-sanity.sh
t0205-gettext-poison.sh
t0300-credentials.sh
t0301-credential-cache.sh
t0302-credential-store.sh
t0303-credential-external.sh
t1000-read-tree-m-3way.sh
t1001-read-tree-m-2way.sh
t1002-read-tree-m-u-2way.sh
t1003-read-tree-prefix.sh
t1004-read-tree-m-u-wf.sh
t1005-read-tree-reset.sh
t1006-cat-file.sh
t1007-hash-object.sh
t1008-read-tree-overlay.sh
t1009-read-tree-new-index.sh
t1010-mktree.sh
t1011-read-tree-sparse-checkout.sh
t1012-read-tree-df.sh
t1013-loose-object-format.sh
t1020-subdirectory.sh
t1021-rerere-in-workdir.sh
t1050-large.sh
t1051-large-conversion.sh
t1060-object-corruption.sh
t1100-commit-tree-options.sh
t1200-tutorial.sh
t1300-repo-config.sh
t1301-shared-repo.sh
t1302-repo-version.sh
t1303-wacky-config.sh
t1304-default-acl.sh
t1305-config-include.sh
t1306-xdg-files.sh
t1307-config-blob.sh
t1400-update-ref.sh
t1401-symbolic-ref.sh
t1402-check-ref-format.sh
t1403-show-ref.sh
t1410-reflog.sh
t1411-reflog-show.sh
t1412-reflog-loop.sh
t1420-lost-found.sh
t1450-fsck.sh
t1500-rev-parse.sh
t1501-worktree.sh
t1502-rev-parse-parseopt.sh
t1503-rev-parse-verify.sh
t1504-ceiling-dirs.sh
t1505-rev-parse-last.sh
t1506-rev-parse-diagnosis.sh
t1507-rev-parse-upstream.sh
t1508-at-combinations.sh
t1509-root-worktree.sh
t1510-repo-setup.sh
t1511-rev-parse-caret.sh
t1512-rev-parse-disambiguation.sh
t1513-rev-parse-prefix.sh
t2000-checkout-cache-clash.sh
t2001-checkout-cache-clash.sh
t2002-checkout-cache-u.sh
t2003-checkout-cache-mkdir.sh
t2004-checkout-cache-temp.sh
t2005-checkout-index-symlinks.sh
t2006-checkout-index-basic.sh
t2007-checkout-symlink.sh
t2008-checkout-subdir.sh
t2009-checkout-statinfo.sh
t2010-checkout-ambiguous.sh
t2011-checkout-invalid-head.sh
t2012-checkout-last.sh
t2013-checkout-submodule.sh
t2014-switch.sh
t2015-checkout-unborn.sh
t2016-checkout-patch.sh
t2017-checkout-orphan.sh
t2018-checkout-branch.sh
t2019-checkout-ambiguous-ref.sh
t2020-checkout-detach.sh
t2021-checkout-overwrite.sh
t2022-checkout-paths.sh
t2023-checkout-m.sh
t2024-checkout-dwim.sh
t2030-unresolve-info.sh
t2050-git-dir-relative.sh
t2100-update-cache-badpath.sh
t2101-update-index-reupdate.sh
t2102-update-index-symlinks.sh
t2103-update-index-ignore-missing.sh
t2104-update-index-skip-worktree.sh
t2105-update-index-gitfile.sh
t2106-update-index-assume-unchanged.sh
t2107-update-index-basic.sh
t2200-add-update.sh
t2201-add-update-typechange.sh
t2202-add-addremove.sh
t2203-add-intent.sh
t2204-add-ignored.sh
t2300-cd-to-toplevel.sh
t3000-ls-files-others.sh
t3001-ls-files-others-exclude.sh
t3002-ls-files-dashpath.sh
t3003-ls-files-exclude.sh
t3004-ls-files-basic.sh
t3005-ls-files-relative.sh
t3006-ls-files-long.sh
t3010-ls-files-killed-modified.sh
t3020-ls-files-error-unmatch.sh
t3030-merge-recursive.sh
t3031-merge-criscross.sh
t3032-merge-recursive-options.sh
t3040-subprojects-basic.sh
t3050-subprojects-fetch.sh
t3060-ls-files-with-tree.sh
t3070-wildmatch.sh
t3100-ls-tree-restrict.sh
t3101-ls-tree-dirname.sh
t3102-ls-tree-wildcards.sh
t3103-ls-tree-misc.sh
t3200-branch.sh
t3201-branch-contains.sh
t3202-show-branch-octopus.sh
t3203-branch-output.sh
t3210-pack-refs.sh
t3211-peel-ref.sh
t3300-funny-names.sh
t3301-notes.sh
t3302-notes-index-expensive.sh
t3303-notes-subtrees.sh
t3304-notes-mixed.sh
t3305-notes-fanout.sh
t3306-notes-prune.sh
t3307-notes-man.sh
t3308-notes-merge.sh
t3309-notes-merge-auto-resolve.sh
t3310-notes-merge-manual-resolve.sh
t3311-notes-merge-fanout.sh
t3400-rebase.sh
t3402-rebase-merge.sh
t3403-rebase-skip.sh
t3404-rebase-interactive.sh
t3405-rebase-malformed.sh
t3406-rebase-message.sh
t3407-rebase-abort.sh
t3408-rebase-multi-line.sh
t3409-rebase-preserve-merges.sh
t3410-rebase-preserve-dropped-merges.sh
t3411-rebase-preserve-around-merges.sh
t3412-rebase-root.sh
t3413-rebase-hook.sh
t3414-rebase-preserve-onto.sh
t3415-rebase-autosquash.sh
t3416-rebase-onto-threedots.sh
t3417-rebase-whitespace-fix.sh
t3418-rebase-continue.sh
t3419-rebase-patch-id.sh
t3420-rebase-autostash.sh
t3421-rebase-topology-linear.sh
t3425-rebase-topology-merges.sh
t3500-cherry.sh
t3501-revert-cherry-pick.sh
t3502-cherry-pick-merge.sh
t3503-cherry-pick-root.sh
t3504-cherry-pick-rerere.sh
t3505-cherry-pick-empty.sh
t3506-cherry-pick-ff.sh
t3507-cherry-pick-conflict.sh
t3508-cherry-pick-many-commits.sh
t3509-cherry-pick-merge-df.sh
t3510-cherry-pick-sequence.sh
t3511-cherry-pick-x.sh
t3600-rm.sh
t3700-add.sh
t3701-add-interactive.sh
t3702-add-edit.sh
t3703-add-magic-pathspec.sh
t3800-mktag.sh
t3900-i18n-commit.sh
t3901-8859-1.txt
t3901-i18n-patch.sh
t3901-utf8.txt
t3902-quoted.sh
t3903-stash.sh
t3904-stash-patch.sh
t3905-stash-include-untracked.sh
t3910-mac-os-precompose.sh
t4000-diff-format.sh
t4001-diff-rename.sh
t4002-diff-basic.sh
t4003-diff-rename-1.sh
t4004-diff-rename-symlink.sh
t4005-diff-rename-2.sh
t4006-diff-mode.sh
t4007-rename-3.sh
t4008-diff-break-rewrite.sh
t4009-diff-rename-4.sh
t4010-diff-pathspec.sh
t4011-diff-symlink.sh
t4012-diff-binary.sh
t4013-diff-various.sh
t4014-format-patch.sh
t4015-diff-whitespace.sh
t4016-diff-quote.sh
t4017-diff-retval.sh
t4018-diff-funcname.sh
t4019-diff-wserror.sh
t4020-diff-external.sh
t4021-format-patch-numbered.sh
t4022-diff-rewrite.sh
t4023-diff-rename-typechange.sh
t4024-diff-optimize-common.sh
t4025-hunk-header.sh
t4026-color.sh
t4027-diff-submodule.sh
t4028-format-patch-mime-headers.sh
t4029-diff-trailing-space.sh
t4030-diff-textconv.sh
t4031-diff-rewrite-binary.sh
t4032-diff-inter-hunk-context.sh
t4033-diff-patience.sh
t4034-diff-words.sh
t4035-diff-quiet.sh
t4036-format-patch-signer-mime.sh
t4037-diff-r-t-dirs.sh
t4038-diff-combined.sh
t4039-diff-assume-unchanged.sh
t4040-whitespace-status.sh
t4041-diff-submodule-option.sh
t4042-diff-textconv-caching.sh
t4043-diff-rename-binary.sh
t4044-diff-index-unique-abbrev.sh
t4045-diff-relative.sh
t4046-diff-unmerged.sh
t4047-diff-dirstat.sh
t4048-diff-combined-binary.sh
t4049-diff-stat-count.sh
t4050-diff-histogram.sh
t4051-diff-function-context.sh
t4052-stat-output.sh
t4053-diff-no-index.sh
t4054-diff-bogus-tree.sh
t4055-diff-context.sh
t4100-apply-stat.sh
t4101-apply-nonl.sh
t4102-apply-rename.sh
t4103-apply-binary.sh
t4104-apply-boundary.sh
t4105-apply-fuzz.sh
t4106-apply-stdin.sh
t4107-apply-ignore-whitespace.sh
t4108-apply-threeway.sh
t4109-apply-multifrag.sh
t4110-apply-scan.sh
t4111-apply-subdir.sh
t4112-apply-renames.sh
t4113-apply-ending.sh
t4114-apply-typechange.sh
t4115-apply-symlink.sh
t4116-apply-reverse.sh
t4117-apply-reject.sh
t4118-apply-empty-context.sh
t4119-apply-config.sh
t4120-apply-popt.sh
t4121-apply-diffs.sh
t4122-apply-symlink-inside.sh
t4123-apply-shrink.sh
t4124-apply-ws-rule.sh
t4125-apply-ws-fuzz.sh
t4126-apply-empty.sh
t4127-apply-same-fn.sh
t4128-apply-root.sh
t4129-apply-samemode.sh
t4130-apply-criss-cross-rename.sh
t4131-apply-fake-ancestor.sh
t4132-apply-removal.sh
t4133-apply-filenames.sh
t4134-apply-submodule.sh
t4135-apply-weird-filenames.sh
t4136-apply-check.sh
t4150-am.sh
t4151-am-abort.sh
t4152-am-subjects.sh
t4200-rerere.sh
t4201-shortlog.sh
t4202-log.sh
t4203-mailmap.sh
t4204-patch-id.sh
t4205-log-pretty-formats.sh
t4206-log-follow-harder-copies.sh
t4207-log-decoration-colors.sh
t4208-log-magic-pathspec.sh
t4209-log-pickaxe.sh
t4210-log-i18n.sh
t4211-line-log.sh
t4212-log-corrupt.sh
t4252-am-options.sh
t4253-am-keep-cr-dos.sh
t4254-am-corrupt.sh
t4300-merge-tree.sh
t5000-tar-tree.sh
t5001-archive-attr.sh
t5002-archive-attr-pattern.sh
t5003-archive-zip.sh
t5004-archive-corner-cases.sh
t5100-mailinfo.sh
t5150-request-pull.sh
t5300-pack-object.sh
t5301-sliding-window.sh
t5302-pack-index.sh
t5303-pack-corruption-resilience.sh
t5304-prune.sh
t5305-include-tag.sh
t5306-pack-nobase.sh
t5307-pack-missing-commit.sh
t5308-pack-detect-duplicates.sh
t5309-pack-delta-cycles.sh
t5400-send-pack.sh
t5401-update-hooks.sh
t5402-post-merge-hook.sh
t5403-post-checkout-hook.sh
t5404-tracking-branches.sh
t5405-send-pack-rewind.sh
t5406-remote-rejects.sh
t5407-post-rewrite-hook.sh
t5500-fetch-pack.sh
t5501-fetch-push-alternates.sh
t5502-quickfetch.sh
t5503-tagfollow.sh
t5504-fetch-receive-strict.sh
t5505-remote.sh
t5506-remote-groups.sh
t5509-fetch-push-namespaces.sh
t5510-fetch.sh
t5511-refspec.sh
t5512-ls-remote.sh
t5513-fetch-track.sh
t5514-fetch-multiple.sh
t5515-fetch-merge-logic.sh
t5516-fetch-push.sh
t5517-push-mirror.sh
t5518-fetch-exit-status.sh
t5519-push-alternates.sh
t5520-pull.sh
t5521-pull-options.sh
t5522-pull-symlink.sh
t5523-push-upstream.sh
t5524-pull-msg.sh
t5525-fetch-tagopt.sh
t5526-fetch-submodules.sh
t5527-fetch-odd-refs.sh
t5528-push-default.sh
t5530-upload-pack-error.sh
t5531-deep-submodule-push.sh
t5532-fetch-proxy.sh
t5533-push-cas.sh
t5535-fetch-push-symref.sh
t5540-http-push.sh
t5541-http-push.sh
t5550-http-fetch.sh
t5551-http-fetch.sh
t5560-http-backend-noserver.sh
t5561-http-backend.sh
t556x_common
t5570-git-daemon.sh
t5571-pre-push-hook.sh
t5600-clone-fail-cleanup.sh
t5601-clone.sh
t5602-clone-remote-exec.sh
t5700-clone-reference.sh
t5701-clone-local.sh
t5702-clone-options.sh
t5704-bundle.sh
t5705-clone-2gb.sh
t5706-clone-branch.sh
t5707-clone-detached.sh
t5708-clone-config.sh
t5709-clone-refspec.sh
t5710-info-alternate.sh
t5801-remote-helpers.sh
t5802-connect-helper.sh
t5900-repo-selection.sh
t6000-rev-list-misc.sh
t6001-rev-list-graft.sh
t6002-rev-list-bisect.sh
t6003-rev-list-topo-order.sh
t6004-rev-list-path-optim.sh
t6005-rev-list-count.sh
t6006-rev-list-format.sh
t6007-rev-list-cherry-pick-file.sh
t6008-rev-list-submodule.sh
t6009-rev-list-parent.sh
t6010-merge-base.sh
t6011-rev-list-with-bad-commit.sh
t6012-rev-list-simplify.sh
t6013-rev-list-reverse-parents.sh
t6014-rev-list-all.sh
t6015-rev-list-show-all-parents.sh
t6016-rev-list-graph-simplify-history.sh
t6017-rev-list-stdin.sh
t6018-rev-list-glob.sh
t6019-rev-list-ancestry-path.sh
t6020-merge-df.sh
t6021-merge-criss-cross.sh
t6022-merge-rename.sh
t6023-merge-file.sh
t6024-recursive-merge.sh
t6025-merge-symlinks.sh
t6026-merge-attr.sh
t6027-merge-binary.sh
t6028-merge-up-to-date.sh
t6029-merge-subtree.sh
t6030-bisect-porcelain.sh
t6031-merge-recursive.sh
t6032-merge-large-rename.sh
t6033-merge-crlf.sh
t6034-merge-rename-nocruft.sh
t6035-merge-dir-to-symlink.sh
t6036-recursive-corner-cases.sh
t6037-merge-ours-theirs.sh
t6038-merge-text-auto.sh
t6040-tracking-info.sh
t6042-merge-rename-corner-cases.sh
t6050-replace.sh
t6060-merge-index.sh
t6101-rev-parse-parents.sh
t6110-rev-list-sparse.sh
t6111-rev-list-treesame.sh
t6120-describe.sh
t6130-pathspec-noglob.sh
t6131-pathspec-icase.sh
t6200-fmt-merge-msg.sh
t6300-for-each-ref.sh
t6500-gc.sh
t7001-mv.sh
t7003-filter-branch.sh
t7004-tag.sh
t7005-editor.sh
t7006-pager.sh
t7007-show.sh
t7008-grep-binary.sh
t7009-filter-branch-null-sha1.sh
t7010-setup.sh
t7011-skip-worktree-reading.sh
t7012-skip-worktree-writing.sh
t7060-wtstatus.sh
t7061-wtstatus-ignore.sh
t7062-wtstatus-ignorecase.sh
t7101-reset.sh
t7102-reset.sh
t7103-reset-bare.sh
t7104-reset.sh
t7105-reset-patch.sh
t7106-reset-unborn-branch.sh
t7110-reset-merge.sh
t7111-reset-table.sh
t7201-co.sh
t7300-clean.sh
t7301-clean-interactive.sh
t7400-submodule-basic.sh
t7401-submodule-summary.sh
t7402-submodule-rebase.sh
t7403-submodule-sync.sh
t7405-submodule-merge.sh
t7406-submodule-update.sh
t7407-submodule-foreach.sh
t7408-submodule-reference.sh
t7409-submodule-detached-worktree.sh
t7500-commit.sh
t7501-commit.sh
t7502-commit.sh
t7503-pre-commit-hook.sh
t7504-commit-msg-hook.sh
t7505-prepare-commit-msg-hook.sh
t7506-status-submodule.sh
t7507-commit-verbose.sh
t7508-status.sh
t7509-commit.sh
t7510-signed-commit.sh
t7511-status-index.sh
t7512-status-help.sh
t7600-merge.sh
t7601-merge-pull-config.sh
t7602-merge-octopus-many.sh
t7603-merge-reduce-heads.sh
t7604-merge-custom-message.sh
t7605-merge-resolve.sh
t7606-merge-custom.sh
t7607-merge-overwrite.sh
t7608-merge-messages.sh
t7609-merge-co-error-msgs.sh
t7610-mergetool.sh
t7611-merge-abort.sh
t7612-merge-verify-signatures.sh
t7700-repack.sh
t7701-repack-unpack-unreachable.sh
t7800-difftool.sh
t7810-grep.sh
t7811-grep-open.sh
t8001-annotate.sh
t8002-blame.sh
t8003-blame-corner-cases.sh
t8004-blame-with-conflicts.sh
t8005-blame-i18n.sh
t8006-blame-textconv.sh
t8007-cat-file-textconv.sh
t8008-blame-formats.sh
t9001-send-email.sh
t9002-column.sh
t9010-svn-fe.sh
t9011-svn-da.sh
t9020-remote-svn.sh
t9100-git-svn-basic.sh
t9101-git-svn-props.sh
t9102-git-svn-deep-rmdir.sh
t9103-git-svn-tracked-directory-removed.sh
t9104-git-svn-follow-parent.sh
t9105-git-svn-commit-diff.sh
t9106-git-svn-commit-diff-clobber.sh
t9107-git-svn-migrate.sh
t9108-git-svn-glob.sh
t9109-git-svn-multi-glob.sh
t9110-git-svn-use-svm-props.sh
t9111-git-svn-use-svnsync-props.sh
t9112-git-svn-md5less-file.sh
t9113-git-svn-dcommit-new-file.sh
t9114-git-svn-dcommit-merge.sh
t9115-git-svn-dcommit-funky-renames.sh
t9116-git-svn-log.sh
t9117-git-svn-init-clone.sh
t9118-git-svn-funky-branch-names.sh
t9119-git-svn-info.sh
t9120-git-svn-clone-with-percent-escapes.sh
t9121-git-svn-fetch-renamed-dir.sh
t9122-git-svn-author.sh
t9123-git-svn-rebuild-with-rewriteroot.sh
t9124-git-svn-dcommit-auto-props.sh
t9125-git-svn-multi-glob-branch-names.sh
t9126-git-svn-follow-deleted-readded-directory.sh
t9127-git-svn-partial-rebuild.sh
t9128-git-svn-cmd-branch.sh
t9129-git-svn-i18n-commitencoding.sh
t9130-git-svn-authors-file.sh
t9131-git-svn-empty-symlink.sh
t9132-git-svn-broken-symlink.sh
t9133-git-svn-nested-git-repo.sh
t9134-git-svn-ignore-paths.sh
t9135-git-svn-moved-branch-empty-file.sh
t9136-git-svn-recreated-branch-empty-file.sh
t9137-git-svn-dcommit-clobber-series.sh
t9138-git-svn-authors-prog.sh
t9139-git-svn-non-utf8-commitencoding.sh
t9140-git-svn-reset.sh
t9141-git-svn-multiple-branches.sh
t9142-git-svn-shallow-clone.sh
t9143-git-svn-gc.sh
t9144-git-svn-old-rev_map.sh
t9145-git-svn-master-branch.sh
t9146-git-svn-empty-dirs.sh
t9147-git-svn-include-paths.sh
t9150-svk-mergetickets.sh
t9151-svn-mergeinfo.sh
t9152-svn-empty-dirs-after-gc.sh
t9153-git-svn-rewrite-uuid.sh
t9154-git-svn-fancy-glob.sh
t9155-git-svn-fetch-deleted-tag.sh
t9156-git-svn-fetch-deleted-tag-2.sh
t9157-git-svn-fetch-merge.sh
t9158-git-svn-mergeinfo.sh
t9159-git-svn-no-parent-mergeinfo.sh
t9160-git-svn-preserve-empty-dirs.sh
t9161-git-svn-mergeinfo-push.sh
t9162-git-svn-dcommit-interactive.sh
t9163-git-svn-reset-clears-caches.sh
t9164-git-svn-dcommit-concurrent.sh
t9165-git-svn-fetch-merge-branch-of-branch.sh
t9166-git-svn-fetch-merge-branch-of-branch2.sh
t9167-git-svn-cmd-branch-subproject.sh
t9200-git-cvsexportcommit.sh
t9300-fast-import.sh
t9301-fast-import-notes.sh
t9350-fast-export.sh
t9400-git-cvsserver-server.sh
t9401-git-cvsserver-crlf.sh
t9402-git-cvsserver-refs.sh
t9500-gitweb-standalone-no-errors.sh
t9501-gitweb-standalone-http-status.sh
t9502-gitweb-standalone-parse-output.sh
t9600-cvsimport.sh
t9601-cvsimport-vendor-branch.sh
t9602-cvsimport-branches-tags.sh
t9603-cvsimport-patchsets.sh
t9604-cvsimport-timestamps.sh
t9700-perl-git.sh
t9800-git-p4-basic.sh
t9801-git-p4-branch.sh
t9802-git-p4-filetype.sh
t9803-git-p4-shell-metachars.sh
t9804-git-p4-label.sh
t9805-git-p4-skip-submit-edit.sh
t9806-git-p4-options.sh
t9807-git-p4-submit.sh
t9808-git-p4-chdir.sh
t9809-git-p4-client-view.sh
t9810-git-p4-rcs.sh
t9811-git-p4-label-import.sh
t9812-git-p4-wildcards.sh
t9813-git-p4-preserve-users.sh
t9814-git-p4-rename.sh
t9815-git-p4-submit-fail.sh
t9901-git-web--browse.sh
t9902-completion.sh
t9903-bash-prompt.sh
test-binary-1.png
test-binary-2.png
test-lib-functions.sh
test-lib.sh
test-terminal.perl
templates
vcs-svn
xdiff
.gitattributes
.gitignore
.mailmap
COPYING
GIT-VERSION-GEN
INSTALL
LGPL-2.1
Makefile
README
RelNotes
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c
archive.h
argv-array.c
argv-array.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h
column.c
column.h
combine-diff.c
command-list.txt
commit-slab.h
commit.c
commit.h
config.c
config.mak.in
config.mak.uname
configure.ac
connect.c
connect.h
connected.c
connected.h
convert.c
convert.h
copy.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff-no-index.c
diff.c
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore.h
dir.c
dir.h
editor.c
entry.c
environment.c
exec_cmd.c
exec_cmd.h
fast-import.c
fetch-pack.c
fetch-pack.h
fmt-merge-msg.h
fsck.c
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl
git-am.sh
git-archimport.perl
git-bisect.sh
git-compat-util.h
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh
git-instaweb.sh
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-parse-remote.sh
git-pull.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh
git-rebase--merge.sh
git-rebase.sh
git-relink.perl
git-remote-testgit.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh
git-sh-setup.sh
git-stash.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git.c
git.rc
git.spec.in
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c
grep.h
hash.c
hash.h
help.c
help.h
hex.c
http-backend.c
http-fetch.c
http-push.c
http-walker.c
http.c
http.h
ident.c
imap-send.c
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c
merge-recursive.h
merge.c
mergesort.c
mergesort.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object.c
object.h
pack-check.c
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options-cb.c
parse-options.c
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
pretty.c
prio-queue.c
prio-queue.h
progress.c
progress.h
prompt.c
prompt.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c
reflog-walk.c
reflog-walk.h
refs.c
refs.h
remote-curl.c
remote-testsvn.c
remote.c
remote.h
replace_object.c
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c
revision.h
run-command.c
run-command.h
send-pack.c
send-pack.h
sequencer.c
sequencer.h
server-info.c
setup.c
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c
sha1_name.c
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
submodule.c
submodule.h
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-mergesort.c
test-mktemp.c
test-parse-options.c
test-path-utils.c
test-prio-queue.c
test-read-cache.c
test-regex.c
test-revision-walking.c
test-run-command.c
test-scrap-cache-tree.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-list.c
test-subprocess.c
test-svn-fe.c
test-urlmatch-normalization.c
test-wildmatch.c
thread-utils.c
thread-utils.h
trace.c
transport-helper.c
transport.c
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c
unpack-trees.h
upload-pack.c
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
walker.c
walker.h
wildmatch.c
wildmatch.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c
Breadcrumbs
git
/
t
/
annotate-tests.sh
Blame
Blame
Latest commit
History
History
553 lines (446 loc) · 12.7 KB
Breadcrumbs
git
/
t
/
annotate-tests.sh
Top
File metadata and controls
Code
Blame
553 lines (446 loc) · 12.7 KB
Raw
# This file isn't used as a test script directly, instead it is # sourced from t8001-annotate.sh and t8002-blame.sh. check_count () { head= && file='file' && options= && while : do case "$1" in -h) head="$2"; shift; shift ;; -f) file="$2"; shift; shift ;; -*) options="$options $1"; shift ;; *) break ;; esac done && echo "$PROG $options $file $head" >&4 && $PROG $options $file $head >actual && perl -e ' my %expect = (@ARGV); my %count = map { $_ => 0 } keys %expect; while (<STDIN>) { if (/^[0-9a-f]+\t\(([^\t]+)\t/) { my $author = $1; for ($author) { s/^\s*//; s/\s*$//; } $count{$author}++; } } my $bad = 0; while (my ($author, $count) = each %count) { my $ok; my $value = 0; $value = $expect{$author} if defined $expect{$author}; if ($value != $count) { $bad = 1; $ok = "bad"; } else { $ok = "good"; } print STDERR "Author $author (expected $value, attributed $count) $ok\n"; } exit($bad); ' "$@" <actual } test_expect_success 'setup A lines' ' echo "1A quick brown fox jumps over the" >file && echo "lazy dog" >>file && git add file && GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \ git commit -a -m "Initial." ' test_expect_success 'blame 1 author' ' check_count A 2 ' test_expect_success 'setup B lines' ' echo "2A quick brown fox jumps over the" >>file && echo "lazy dog" >>file && GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \ git commit -a -m "Second." ' test_expect_success 'blame 2 authors' ' check_count A 2 B 2 ' test_expect_success 'setup B1 lines (branch1)' ' git checkout -b branch1 master && echo "3A slow green fox jumps into the" >>file && echo "well." >>file && GIT_AUTHOR_NAME="B1" GIT_AUTHOR_EMAIL="B1@test.git" \ git commit -a -m "Branch1-1" ' test_expect_success 'blame 2 authors + 1 branch1 author' ' check_count A 2 B 2 B1 2 ' test_expect_success 'setup B2 lines (branch2)' ' git checkout -b branch2 master && sed -e "s/2A quick brown/4A quick brown lazy dog/" <file >file.new && mv file.new file && GIT_AUTHOR_NAME="B2" GIT_AUTHOR_EMAIL="B2@test.git" \ git commit -a -m "Branch2-1" ' test_expect_success 'blame 2 authors + 1 branch2 author' ' check_count A 2 B 1 B2 1 ' test_expect_success 'merge branch1 & branch2' ' git merge branch1 ' test_expect_success 'blame 2 authors + 2 merged-in authors' ' check_count A 2 B 1 B1 2 B2 1 ' test_expect_success 'blame ancestor' ' check_count -h master A 2 B 2 ' test_expect_success 'blame great-ancestor' ' check_count -h master^ A 2 ' test_expect_success 'setup evil merge' ' echo "evil merge." >>file && git commit -a --amend ' test_expect_success 'blame evil merge' ' check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 ' test_expect_success 'blame huge graft' ' test_when_finished "git checkout branch2" && test_when_finished "rm -f .git/info/grafts" && graft= && for i in 0 1 2 do for j in 0 1 2 3 4 5 6 7 8 9 do git checkout --orphan "$i$j" && printf "%s\n" "$i" "$j" >file && test_tick && GIT_AUTHOR_NAME=$i$j GIT_AUTHOR_EMAIL=$i$j@test.git \ git commit -a -m "$i$j" && commit=$(git rev-parse --verify HEAD) && graft="$graft$commit " done done && printf "%s " $graft >.git/info/grafts && check_count -h 00 01 1 10 1 ' test_expect_success 'setup incomplete line' ' echo "incomplete" | tr -d "\\012" >>file && GIT_AUTHOR_NAME="C" GIT_AUTHOR_EMAIL="C@test.git" \ git commit -a -m "Incomplete" ' test_expect_success 'blame incomplete line' ' check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1 ' test_expect_success 'setup edits' ' mv file file.orig && { cat file.orig && echo } | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" >file && echo "incomplete" | tr -d "\\012" >>file && GIT_AUTHOR_NAME="D" GIT_AUTHOR_EMAIL="D@test.git" \ git commit -a -m "edit" ' test_expect_success 'blame edits' ' check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 ' test_expect_success 'setup obfuscated email' ' echo "No robots allowed" >file.new && cat file >>file.new && mv file.new file && GIT_AUTHOR_NAME="E" GIT_AUTHOR_EMAIL="E at test dot git" \ git commit -a -m "norobots" ' test_expect_success 'blame obfuscated email' ' check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 ' test_expect_success 'blame -L 1 (all)' ' check_count -L1 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 ' test_expect_success 'blame -L , (all)' ' check_count -L, A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 ' test_expect_success 'blame -L X (X to end)' ' check_count -L5 B1 1 C 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L X, (X to end)' ' check_count -L5, B1 1 C 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L ,Y (up to Y)' ' check_count -L,3 A 1 B2 1 E 1 ' test_expect_success 'blame -L X,X' ' check_count -L3,3 B2 1 ' test_expect_success 'blame -L X,Y' ' check_count -L3,6 B 1 B1 1 B2 1 D 1 ' test_expect_success 'blame -L Y,X (undocumented)' ' check_count -L6,3 B 1 B1 1 B2 1 D 1 ' test_expect_success 'blame -L -X' ' test_must_fail $PROG -L-1 file ' test_expect_success 'blame -L 0' ' test_must_fail $PROG -L0 file ' test_expect_success 'blame -L ,0' ' test_must_fail $PROG -L,0 file ' test_expect_success 'blame -L ,+0' ' test_must_fail $PROG -L,+0 file ' test_expect_success 'blame -L X,+0' ' test_must_fail $PROG -L1,+0 file ' test_expect_success 'blame -L X,+1' ' check_count -L3,+1 B2 1 ' test_expect_success 'blame -L X,+N' ' check_count -L3,+4 B 1 B1 1 B2 1 D 1 ' test_expect_success 'blame -L ,-0' ' test_must_fail $PROG -L,-0 file ' test_expect_success 'blame -L X,-0' ' test_must_fail $PROG -L1,-0 file ' test_expect_success 'blame -L X,-1' ' check_count -L3,-1 B2 1 ' test_expect_success 'blame -L X,-N' ' check_count -L6,-4 B 1 B1 1 B2 1 D 1 ' test_expect_success 'blame -L /RE/ (RE to end)' ' check_count -L/evil/ C 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/,/RE2/' ' check_count -L/robot/,/green/ A 1 B 1 B2 1 D 1 E 1 ' test_expect_success 'blame -L X,/RE/' ' check_count -L5,/evil/ B1 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/,Y' ' check_count -L/99/,7 B1 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/,+N' ' check_count -L/99/,+3 B1 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/,-N' ' check_count -L/99/,-3 B 1 B2 1 D 1 ' # 'file' ends with an incomplete line, so 'wc' reports one fewer lines than # git-blame sees, hence the last line is actually $(wc...)+1. test_expect_success 'blame -L X (X == nlines)' ' n=$(expr $(wc -l <file) + 1) && check_count -L$n C 1 ' test_expect_success 'blame -L X (X == nlines + 1)' ' n=$(expr $(wc -l <file) + 2) && test_must_fail $PROG -L$n file ' test_expect_success 'blame -L X (X > nlines)' ' test_must_fail $PROG -L12345 file ' test_expect_success 'blame -L ,Y (Y == nlines)' ' n=$(expr $(wc -l <file) + 1) && check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 ' test_expect_success 'blame -L ,Y (Y == nlines + 1)' ' n=$(expr $(wc -l <file) + 2) && test_must_fail $PROG -L,$n file ' test_expect_success 'blame -L ,Y (Y > nlines)' ' test_must_fail $PROG -L,12345 file ' test_expect_success 'blame -L multiple (disjoint)' ' check_count -L2,3 -L6,7 A 1 B1 1 B2 1 "A U Thor" 1 ' test_expect_success 'blame -L multiple (disjoint: unordered)' ' check_count -L6,7 -L2,3 A 1 B1 1 B2 1 "A U Thor" 1 ' test_expect_success 'blame -L multiple (adjacent)' ' check_count -L2,3 -L4,5 A 1 B 1 B2 1 D 1 ' test_expect_success 'blame -L multiple (adjacent: unordered)' ' check_count -L4,5 -L2,3 A 1 B 1 B2 1 D 1 ' test_expect_success 'blame -L multiple (overlapping)' ' check_count -L2,4 -L3,5 A 1 B 1 B2 1 D 1 ' test_expect_success 'blame -L multiple (overlapping: unordered)' ' check_count -L3,5 -L2,4 A 1 B 1 B2 1 D 1 ' test_expect_success 'blame -L multiple (superset/subset)' ' check_count -L2,8 -L3,5 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L multiple (superset/subset: unordered)' ' check_count -L3,5 -L2,8 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/ (relative)' ' check_count -L3,3 -L/fox/ B1 1 B2 1 C 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/ (relative: no preceding range)' ' check_count -L/dog/ A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 ' test_expect_success 'blame -L /RE/ (relative: adjacent)' ' check_count -L1,1 -L/dog/,+1 A 1 E 1 ' test_expect_success 'blame -L /RE/ (relative: not found)' ' test_must_fail $PROG -L4,4 -L/dog/ file ' test_expect_success 'blame -L /RE/ (relative: end-of-file)' ' test_must_fail $PROG -L, -L/$/ file ' test_expect_success 'blame -L ^/RE/ (absolute)' ' check_count -L3,3 -L^/dog/,+2 A 1 B2 1 ' test_expect_success 'blame -L ^/RE/ (absolute: no preceding range)' ' check_count -L^/dog/,+2 A 1 B2 1 ' test_expect_success 'blame -L ^/RE/ (absolute: not found)' ' test_must_fail $PROG -L4,4 -L^/tambourine/ file ' test_expect_success 'blame -L ^/RE/ (absolute: end-of-file)' ' n=$(expr $(wc -l <file) + 1) && check_count -L$n -L^/$/,+2 A 1 C 1 E 1 ' test_expect_success 'setup -L :regex' ' tr Q "\\t" >hello.c <<-\EOF && int main(int argc, const char *argv[]) { Qputs("hello"); } EOF git add hello.c && GIT_AUTHOR_NAME="F" GIT_AUTHOR_EMAIL="F@test.git" \ git commit -m "hello" && mv hello.c hello.orig && sed -e "/}/ {x; s/$/Qputs(\"goodbye\");/; G;}" <hello.orig | tr Q "\\t" >hello.c && GIT_AUTHOR_NAME="G" GIT_AUTHOR_EMAIL="G@test.git" \ git commit -a -m "goodbye" && mv hello.c hello.orig && echo "#include <stdio.h>" >hello.c && cat hello.orig >>hello.c && tr Q "\\t" >>hello.c <<-\EOF void mail() { Qputs("mail"); } EOF GIT_AUTHOR_NAME="H" GIT_AUTHOR_EMAIL="H@test.git" \ git commit -a -m "mail" ' test_expect_success 'blame -L :literal' ' check_count -f hello.c -L:main F 4 G 1 ' test_expect_success 'blame -L :regex' ' check_count -f hello.c "-L:m[a-z][a-z]l" H 4 ' test_expect_success 'blame -L :nomatch' ' test_must_fail $PROG -L:nomatch hello.c ' test_expect_success 'blame -L :RE (relative)' ' check_count -f hello.c -L3,3 -L:ma.. F 1 H 4 ' test_expect_success 'blame -L :RE (relative: no preceding range)' ' check_count -f hello.c -L:ma.. F 4 G 1 ' test_expect_success 'blame -L :RE (relative: not found)' ' test_must_fail $PROG -L3,3 -L:tambourine hello.c ' test_expect_success 'blame -L :RE (relative: end-of-file)' ' test_must_fail $PROG -L, -L:main hello.c ' test_expect_success 'blame -L ^:RE (absolute)' ' check_count -f hello.c -L3,3 -L^:ma.. F 4 G 1 ' test_expect_success 'blame -L ^:RE (absolute: no preceding range)' ' check_count -f hello.c -L^:ma.. F 4 G 1 ' test_expect_success 'blame -L ^:RE (absolute: not found)' ' test_must_fail $PROG -L4,4 -L^:tambourine hello.c ' test_expect_success 'blame -L ^:RE (absolute: end-of-file)' ' n=$(printf "%d" $(wc -l <hello.c)) && check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1 ' test_expect_success 'setup incremental' ' ( GIT_AUTHOR_NAME=I && export GIT_AUTHOR_NAME && GIT_AUTHOR_EMAIL=I@test.git && export GIT_AUTHOR_EMAIL && >incremental && git add incremental && git commit -m "step 0" && printf "partial" >>incremental && git commit -a -m "step 0.5" && echo >>incremental && git commit -a -m "step 1" ) ' test_expect_success 'blame empty' ' check_count -h HEAD^^ -f incremental ' test_expect_success 'blame -L 0 empty' ' test_must_fail $PROG -L0 incremental HEAD^^ ' test_expect_success 'blame -L 1 empty' ' test_must_fail $PROG -L1 incremental HEAD^^ ' test_expect_success 'blame -L 2 empty' ' test_must_fail $PROG -L2 incremental HEAD^^ ' test_expect_success 'blame half' ' check_count -h HEAD^ -f incremental I 1 ' test_expect_success 'blame -L 0 half' ' test_must_fail $PROG -L0 incremental HEAD^ ' test_expect_success 'blame -L 1 half' ' check_count -h HEAD^ -f incremental -L1 I 1 ' test_expect_success 'blame -L 2 half' ' test_must_fail $PROG -L2 incremental HEAD^ ' test_expect_success 'blame -L 3 half' ' test_must_fail $PROG -L3 incremental HEAD^ ' test_expect_success 'blame full' ' check_count -f incremental I 1 ' test_expect_success 'blame -L 0 full' ' test_must_fail $PROG -L0 incremental ' test_expect_success 'blame -L 1 full' ' check_count -f incremental -L1 I 1 ' test_expect_success 'blame -L 2 full' ' test_must_fail $PROG -L2 incremental ' test_expect_success 'blame -L 3 full' ' test_must_fail $PROG -L3 incremental ' test_expect_success 'blame -L' ' test_must_fail $PROG -L file ' test_expect_success 'blame -L X,+' ' test_must_fail $PROG -L1,+ file ' test_expect_success 'blame -L X,-' ' test_must_fail $PROG -L1,- file ' test_expect_success 'blame -L X (non-numeric X)' ' test_must_fail $PROG -LX file ' test_expect_success 'blame -L X,Y (non-numeric Y)' ' test_must_fail $PROG -L1,Y file ' test_expect_success 'blame -L X,+N (non-numeric N)' ' test_must_fail $PROG -L1,+N file ' test_expect_success 'blame -L X,-N (non-numeric N)' ' test_must_fail $PROG -L1,-N file ' test_expect_success 'blame -L ,^/RE/' ' test_must_fail $PROG -L1,^/99/ file '
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
You can’t perform that action at this time.