mirror of
https://github.com/go-gitea/gitea.git
synced 2025-11-03 08:02:36 +09:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bb20be8b2 | ||
|
|
06a554c22a | ||
|
|
00bd47ae5c | ||
|
|
b20f1ab47f | ||
|
|
9a7f59ef35 | ||
|
|
6a6f0616f2 | ||
|
|
6caf04c129 | ||
|
|
406f5de18c | ||
|
|
39cb1ac517 | ||
|
|
58dcbaf20b | ||
|
|
5f212ff4e9 | ||
|
|
45fa822ac4 | ||
|
|
1ac8646845 | ||
|
|
13e284c7cf | ||
|
|
bbe6aa349f | ||
|
|
4fd55d8796 | ||
|
|
daaabaa1d9 | ||
|
|
fa059debca | ||
|
|
2854c8aa47 | ||
|
|
506c98df5b |
10
.drone.yml
10
.drone.yml
@@ -57,11 +57,11 @@ pipeline:
|
|||||||
when:
|
when:
|
||||||
event: [ push, tag, pull_request ]
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
coverage:
|
# coverage:
|
||||||
image: plugins/coverage
|
# image: plugins/coverage
|
||||||
server: https://coverage.gitea.io
|
# server: https://coverage.gitea.io
|
||||||
when:
|
# when:
|
||||||
event: [ push, tag, pull_request ]
|
# event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
image: plugins/docker
|
image: plugins/docker
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIGNsb25lOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0CiAgICB0YWdzOiB0cnVlCgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YSBzcWxpdGUKICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gYXBrIC1VIGFkZCBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIGdlbmVyYXRlCiAgICAgIC0gbWFrZSB2ZXQKICAgICAgLSBtYWtlIGxpbnQKICAgICAgLSBtYWtlIHRlc3QKICAgICAgLSBtYWtlIGJ1aWxkCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHRlc3QtbXlzcWw6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHRlc3QtbXlzcWwKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgdGVzdC1wZ3NxbAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBzdGF0aWM6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhIHNxbGl0ZQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHJlbGVhc2UKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgY292ZXJhZ2U6CiAgICBpbWFnZTogcGx1Z2lucy9jb3ZlcmFnZQogICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJyR7RFJPTkVfVEFHIyN2fScgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZG9ja2VyOgogICAgaW1hZ2U6IHBsdWdpbnMvZG9ja2VyCiAgICByZXBvOiBnaXRlYS9naXRlYQogICAgdGFnczogWyAnJHtEUk9ORV9CUkFOQ0gjI3JlbGVhc2Uvdn0nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2ggXQogICAgICBicmFuY2g6IFsgcmVsZWFzZS8qIF0KCiAgZG9ja2VyOgogICAgaW1hZ2U6IHBsdWdpbnMvZG9ja2VyCiAgICByZXBvOiBnaXRlYS9naXRlYQogICAgdGFnczogWyAnbGF0ZXN0JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8ke0RST05FX1RBRyMjdn0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8ke0RST05FX0JSQU5DSCMjcmVsZWFzZS92fQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyByZWxlYXNlLyogXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvbWFzdGVyCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIGdpdGh1YjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdGh1Yi1yZWxlYXNlCiAgICBmaWxlczoKICAgICAgLSBkaXN0L3JlbGVhc2UvKgogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZ2l0dGVyOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0dGVyCgpzZXJ2aWNlczoKICBteXNxbDoKICAgIGltYWdlOiBteXNxbDo1LjcKICAgIGVudmlyb25tZW50OgogICAgICAtIE1ZU1FMX0RBVEFCQVNFPXRlc3QKICAgICAgLSBNWVNRTF9BTExPV19FTVBUWV9QQVNTV09SRD15ZXMKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgcGdzcWw6CiAgICBpbWFnZTogcG9zdGdyZXM6OS41CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBQT1NUR1JFU19EQj10ZXN0CiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCg.hp6IsxbFIQOaxJdmGv32Vf34-Nra3KqVIWzH52W687I
|
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIGNsb25lOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0CiAgICB0YWdzOiB0cnVlCgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YSBzcWxpdGUKICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gYXBrIC1VIGFkZCBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIGdlbmVyYXRlCiAgICAgIC0gbWFrZSB2ZXQKICAgICAgLSBtYWtlIGxpbnQKICAgICAgLSBtYWtlIHRlc3QKICAgICAgLSBtYWtlIGJ1aWxkCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHRlc3QtbXlzcWw6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogYmluZGF0YQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHRlc3QtbXlzcWwKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgdGVzdC1wZ3NxbAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBzdGF0aWM6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICBUQUdTOiBiaW5kYXRhIHNxbGl0ZQogICAgICBHT1BBVEg6IC9zcnYvYXBwCiAgICBjb21tYW5kczoKICAgICAgLSBtYWtlIHJlbGVhc2UKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgIyBjb3ZlcmFnZToKICAjICAgaW1hZ2U6IHBsdWdpbnMvY292ZXJhZ2UKICAjICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgIyAgIHdoZW46CiAgIyAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICBkb2NrZXI6CiAgICBpbWFnZTogcGx1Z2lucy9kb2NrZXIKICAgIHJlcG86IGdpdGVhL2dpdGVhCiAgICB0YWdzOiBbICcke0RST05FX1RBRyMjdn0nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJyR7RFJPTkVfQlJBTkNIIyNyZWxlYXNlL3Z9JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIHJlbGVhc2UvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJ2xhdGVzdCcgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvJHtEUk9ORV9UQUcjI3Z9CiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvJHtEUk9ORV9CUkFOQ0gjI3JlbGVhc2Uvdn0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2ggXQogICAgICBicmFuY2g6IFsgcmVsZWFzZS8qIF0KCiAgcmVsZWFzZToKICAgIGltYWdlOiBwbHVnaW5zL3MzCiAgICBwYXRoX3N0eWxlOiB0cnVlCiAgICBzdHJpcF9wcmVmaXg6IGRpc3QvcmVsZWFzZS8KICAgIHNvdXJjZTogZGlzdC9yZWxlYXNlLyoKICAgIHRhcmdldDogL2dpdGVhL21hc3RlcgogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICBnaXRodWI6CiAgICBpbWFnZTogcGx1Z2lucy9naXRodWItcmVsZWFzZQogICAgZmlsZXM6CiAgICAgIC0gZGlzdC9yZWxlYXNlLyoKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGdpdHRlcjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdHRlcgoKc2VydmljZXM6CiAgbXlzcWw6CiAgICBpbWFnZTogbXlzcWw6NS43CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNWVNRTF9EQVRBQkFTRT10ZXN0CiAgICAgIC0gTVlTUUxfQUxMT1dfRU1QVFlfUEFTU1dPUkQ9eWVzCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHBnc3FsOgogICAgaW1hZ2U6IHBvc3RncmVzOjkuNQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfREI9dGVzdAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQo.uf02h57dWfCrxG3rcNcYlZPQP2XsFhKvcF2geGTpG50
|
||||||
20
CHANGELOG.md
20
CHANGELOG.md
@@ -1,5 +1,25 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.1.3](https://github.com/go-gitea/gitea/releases/tag/v1.1.3) - 2017-08-03
|
||||||
|
|
||||||
|
* BUGFIXES
|
||||||
|
* Fix PR template error (#2008)
|
||||||
|
* Fix markdown rendering (fix #1530) (#2043)
|
||||||
|
* Fix missing less sources for oauth (backport #1288) (#2135)
|
||||||
|
* Don't ignore gravatar error (#2138)
|
||||||
|
* Fix diff of renamed and modified file (#2136)
|
||||||
|
* Fix fast-forward PR bug (#2137)
|
||||||
|
* Fix some security bugs
|
||||||
|
|
||||||
|
## [1.1.2](https://github.com/go-gitea/gitea/releases/tag/v1.1.2) - 2017-06-13
|
||||||
|
|
||||||
|
* BUGFIXES
|
||||||
|
* Enforce netgo build tag while cross-compilation (Backport of #1690) (#1731)
|
||||||
|
* fix update avatar
|
||||||
|
* fix delete user failed on sqlite (#1321)
|
||||||
|
* fix bug not to trim space of login username (#1806)
|
||||||
|
* Backport bugfixes #1220 and #1393 to v1.1 (#1758)
|
||||||
|
|
||||||
## [1.1.1](https://github.com/go-gitea/gitea/releases/tag/v1.1.1) - 2017-05-04
|
## [1.1.1](https://github.com/go-gitea/gitea/releases/tag/v1.1.1) - 2017-05-04
|
||||||
|
|
||||||
* BUGFIXES
|
* BUGFIXES
|
||||||
|
|||||||
6
Makefile
6
Makefile
@@ -112,7 +112,7 @@ release-windows:
|
|||||||
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
go get -u github.com/karalabe/xgo; \
|
go get -u github.com/karalabe/xgo; \
|
||||||
fi
|
fi
|
||||||
xgo -dest $(DIST)/binaries -tags '$(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION) .
|
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION) .
|
||||||
ifeq ($(CI),drone)
|
ifeq ($(CI),drone)
|
||||||
mv /build/* $(DIST)/binaries
|
mv /build/* $(DIST)/binaries
|
||||||
endif
|
endif
|
||||||
@@ -122,7 +122,7 @@ release-linux:
|
|||||||
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
go get -u github.com/karalabe/xgo; \
|
go get -u github.com/karalabe/xgo; \
|
||||||
fi
|
fi
|
||||||
xgo -dest $(DIST)/binaries -tags '$(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out gitea-$(VERSION) .
|
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out gitea-$(VERSION) .
|
||||||
ifeq ($(CI),drone)
|
ifeq ($(CI),drone)
|
||||||
mv /build/* $(DIST)/binaries
|
mv /build/* $(DIST)/binaries
|
||||||
endif
|
endif
|
||||||
@@ -132,7 +132,7 @@ release-darwin:
|
|||||||
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
go get -u github.com/karalabe/xgo; \
|
go get -u github.com/karalabe/xgo; \
|
||||||
fi
|
fi
|
||||||
xgo -dest $(DIST)/binaries -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out gitea-$(VERSION) .
|
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out gitea-$(VERSION) .
|
||||||
ifeq ($(CI),drone)
|
ifeq ($(CI),drone)
|
||||||
mv /build/* $(DIST)/binaries
|
mv /build/* $(DIST)/binaries
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -360,7 +360,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
|
|||||||
|
|
||||||
issue, err := GetIssueByRef(ref)
|
issue, err := GetIssueByRef(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if IsErrIssueNotExist(err) {
|
if IsErrIssueNotExist(err) || err == errMissingIssueNumber {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@@ -398,7 +398,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
|
|||||||
|
|
||||||
issue, err := GetIssueByRef(ref)
|
issue, err := GetIssueByRef(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if IsErrIssueNotExist(err) {
|
if IsErrIssueNotExist(err) || err == errMissingIssueNumber {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@@ -438,7 +438,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
|
|||||||
|
|
||||||
issue, err := GetIssueByRef(ref)
|
issue, err := GetIssueByRef(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if IsErrIssueNotExist(err) {
|
if IsErrIssueNotExist(err) || err == errMissingIssueNumber {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import "github.com/markbates/goth"
|
|||||||
// ExternalLoginUser makes the connecting between some existing user and additional external login sources
|
// ExternalLoginUser makes the connecting between some existing user and additional external login sources
|
||||||
type ExternalLoginUser struct {
|
type ExternalLoginUser struct {
|
||||||
ExternalID string `xorm:"NOT NULL"`
|
ExternalID string `xorm:"NOT NULL"`
|
||||||
UserID int64 `xorm:"NOT NULL"`
|
UserID int64 `xorm:"NOT NULL"`
|
||||||
LoginSourceID int64 `xorm:"NOT NULL"`
|
LoginSourceID int64 `xorm:"NOT NULL"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetExternalLogin checks if a externalID in loginSourceID scope already exists
|
// GetExternalLogin checks if a externalID in loginSourceID scope already exists
|
||||||
@@ -67,8 +67,8 @@ func RemoveAccountLink(user *User, loginSourceID int64) (int64, error) {
|
|||||||
return deleted, err
|
return deleted, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveAllAccountLinks will remove all external login sources for the given user
|
// removeAllAccountLinks will remove all external login sources for the given user
|
||||||
func RemoveAllAccountLinks(user *User) error {
|
func removeAllAccountLinks(e Engine, user *User) error {
|
||||||
_, err := x.Delete(&ExternalLoginUser{UserID: user.ID})
|
_, err := e.Delete(&ExternalLoginUser{UserID: user.ID})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -366,10 +366,12 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
|
|||||||
}
|
}
|
||||||
|
|
||||||
curFile = &DiffFile{
|
curFile = &DiffFile{
|
||||||
Name: a,
|
Name: b,
|
||||||
Index: len(diff.Files) + 1,
|
OldName: a,
|
||||||
Type: DiffFileChange,
|
Index: len(diff.Files) + 1,
|
||||||
Sections: make([]*DiffSection, 0, 10),
|
Type: DiffFileChange,
|
||||||
|
Sections: make([]*DiffSection, 0, 10),
|
||||||
|
IsRenamed: a != b,
|
||||||
}
|
}
|
||||||
diff.Files = append(diff.Files, curFile)
|
diff.Files = append(diff.Files, curFile)
|
||||||
if len(diff.Files) >= maxFiles {
|
if len(diff.Files) >= maxFiles {
|
||||||
@@ -402,9 +404,6 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
|
|||||||
curFile.Type = DiffFileChange
|
curFile.Type = DiffFileChange
|
||||||
case strings.HasPrefix(line, "similarity index 100%"):
|
case strings.HasPrefix(line, "similarity index 100%"):
|
||||||
curFile.Type = DiffFileRename
|
curFile.Type = DiffFileRename
|
||||||
curFile.IsRenamed = true
|
|
||||||
curFile.OldName = curFile.Name
|
|
||||||
curFile.Name = b
|
|
||||||
}
|
}
|
||||||
if curFile.Type > 0 {
|
if curFile.Type > 0 {
|
||||||
if strings.HasSuffix(line, " 160000\n") {
|
if strings.HasSuffix(line, " 160000\n") {
|
||||||
|
|||||||
@@ -635,7 +635,12 @@ func UserSignIn(username, password string) (*User, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
user = &User{LowerName: strings.ToLower(strings.TrimSpace(username))}
|
trimmedUsername := strings.TrimSpace(username)
|
||||||
|
if len(trimmedUsername) == 0 {
|
||||||
|
return nil, ErrUserNotExist{0, username, 0}
|
||||||
|
}
|
||||||
|
|
||||||
|
user = &User{LowerName: strings.ToLower(trimmedUsername)}
|
||||||
}
|
}
|
||||||
|
|
||||||
hasUser, err := x.Get(user)
|
hasUser, err := x.Get(user)
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ func useNewNameAvatars(x *xorm.Engine) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
|
ID int64 `xorm:"pk autoincr"`
|
||||||
Avatar string
|
Avatar string
|
||||||
UseCustomAvatar bool
|
UseCustomAvatar bool
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -499,9 +499,15 @@ func (pr *PullRequest) getMergeCommit() (*git.Commit, error) {
|
|||||||
return nil, fmt.Errorf("git merge-base --is-ancestor: %v %v", stderr, err)
|
return nil, fmt.Errorf("git merge-base --is-ancestor: %v %v", stderr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// We can ignore this error since we only get here when there's a valid commit in headFile
|
commitIDBytes, err := ioutil.ReadFile(pr.BaseRepo.RepoPath() + "/" + headFile)
|
||||||
commitID, _ := ioutil.ReadFile(pr.BaseRepo.RepoPath() + "/" + headFile)
|
if err != nil {
|
||||||
cmd := string(commitID)[:40] + ".." + pr.BaseBranch
|
return nil, fmt.Errorf("ReadFile(%s): %v", headFile, err)
|
||||||
|
}
|
||||||
|
commitID := string(commitIDBytes)
|
||||||
|
if len(commitID) < 40 {
|
||||||
|
return nil, fmt.Errorf(`ReadFile(%s): invalid commit-ID "%s"`, headFile, commitID)
|
||||||
|
}
|
||||||
|
cmd := commitID[:40] + ".." + pr.BaseBranch
|
||||||
|
|
||||||
// Get the commit from BaseBranch where the pull request got merged
|
// Get the commit from BaseBranch where the pull request got merged
|
||||||
mergeCommit, stderr, err := process.GetManager().ExecDirEnv(-1, "", fmt.Sprintf("isMerged (git rev-list --ancestry-path --merges --reverse): %d", pr.BaseRepo.ID),
|
mergeCommit, stderr, err := process.GetManager().ExecDirEnv(-1, "", fmt.Sprintf("isMerged (git rev-list --ancestry-path --merges --reverse): %d", pr.BaseRepo.ID),
|
||||||
@@ -510,6 +516,9 @@ func (pr *PullRequest) getMergeCommit() (*git.Commit, error) {
|
|||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("git rev-list --ancestry-path --merges --reverse: %v %v", stderr, err)
|
return nil, fmt.Errorf("git rev-list --ancestry-path --merges --reverse: %v %v", stderr, err)
|
||||||
|
} else if len(mergeCommit) < 40 {
|
||||||
|
// PR was fast-forwarded, so just use last commit of PR
|
||||||
|
mergeCommit = commitID[:40]
|
||||||
}
|
}
|
||||||
|
|
||||||
gitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath())
|
gitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath())
|
||||||
|
|||||||
@@ -328,15 +328,14 @@ func (u *User) generateRandomAvatar(e Engine) error {
|
|||||||
// which includes app sub-url as prefix. However, it is possible
|
// which includes app sub-url as prefix. However, it is possible
|
||||||
// to return full URL if user enables Gravatar-like service.
|
// to return full URL if user enables Gravatar-like service.
|
||||||
func (u *User) RelAvatarLink() string {
|
func (u *User) RelAvatarLink() string {
|
||||||
defaultImgURL := setting.AppSubURL + "/img/avatar_default.png"
|
|
||||||
if u.ID == -1 {
|
if u.ID == -1 {
|
||||||
return defaultImgURL
|
return base.DefaultAvatarLink()
|
||||||
}
|
}
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case u.UseCustomAvatar:
|
case u.UseCustomAvatar:
|
||||||
if !com.IsFile(u.CustomAvatarPath()) {
|
if !com.IsFile(u.CustomAvatarPath()) {
|
||||||
return defaultImgURL
|
return base.DefaultAvatarLink()
|
||||||
}
|
}
|
||||||
return setting.AppSubURL + "/avatars/" + u.Avatar
|
return setting.AppSubURL + "/avatars/" + u.Avatar
|
||||||
case setting.DisableGravatar, setting.OfflineMode:
|
case setting.DisableGravatar, setting.OfflineMode:
|
||||||
@@ -989,7 +988,7 @@ func deleteUser(e *xorm.Session, u *User) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ***** START: ExternalLoginUser *****
|
// ***** START: ExternalLoginUser *****
|
||||||
if err = RemoveAllAccountLinks(u); err != nil {
|
if err = removeAllAccountLinks(e, u); err != nil {
|
||||||
return fmt.Errorf("ExternalLoginUser: %v", err)
|
return fmt.Errorf("ExternalLoginUser: %v", err)
|
||||||
}
|
}
|
||||||
// ***** END: ExternalLoginUser *****
|
// ***** END: ExternalLoginUser *****
|
||||||
|
|||||||
@@ -192,13 +192,21 @@ func HashEmail(email string) string {
|
|||||||
return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
|
return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DefaultAvatarLink the default avatar link
|
||||||
|
func DefaultAvatarLink() string {
|
||||||
|
return setting.AppSubURL + "/img/avatar_default.png"
|
||||||
|
}
|
||||||
|
|
||||||
// AvatarLink returns relative avatar link to the site domain by given email,
|
// AvatarLink returns relative avatar link to the site domain by given email,
|
||||||
// which includes app sub-url as prefix. However, it is possible
|
// which includes app sub-url as prefix. However, it is possible
|
||||||
// to return full URL if user enables Gravatar-like service.
|
// to return full URL if user enables Gravatar-like service.
|
||||||
func AvatarLink(email string) string {
|
func AvatarLink(email string) string {
|
||||||
if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
|
if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
|
||||||
// TODO: This doesn't check any error. AvatarLink should return (string, error)
|
url, err := setting.LibravatarService.FromEmail(email)
|
||||||
url, _ := setting.LibravatarService.FromEmail(email)
|
if err != nil {
|
||||||
|
log.Error(4, "LibravatarService.FromEmail(email=%s): error %v", email, err)
|
||||||
|
return DefaultAvatarLink()
|
||||||
|
}
|
||||||
return url
|
return url
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +214,7 @@ func AvatarLink(email string) string {
|
|||||||
return setting.GravatarSource + HashEmail(email)
|
return setting.GravatarSource + HashEmail(email)
|
||||||
}
|
}
|
||||||
|
|
||||||
return setting.AppSubURL + "/img/avatar_default.png"
|
return DefaultAvatarLink()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seconds-based time units
|
// Seconds-based time units
|
||||||
|
|||||||
@@ -334,13 +334,11 @@ func RepoAssignment(args ...bool) macaron.Handler {
|
|||||||
if ctx.Repo.IsWriter() || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) {
|
if ctx.Repo.IsWriter() || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) {
|
||||||
// Pull request is allowed if this is a fork repository
|
// Pull request is allowed if this is a fork repository
|
||||||
// and base repository accepts pull requests.
|
// and base repository accepts pull requests.
|
||||||
if repo.BaseRepo != nil {
|
if repo.BaseRepo != nil && repo.BaseRepo.AllowsPulls() {
|
||||||
if repo.BaseRepo.AllowsPulls() {
|
ctx.Data["BaseRepo"] = repo.BaseRepo
|
||||||
ctx.Data["BaseRepo"] = repo.BaseRepo
|
ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo
|
||||||
ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo
|
ctx.Repo.PullRequest.Allowed = true
|
||||||
ctx.Repo.PullRequest.Allowed = true
|
ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName
|
||||||
ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Or, this is repository accepts pull requests between branches.
|
// Or, this is repository accepts pull requests between branches.
|
||||||
if repo.AllowsPulls() {
|
if repo.AllowsPulls() {
|
||||||
|
|||||||
@@ -156,11 +156,14 @@ func (r *Renderer) ListItem(out *bytes.Buffer, text []byte, flags int) {
|
|||||||
switch {
|
switch {
|
||||||
case bytes.HasPrefix(text, []byte(prefix+"[ ] ")):
|
case bytes.HasPrefix(text, []byte(prefix+"[ ] ")):
|
||||||
text = append([]byte(`<div class="ui fitted disabled checkbox"><input type="checkbox" disabled="disabled" /><label /></div>`), text[3+len(prefix):]...)
|
text = append([]byte(`<div class="ui fitted disabled checkbox"><input type="checkbox" disabled="disabled" /><label /></div>`), text[3+len(prefix):]...)
|
||||||
|
if prefix != "" {
|
||||||
|
text = bytes.Replace(text, []byte(prefix), []byte{}, 1)
|
||||||
|
}
|
||||||
case bytes.HasPrefix(text, []byte(prefix+"[x] ")):
|
case bytes.HasPrefix(text, []byte(prefix+"[x] ")):
|
||||||
text = append([]byte(`<div class="ui checked fitted disabled checkbox"><input type="checkbox" checked="" disabled="disabled" /><label /></div>`), text[3+len(prefix):]...)
|
text = append([]byte(`<div class="ui checked fitted disabled checkbox"><input type="checkbox" checked="" disabled="disabled" /><label /></div>`), text[3+len(prefix):]...)
|
||||||
}
|
if prefix != "" {
|
||||||
if prefix != "" {
|
text = bytes.Replace(text, []byte(prefix), []byte{}, 1)
|
||||||
text = bytes.Replace(text, []byte("</p>"), []byte{}, 1)
|
}
|
||||||
}
|
}
|
||||||
r.Renderer.ListItem(out, text, flags)
|
r.Renderer.ListItem(out, text, flags)
|
||||||
}
|
}
|
||||||
@@ -638,10 +641,8 @@ OUTER_LOOP:
|
|||||||
// Copy the token to the output verbatim
|
// Copy the token to the output verbatim
|
||||||
buf.Write(RenderShortLinks([]byte(token.String()), urlPrefix, true, isWikiMarkdown))
|
buf.Write(RenderShortLinks([]byte(token.String()), urlPrefix, true, isWikiMarkdown))
|
||||||
|
|
||||||
if token.Type == html.StartTagToken {
|
if token.Type == html.StartTagToken && !com.IsSliceContainsStr(noEndTags, token.Data) {
|
||||||
if !com.IsSliceContainsStr(noEndTags, token.Data) {
|
stackNum++
|
||||||
stackNum++
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this is the close tag to the outer-most, we are done
|
// If this is the close tag to the outer-most, we are done
|
||||||
@@ -656,8 +657,8 @@ OUTER_LOOP:
|
|||||||
continue OUTER_LOOP
|
continue OUTER_LOOP
|
||||||
}
|
}
|
||||||
|
|
||||||
if !com.IsSliceContainsStr(noEndTags, token.Data) {
|
if !com.IsSliceContainsStr(noEndTags, tagName) {
|
||||||
startTags = append(startTags, token.Data)
|
startTags = append(startTags, tagName)
|
||||||
}
|
}
|
||||||
|
|
||||||
case html.EndTagToken:
|
case html.EndTagToken:
|
||||||
|
|||||||
@@ -949,6 +949,23 @@ footer .ui.language .menu {
|
|||||||
#create-page-form form textarea {
|
#create-page-form form textarea {
|
||||||
width: 50%!important;
|
width: 50%!important;
|
||||||
}
|
}
|
||||||
|
.signin .oauth2 div {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.signin .oauth2 div p {
|
||||||
|
margin: 10px 5px 0 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.signin .oauth2 a {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
.signin .oauth2 a:last-child {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
.signin .oauth2 img {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
.user.activate form,
|
.user.activate form,
|
||||||
.user.forgot.password form,
|
.user.forgot.password form,
|
||||||
.user.reset.password form,
|
.user.reset.password form,
|
||||||
@@ -2742,6 +2759,10 @@ footer .ui.language .menu {
|
|||||||
.user.notification .octicon.blue {
|
.user.notification .octicon.blue {
|
||||||
color: #2185d0;
|
color: #2185d0;
|
||||||
}
|
}
|
||||||
|
.user.link-account:not(.icon) {
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
.dashboard {
|
.dashboard {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
padding-bottom: 80px;
|
padding-bottom: 80px;
|
||||||
@@ -2983,24 +3004,3 @@ footer .ui.language .menu {
|
|||||||
.ui.user.list .item .description a:hover {
|
.ui.user.list .item .description a:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
.user.link-account:not(.icon) {
|
|
||||||
padding-top: 15px;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
.signin .oauth2 div {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
.signin .oauth2 div p {
|
|
||||||
margin: 10px 5px 0 0;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.signin .oauth2 a {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
.signin .oauth2 a:last-child {
|
|
||||||
margin-right: 0px;
|
|
||||||
}
|
|
||||||
.signin .oauth2 img {
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
}
|
|
||||||
@@ -46,6 +46,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.signin {
|
||||||
|
.oauth2{
|
||||||
|
div {
|
||||||
|
display: inline-block;
|
||||||
|
p {
|
||||||
|
margin: 10px 5px 0 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
margin-right: 5px;
|
||||||
|
&:last-child {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.user.activate,
|
.user.activate,
|
||||||
.user.forgot.password,
|
.user.forgot.password,
|
||||||
.user.reset.password,
|
.user.reset.password,
|
||||||
|
|||||||
@@ -114,4 +114,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&.link-account:not(.icon) {
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ func RegisterRoutes(m *macaron.Macaron) {
|
|||||||
Post(bind(api.CreateKeyOption{}), repo.CreateDeployKey)
|
Post(bind(api.CreateKeyOption{}), repo.CreateDeployKey)
|
||||||
m.Combo("/:id").Get(repo.GetDeployKey).
|
m.Combo("/:id").Get(repo.GetDeployKey).
|
||||||
Delete(repo.DeleteDeploykey)
|
Delete(repo.DeleteDeploykey)
|
||||||
})
|
}, reqRepoWriter())
|
||||||
m.Group("/issues", func() {
|
m.Group("/issues", func() {
|
||||||
m.Combo("").Get(repo.ListIssues).Post(bind(api.CreateIssueOption{}), repo.CreateIssue)
|
m.Combo("").Get(repo.ListIssues).Post(bind(api.CreateIssueOption{}), repo.CreateIssue)
|
||||||
m.Group("/comments", func() {
|
m.Group("/comments", func() {
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
{{end}}
|
{{end}}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="ui attached table segment">
|
<div class="ui attached table segment">
|
||||||
{{if not $file.IsRenamed}}
|
{{if ne $file.Type 4}}
|
||||||
{{$isImage := (call $.IsImageFile $file.Name)}}
|
{{$isImage := (call $.IsImageFile $file.Name)}}
|
||||||
{{if and $isImage}}
|
{{if and $isImage}}
|
||||||
<div class="center">
|
<div class="center">
|
||||||
|
|||||||
Reference in New Issue
Block a user