gitea/services/repository
Mihir Joshi b8270240bf
Fix reverting a merge commit failing ()
Fixes 

---
Error occurring currently while trying to revert commit using read-tree
-m approach:
> 2022/12/26 16:04:43 ...rvices/pull/patch.go:240:AttemptThreeWayMerge()
[E] [63a9c61a] Unable to run read-tree -m! Error: exit status 128 -
fatal: this operation must be run in a work tree
> 	 - fatal: this operation must be run in a work tree

We need to clone a non-bare repository for `git read-tree -m` to work.

bb371aee6e
adds support to create a non-bare cloned temporary upload repository.

After cloning a non-bare temporary upload repository, we [set default
index](https://github.com/go-gitea/gitea/blob/main/services/repository/files/cherry_pick.go#L37)
(`git read-tree HEAD`).
This operation ends up resetting the git index file (see investigation
details below), due to which, we need to call `git update-index
--refresh` afterward.


Here's the diff of the index file before and after we execute
SetDefaultIndex: https://www.diffchecker.com/hyOP3eJy/

Notice the **ctime**, **mtime** are set to 0 after SetDefaultIndex.

You can reproduce the same behavior using these steps:
```bash
$ git clone https://try.gitea.io/me-heer/test.git -s -b main
$ cd test
$ git read-tree HEAD
$ git read-tree -m 1f085d7ed8 1f085d7ed8 9933caed00
error: Entry '1' not uptodate. Cannot merge.
```

After which, we can fix like this:
```
$ git update-index --refresh
$ git read-tree -m 1f085d7ed8 1f085d7ed8 9933caed00
```
..
archiver Move more functions to db.Find ()
files Fix reverting a merge commit failing ()
adopt.go Replace more db.DefaultContext ()
adopt_test.go Use more specific test methods ()
avatar.go Improve avatar uploading / resizing / compressing, remove Fomantic card module ()
avatar_test.go Use context parameter in services/repository ()
branch.go Fix schedule tasks bugs ()
cache.go Always enable caches ()
check.go Adjust object format interface ()
collaboration.go Next round of `db.DefaultContext` refactor ()
collaboration_test.go Next round of `db.DefaultContext` refactor ()
commit.go Show branches and tags that contain a commit ()
create.go Adjust object format interface ()
create_test.go Remove unnecessary parameter ()
delete.go Use db.Find instead of writing methods for every object ()
delete_test.go Delete repos of org when purge delete user ()
fork.go Penultimate round of `db.DefaultContext` refactor ()
fork_test.go Add option to prohibit fork if user reached maximum limit of repositories ()
hooks.go Use db.Find instead of writing methods for every object ()
lfs.go Abstract hash function usage ()
lfs_test.go Remove GetByBean method because sometimes it's danger when query condition parameter is zero and also introduce new generic methods ()
main_test.go make writing main test easier ()
push.go Move more functions to db.Find ()
repository.go Remove unnecessary parameter ()
repository_test.go refactor some functions to support ctx as first parameter ()
review.go Use context parameter in services/repository ()
review_test.go Use context parameter in services/repository ()
setting.go Fix schedule tasks bugs ()
template.go Move notification interface to services layer ()
transfer.go Next round of `db.DefaultContext` refactor ()
transfer_test.go Replace 'userxx' with 'orgxx' in all test files when the user type is org ()