Compare commits
174 Commits
Author | SHA1 | Date | |
---|---|---|---|
83f8414e1e | |||
0b216f40fd | |||
dd6e604f8f | |||
86863ae939 | |||
f3a90057a5 | |||
03fdd82d63 | |||
cd7fa15d1d | |||
79868d7096 | |||
19626b93f8 | |||
91e6a7f7ea | |||
ff7eaa1eb4 | |||
5131206aad | |||
bfc25fcf40 | |||
4a6765fba2 | |||
dca8ef9407 | |||
cebef5c871 | |||
245d6ebda5 | |||
d9875ff2e1 | |||
cc2a6c1d30 | |||
b5fd55de73 | |||
e11b3a1076 | |||
0c4be64345 | |||
c34ad62eea | |||
f7d7cf4e2d | |||
99a364a9dc | |||
3afbbfe921 | |||
bfce841b04 | |||
139fc7cfee | |||
596eebb2b6 | |||
1d5d745851 | |||
3dabfd4933 | |||
6ee6731290 | |||
602fe45936 | |||
e2da9cd21f | |||
c0b917b7eb | |||
54ea58ddf0 | |||
0158725387 | |||
f3cacf1332 | |||
a15dc93011 | |||
66b31786d3 | |||
931ddfec6d | |||
7e0a5b17db | |||
07688231c2 | |||
21eaeb8418 | |||
9a929ad17f | |||
c19ac41b34 | |||
fd85d31cb4 | |||
c9e4d7a564 | |||
9990430e32 | |||
6f5656ab0e | |||
e4a876cee1 | |||
abb534ba7a | |||
65dceb6a40 | |||
db26f0aca9 | |||
76878fd69b | |||
3444fa2dd7 | |||
caa2aeaa52 | |||
11300ee582 | |||
c6b78c3d31 | |||
4c40aa5be9 | |||
50f2e90b76 | |||
5d11ccc9e1 | |||
93860af542 | |||
7bf5834f2c | |||
1fbdd9335f | |||
e9061a537c | |||
ed664a9e1d | |||
4cb18601ff | |||
3abb25166c | |||
9e6ad64d48 | |||
b51d7c459e | |||
d3b6f001fe | |||
e938f1d945 | |||
7284327a00 | |||
919f3f11e2 | |||
3cee15e6f9 | |||
34e3644ada | |||
14bd120cdc | |||
3e40f8bebc | |||
df5f1d9dca | |||
457ee1ab5a | |||
4f64688902 | |||
117dcf1c02 | |||
4529a262c0 | |||
ff24f81a05 | |||
e3cb4f9d0e | |||
9b7890f1cc | |||
eb064dfda2 | |||
f9e66e5a46 | |||
ef89260cf1 | |||
315d928626 | |||
5525452bdf | |||
987cd277f6 | |||
5cdfde2ebf | |||
1cd6233cef | |||
cb81e39f7a | |||
8efd6b32e2 | |||
c95d9603ea | |||
9169b39458 | |||
80eb50655a | |||
b16c555541 | |||
b5b44364e3 | |||
6af58022c8 | |||
e48b460a0a | |||
2cd2614eaa | |||
0129e76ef5 | |||
6896dad675 | |||
1ed4323005 | |||
049af0d3d0 | |||
f5727d83dd | |||
912ce27421 | |||
b3549bb5ec | |||
491cbeca67 | |||
895d92ffe5 | |||
4b11f967bd | |||
1e73dd2446 | |||
315026c2c5 | |||
16dfd9ffbe | |||
16f7b43903 | |||
043febdbc9 | |||
60f91d56f0 | |||
16fc15ae6a | |||
ef8f6d99f1 | |||
4b688135f9 | |||
e24861a546 | |||
128cc34344 | |||
f82a805478 | |||
0dced15c1a | |||
db9342c854 | |||
79c1d48532 | |||
05b9864086 | |||
ff508c9c9b | |||
f96c1a2c79 | |||
ce756ee89f | |||
f2e9d4b851 | |||
e878d743f4 | |||
3fa14d89a2 | |||
bcb722daec | |||
8add1dfacc | |||
aa6ed1b7c1 | |||
95cb921097 | |||
6730df9e8c | |||
b577500a54 | |||
fe46185407 | |||
69a2a29c33 | |||
f766719895 | |||
e2ddc42377 | |||
3521177a34 | |||
c8bb0ecf52 | |||
dbe6136348 | |||
6d1f7e90cf | |||
42663a687c | |||
73c90c26d4 | |||
c579ad92b5 | |||
602c5da953 | |||
1980e59ac2 | |||
28508792ba | |||
3e23dad075 | |||
b13b9d3dbd | |||
4072f28e60 | |||
dbeef6bb02 | |||
fec35440db | |||
f8ea50cc7a | |||
0e53a16cca | |||
7eaba6ba8a | |||
ff16099c6d | |||
a516a7ba0f | |||
11bce6fd3d | |||
3fb906dc02 | |||
3a00a690c9 | |||
a2b7cc1bb1 | |||
04a77b1f42 | |||
f523372d07 | |||
e39c238ef4 |
.changelog.yml.drone.yml.editorconfig.eslintignore.eslintrc.gitattributestools.gowebpack.config.js
.github
.gitignore.golangci.yml.ignore.npmrc.stylelintrcCHANGELOG.mdCONTRIBUTING.mdDockerfileMakefileREADME.mdREADME_ZH.mdassets
build.gobuild
cmd
admin.goadmin_auth_ldap.goadmin_auth_ldap_test.godoctor.godump.goembedded.goembedded_stub.gogenerate.gomanager.goserv.go
contrib
fixtures
ide/vscode
legal
options/label
pr
custom/conf
docker
docs
README_ZH.md
go.modgo.sumassets/js
config.yamlcontent
doc
advanced
adding-legal-pages.en-us.mdci-cd.en-us.mdcmd-embedded.en-us.mdconfig-cheat-sheet.en-us.mdconfig-cheat-sheet.zh-cn.mdcustomizing-gitea.en-us.mdexternal-renderers.en-us.mdhacking-on-gitea.en-us.mdlogging-documentation.en-us.mdmigrations.en-us.mdrepo-indexer.en-us.mdsigning.en-us.mdthird-party-tools.en-us.md
features
authentication.en-us.mdcomparison.en-us.mdcomparison.zh-cn.mdgitea-directory.mdlocalization.en-us.mdwebhooks.en-us.md
help
installation
database-preparation.en-us.mdfrom-binary.en-us.mdfrom-binary.fr-fr.mdfrom-binary.zh-tw.mdfrom-package.en-us.mdfrom-package.fr-fr.mdfrom-package.zh-tw.mdfrom-source.en-us.mdfrom-source.fr-fr.mdfrom-source.zh-cn.mdfrom-source.zh-tw.mdrun-as-service-in-ubuntu.en-us.mdwith-docker.en-us.mdwith-docker.fr-fr.mdwith-docker.zh-tw.md
upgrade
usage
page
layouts/shortcodes
integrations
README.mdapi_branch_test.goapi_comment_test.goapi_gpg_keys_test.goapi_helper_for_declarative_test.goapi_issue_label_test.goapi_issue_subscription_test.goapi_issue_test.goapi_issue_tracked_time_test.goapi_notification_test.goapi_oauth2_apps_test.goapi_org_test.goapi_pull_review_test.goapi_pull_test.goapi_repo_file_create_test.goapi_repo_file_delete_test.goapi_repo_file_update_test.goapi_repo_get_contents_list_test.goapi_repo_get_contents_test.goapi_repo_git_commits_test.goapi_repo_test.goapi_team_test.goattachment_test.goauth_ldap_test.gobranches_test.gocmd_keys_test.goeventsource_test.gogit_helper_for_declarative_test.gogit_test.gointegration_test.goissue_test.golfs_getobject_test.go
main.gogitea-repositories-meta
user2
repo1.git
info
objects
5c
5f
62
6a
7c
90
94
98
a6
a7
b2
dd
refs
repo20.git/hooks
user27/template1.git/hooks
migration-test
gitea-v1.3.3.sqlite3.sql.gzgitea-v1.5.3.mssql.sql.gzgitea-v1.5.3.mysql.sql.gzgitea-v1.5.3.postgres.sql.gzgitea-v1.5.3.sqlite3.sql.gzgitea-v1.6.4.mssql.sql.gzgitea-v1.6.4.postgres.sql.gzgitea-v1.7.0.mssql.sql.gzgitea-v1.7.0.postgres.sql.gzmigration_test.go
mssql.ini.tmplmysql.ini.tmplmysql8.ini.tmplorg_count_test.gopgsql.ini.tmplprivate-testing.keypull_create_test.gopull_merge_test.gopull_update_test.gorelease_test.gorepo_activity_test.gorepo_test.gorepofiles_update_test.gosqlite.inisqlite.ini.tmplssh_key_test.gotestlogger.gomodels
access.goaccess_test.goaction.goaction_test.goadmin.goattachment.goavatar.gobranches.gocommit_status.goconsistency.gocontext.goerror.goexternal_login_user.gofixture_generation.gofixture_test.go
fixtures
access.ymlcollaboration.ymlcomment.ymlissue.ymlissue_label.ymllabel.ymlmilestone.ymlnotification.ymlorg_user.ymlpull_request.ymlrepo_unit.ymlrepository.ymlreview.ymlteam.ymlteam_user.ymluser.yml
gpg_key.gohelper_environment.goissue.goissue_assignees.goissue_comment.goissue_label.goissue_label_test.goissue_list.goissue_list_test.goissue_milestone.goissue_milestone_test.goissue_reaction.goissue_reaction_test.goissue_stopwatch.goissue_stopwatch_test.goissue_test.goissue_tracked_time.goissue_user_test.goissue_watch.goissue_watch_test.golfs.golist_options.golog.gologin_source.gomain_test.gomigrate.gomigrations
migrations.gov110.gov115.gov118.gov119.gov120.gov121.gov122.gov123.gov124.gov125.gov126.gov127.gov128.gov129.gov13.gov130.gov131.gov132.gov133.gov134.gov135.gov136.gov137.gov138.gov139.gov14.gov140.gov15.gov16.gov17.gov18.gov19.gov20.gov21.gov22.gov23.gov24.gov25.gov26.gov27.gov28.gov29.gov30.gov31.gov32.gov33.gov34.gov35.gov36.gov37.gov38.gov39.gov40.gov41.gov45.gov46.gov47.gov48.gov49.gov50.gov51.gov52.gov53.gov54.gov55.gov56.gov57.gov58.gov59.gov60.gov61.gov62.gov63.gov64.gov65.gov66.gov67.gov68.gov69.gov70.gov76.gov81.go
models.gonotification.gonotification_test.gooauth2.gooauth2_application.goorg.goorg_team.goorg_team_test.goorg_test.gopull.gopull_list.gopull_sign.gopull_test.gorelease.gorepo.gorepo_activity.gorepo_branch.gorepo_collaboration.gorepo_collaboration_test.gorepo_generate.gorepo_indexer.gorepo_language_stats.gorepo_list.gorepo_list_test.gorepo_permission.gorepo_sign.gorepo_test.gorepo_unit.gorepo_watch.gorepo_watch_test.goreview.goreview_test.gossh_key.gostar.gostar_test.gotask.gotest_fixtures.gotoken.gotoken_test.gotopic.gotopic_test.gotwofactor.gou2f_test.gounit.gounit_tests.goupdate.goupdate_test.goupload.gouser.gouser_follow_test.gouser_heatmap_test.gouser_mail.gouser_mail_test.gouser_openid.gouser_test.gouserlist.gowebhook.gowebhook_test.gowiki.gomodules
analyze
auth
base
cache
context
convert
cron
emoji
eventsource
generate
git
blame.goblame_test.gocache.gocommand.gocommit.gocommit_archive.gocommit_info.gocommit_info_test.gocommit_reader.godiff.godiff_test.goerror.gogit.gorepo.gorepo_branch.gorepo_commit.gorepo_compare.gorepo_language_stats.gorepo_stats.gorepo_stats_test.gorepo_tag.gorepo_tag_test.gosha1.gosubmodule.gosubmodule_test.gotree_entry.goutils.goutils_test.go
graceful
indexer
code
issues
stats
lfs
log
markup
migrations
base
error.gogit.gogitea.gogitea_test.gogithub.gogithub_test.gogitlab.gogitlab_test.gomigrate.goupdate.gonotification
options
private
process
public
queue
bytefifo.gohelper.gomanager.goqueue.goqueue_bytefifo.goqueue_channel.goqueue_channel_test.goqueue_disk.goqueue_disk_channel.goqueue_disk_test.goqueue_redis.goqueue_wrapped.gosetting.gounique_queue.gounique_queue_channel.gounique_queue_disk.gounique_queue_disk_channel.gounique_queue_redis.gounique_queue_wrapped.goworkerpool.go
references
repofiles
repository
branch.gocheck.gocommits.gocommits_test.gocreate.gocreate_test.gofork.gofork_test.gogenerate.gohooks.goinit.gomain_test.gorepo.goupdate.go
session
setting
cache.gocors.gocron.godatabase.gogit.goindexer.golog.gomailer.gomarkup.goqueue.gorepository.gosession.gosetting.gowebhook.go
ssh
structs
hook.goissue.goissue_label.gonotifications.goorg_team.gopull.gopull_review.gorelease.gorepo.gorepo_branch.gouser_app.goutils.go
task
templates
test
timeutil
user
util
validation
webhook
options/locale
TRANSLATORSlocale_bg-BG.inilocale_cs-CZ.inilocale_de-DE.inilocale_en-US.inilocale_es-ES.inilocale_fa-IR.inilocale_fi-FI.inilocale_fr-FR.inilocale_hu-HU.inilocale_id-ID.inilocale_it-IT.inilocale_ja-JP.inilocale_ko-KR.inilocale_lt-LT.inilocale_lv-LV.inilocale_ml-IN.inilocale_nb-NO.inilocale_nl-NL.inilocale_nn-NO.inilocale_no-NO.inilocale_pl-PL.inilocale_pt-BR.inilocale_pt-PT.inilocale_ru-RU.inilocale_ru-UA.inilocale_sr-SP.inilocale_sv-SE.inilocale_tr-TR.inilocale_uk-UA.inilocale_vi-VN.inilocale_zh-CN.inilocale_zh-HK.inilocale_zh-TW.ini
package-lock.jsonpackage.jsonpublic
img
vendor
VERSIONSlibrejs.html
assets
lato-fonts
lato-v16-latin-700.eotlato-v16-latin-700.svglato-v16-latin-700.ttflato-v16-latin-700.wofflato-v16-latin-700.woff2lato-v16-latin-700italic.eotlato-v16-latin-700italic.svglato-v16-latin-700italic.ttflato-v16-latin-700italic.wofflato-v16-latin-700italic.woff2lato-v16-latin-italic.eotlato-v16-latin-italic.svglato-v16-latin-italic.ttflato-v16-latin-italic.wofflato-v16-latin-italic.woff2lato-v16-latin-regular.eotlato-v16-latin-regular.svglato-v16-latin-regular.ttflato-v16-latin-regular.wofflato-v16-latin-regular.woff2
noto-color-emoji
octicons
roboto-fonts
roboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-700.woffroboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-700.woff2roboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-700italic.woffroboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-700italic.woff2roboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-italic.woffroboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-italic.woff2roboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-regular.woffroboto-v20-latin-ext_cyrillic-ext_latin_greek_vietnamese_cyrillic_greek-ext-regular.woff2
swagger-ui
plugins
clipboard
cssrelpreload
dropzone
emojify
LICENSEemojify.custom.js
images
+1.png-1.png100.png1234.png8ball.pnga.pngab.pngabc.pngabcd.pngaccept.pngaerial_tramway.pngairplane.pngalarm_clock.pngalien.pngambulance.pnganchor.pngangel.pnganger.pngangry.pnganguished.pngant.pngapple.pngaquarius.pngaries.pngarrow_backward.pngarrow_double_down.pngarrow_double_up.pngarrow_down.pngarrow_down_small.pngarrow_forward.pngarrow_heading_down.pngarrow_heading_up.pngarrow_left.pngarrow_lower_left.pngarrow_lower_right.pngarrow_right.pngarrow_right_hook.pngarrow_up.pngarrow_up_down.pngarrow_up_small.pngarrow_upper_left.pngarrow_upper_right.pngarrows_clockwise.pngarrows_counterclockwise.pngart.pngarticulated_lorry.pngastonished.pngatm.pngb.pngbaby.pngbaby_bottle.pngbaby_chick.pngbaby_symbol.pngback.pngbaggage_claim.pngballoon.pngballot_box_with_check.pngbamboo.pngbanana.pngbangbang.pngbank.pngbar_chart.pngbarber.pngbaseball.pngbasketball.pngbath.pngbathtub.pngbattery.pngbear.pngbee.pngbeer.pngbeers.pngbeetle.pngbeginner.pngbell.pngbento.pngbicyclist.pngbike.pngbikini.pngbird.pngbirthday.pngblack_circle.pngblack_joker.pngblack_medium_small_square.pngblack_medium_square.pngblack_nib.pngblack_small_square.pngblack_square.pngblack_square_button.pngblossom.pngblowfish.pngblue_book.pngblue_car.pngblue_heart.pngblush.pngboar.pngboat.pngbomb.pngbook.pngbookmark.pngbookmark_tabs.pngbooks.pngboom.pngboot.pngbouquet.pngbow.pngbowling.pngbowtie.pngboy.pngbread.pngbride_with_veil.pngbridge_at_night.pngbriefcase.pngbroken_heart.pngbug.pngbulb.pngbullettrain_front.pngbullettrain_side.pngbus.pngbusstop.pngbust_in_silhouette.pngbusts_in_silhouette.pngcactus.pngcake.pngcalendar.pngcalling.pngcamel.pngcamera.pngcancer.pngcandy.pngcapital_abcd.pngcapricorn.pngcar.pngcard_index.pngcarousel_horse.pngcat.pngcat2.pngcd.pngchart.pngchart_with_downwards_trend.pngchart_with_upwards_trend.pngcheckered_flag.pngcherries.pngcherry_blossom.pngchestnut.pngchicken.pngchildren_crossing.pngchocolate_bar.pngchristmas_tree.pngchurch.pngcinema.pngcircus_tent.pngcity_sunrise.pngcity_sunset.pngcl.pngclap.pngclapper.pngclipboard.pngclock1.pngclock10.pngclock1030.pngclock11.pngclock1130.pngclock12.pngclock1230.pngclock130.pngclock2.pngclock230.pngclock3.pngclock330.pngclock4.pngclock430.pngclock5.pngclock530.pngclock6.pngclock630.pngclock7.pngclock730.pngclock8.pngclock830.pngclock9.pngclock930.pngclosed_book.pngclosed_lock_with_key.pngclosed_umbrella.pngcloud.pngclubs.pngcn.pngcocktail.pngcoffee.pngcold_sweat.pngcollision.pngcomputer.pngconfetti_ball.pngconfounded.pngconfused.pngcongratulations.pngconstruction.pngconstruction_worker.pngconvenience_store.pngcookie.pngcool.pngcop.pngcopyright.pngcorn.pngcouple.pngcouple_with_heart.pngcouplekiss.pngcow.pngcow2.pngcredit_card.pngcrescent_moon.pngcrocodile.pngcrossed_flags.pngcrown.pngcry.pngcrying_cat_face.pngcrystal_ball.pngcupid.pngcurly_loop.pngcurrency_exchange.pngcurry.pngcustard.pngcustoms.pngcyclone.pngdancer.pngdancers.pngdango.pngdart.pngdash.pngdate.pngde.pngdeciduous_tree.pngdepartment_store.pngdiamond_shape_with_a_dot_inside.pngdiamonds.pngdisappointed.pngdisappointed_relieved.pngdizzy.pngdizzy_face.pngdo_not_litter.pngdog.pngdog2.pngdollar.pngdolls.pngdolphin.pngdonut.pngdoor.pngdoughnut.pngdragon.pngdragon_face.pngdress.pngdromedary_camel.pngdroplet.pngdvd.pnge-mail.pngear.pngear_of_rice.pngearth_africa.pngearth_americas.pngearth_asia.pngegg.pngeggplant.pngeight.pngeight_pointed_black_star.pngeight_spoked_asterisk.pngelectric_plug.pngelephant.pngemail.pngend.pngenvelope.pnges.pngeuro.pngeuropean_castle.pngeuropean_post_office.pngevergreen_tree.pngexclamation.pngexpressionless.pngeyeglasses.pngeyes.pngfacepunch.pngfactory.pngfallen_leaf.pngfamily.pngfast_forward.pngfax.pngfearful.pngfeelsgood.pngfeet.pngferris_wheel.pngfile_folder.pngfinnadie.pngfire.pngfire_engine.pngfireworks.pngfirst_quarter_moon.pngfirst_quarter_moon_with_face.pngfish.pngfish_cake.pngfishing_pole_and_fish.pngfist.pngfive.pngflags.pngflashlight.pngfloppy_disk.pngflower_playing_cards.pngflushed.pngfoggy.pngfootball.pngfork_and_knife.pngfountain.pngfour.pngfour_leaf_clover.pngfr.pngfree.pngfried_shrimp.pngfries.pngfrog.pngfrowning.pngfu.pngfuelpump.pngfull_moon.pngfull_moon_with_face.pnggame_die.pnggb.pnggem.pnggemini.pngghost.pnggift.pnggift_heart.pnggirl.pnggitea.pngglobe_with_meridians.pnggoat.pnggoberserk.pnggodmode.pnggolf.pnggrapes.pnggreen_apple.pnggreen_book.pnggreen_heart.pnggrey_exclamation.pnggrey_question.pnggrimacing.pnggrin.pnggrinning.pngguardsman.pngguitar.pnggun.pnghaircut.pnghamburger.pnghammer.pnghamster.pnghand.pnghandbag.pnghankey.pnghash.pnghatched_chick.pnghatching_chick.pngheadphones.pnghear_no_evil.pngheart.pngheart_decoration.pngheart_eyes.pngheart_eyes_cat.pngheartbeat.pngheartpulse.pnghearts.pngheavy_check_mark.pngheavy_division_sign.pngheavy_dollar_sign.pngheavy_exclamation_mark.pngheavy_minus_sign.pngheavy_multiplication_x.pngheavy_plus_sign.pnghelicopter.pngherb.pnghibiscus.pnghigh_brightness.pnghigh_heel.pnghocho.pnghoney_pot.pnghoneybee.pnghorse.pnghorse_racing.pnghospital.pnghotel.pnghotsprings.pnghourglass.pnghourglass_flowing_sand.pnghouse.pnghouse_with_garden.pnghurtrealbad.pnghushed.pngice_cream.pngicecream.pngid.pngideograph_advantage.pngimp.pnginbox_tray.pngincoming_envelope.pnginformation_desk_person.pnginformation_source.pnginnocent.pnginterrobang.pngiphone.pngit.pngizakaya_lantern.pngjack_o_lantern.pngjapan.pngjapanese_castle.pngjapanese_goblin.pngjapanese_ogre.pngjeans.pngjoy.pngjoy_cat.pngjp.pngkey.pngkeycap_ten.pngkimono.pngkiss.pngkissing.pngkissing_cat.pngkissing_closed_eyes.pngkissing_face.pngkissing_heart.pngkissing_smiling_eyes.pngkoala.pngkoko.pngkr.pnglarge_blue_circle.pnglarge_blue_diamond.pnglarge_orange_diamond.pnglast_quarter_moon.pnglast_quarter_moon_with_face.pnglaughing.pngleaves.pngledger.pngleft_luggage.pngleft_right_arrow.pngleftwards_arrow_with_hook.pnglemon.pngleo.pngleopard.pnglibra.pnglight_rail.pnglink.pnglips.pnglipstick.pnglock.pnglock_with_ink_pen.pnglollipop.pngloop.pngloudspeaker.pnglove_hotel.pnglove_letter.pnglow_brightness.pngm.pngmag.pngmag_right.pngmahjong.pngmailbox.pngmailbox_closed.pngmailbox_with_mail.pngmailbox_with_no_mail.pngman.pngman_with_gua_pi_mao.pngman_with_turban.pngmans_shoe.pngmaple_leaf.pngmask.pngmassage.pngmeat_on_bone.pngmega.pngmelon.pngmemo.pngmens.pngmetal.pngmetro.pngmicrophone.pngmicroscope.pngmilky_way.pngminibus.pngminidisc.pngmobile_phone_off.pngmoney_with_wings.pngmoneybag.pngmonkey.pngmonkey_face.pngmonorail.pngmortar_board.pngmount_fuji.pngmountain_bicyclist.pngmountain_cableway.pngmountain_railway.pngmouse.pngmouse2.pngmovie_camera.pngmoyai.pngmuscle.pngmushroom.pngmusical_keyboard.pngmusical_note.pngmusical_score.pngmute.pngnail_care.pngname_badge.pngneckbeard.pngnecktie.pngnegative_squared_cross_mark.pngneutral_face.pngnew.pngnew_moon.pngnew_moon_with_face.pngnewspaper.pngng.pngnine.pngno_bell.pngno_bicycles.pngno_entry.pngno_entry_sign.pngno_good.pngno_mobile_phones.pngno_mouth.pngno_pedestrians.pngno_smoking.pngnon-potable_water.pngnose.pngnotebook.pngnotebook_with_decorative_cover.pngnotes.pngnut_and_bolt.pngo.pngo2.pngocean.pngoctocat.pngoctopus.pngoden.pngoffice.pngok.pngok_hand.pngok_woman.pngolder_man.pngolder_woman.pngon.pngoncoming_automobile.pngoncoming_bus.pngoncoming_police_car.pngoncoming_taxi.pngone.pngopen_file_folder.pngopen_hands.pngopen_mouth.pngophiuchus.pngorange_book.pngoutbox_tray.pngox.pngpackage.pngpage_facing_up.pngpage_with_curl.pngpager.pngpalm_tree.pngpanda_face.pngpaperclip.pngparking.pngpart_alternation_mark.pngpartly_sunny.pngpassport_control.pngpaw_prints.pngpeach.pngpear.pngpencil.pngpencil2.pngpenguin.pngpensive.pngperforming_arts.pngpersevere.pngperson_frowning.pngperson_with_blond_hair.pngperson_with_pouting_face.pngphone.pngpig.pngpig2.pngpig_nose.pngpill.pngpineapple.pngpisces.pngpizza.pngplus1.pngpoint_down.pngpoint_left.pngpoint_right.pngpoint_up.pngpoint_up_2.pngpolice_car.pngpoodle.pngpoop.pngpost_office.pngpostal_horn.pngpostbox.pngpotable_water.pngpouch.pngpoultry_leg.pngpound.pngpouting_cat.pngpray.pngprincess.pngpunch.pngpurple_heart.pngpurse.pngpushpin.pngput_litter_in_its_place.pngquestion.pngrabbit.pngrabbit2.pngracehorse.pngradio.pngradio_button.pngrage.pngrage1.pngrage2.pngrage3.pngrage4.pngrailway_car.pngrainbow.pngraised_hand.pngraised_hands.pngraising_hand.pngram.pngramen.pngrat.pngrecycle.pngred_car.pngred_circle.pngregistered.pngrelaxed.pngrelieved.pngrepeat.pngrepeat_one.pngrestroom.pngrevolving_hearts.pngrewind.pngribbon.pngrice.pngrice_ball.pngrice_cracker.pngrice_scene.pngring.pngrocket.pngroller_coaster.pngrooster.pngrose.pngrotating_light.pnground_pushpin.pngrowboat.pngru.pngrugby_football.pngrunner.pngrunning.pngrunning_shirt_with_sash.pngsa.pngsagittarius.pngsailboat.pngsake.pngsandal.pngsanta.pngsatellite.pngsatisfied.pngsaxophone.pngschool.pngschool_satchel.pngscissors.pngscorpius.pngscream.pngscream_cat.pngscroll.pngseat.pngsecret.pngsee_no_evil.pngseedling.pngseven.pngshaved_ice.pngsheep.pngshell.pngship.pngshipit.pngshirt.pngshit.pngshoe.pngshower.pngsignal_strength.pngsix.pngsix_pointed_star.pngski.pngskull.pngsleeping.pngsleepy.pngslot_machine.pngsmall_blue_diamond.pngsmall_orange_diamond.pngsmall_red_triangle.pngsmall_red_triangle_down.pngsmile.pngsmile_cat.pngsmiley.pngsmiley_cat.pngsmiling_imp.pngsmirk.pngsmirk_cat.pngsmoking.pngsnail.pngsnake.pngsnowboarder.pngsnowflake.pngsnowman.pngsob.pngsoccer.pngsoon.pngsos.pngsound.pngspace_invader.pngspades.pngspaghetti.pngsparkle.pngsparkler.pngsparkles.pngsparkling_heart.pngspeak_no_evil.pngspeaker.pngspeech_balloon.pngspeedboat.pngsquirrel.pngstar.pngstar2.pngstars.pngstation.pngstatue_of_liberty.pngsteam_locomotive.pngstew.pngstraight_ruler.pngstrawberry.pngstuck_out_tongue.pngstuck_out_tongue_closed_eyes.pngstuck_out_tongue_winking_eye.pngsun_with_face.pngsunflower.pngsunglasses.pngsunny.pngsunrise.pngsunrise_over_mountains.pngsurfer.pngsushi.pngsuspect.pngsuspension_railway.pngsweat.pngsweat_drops.pngsweat_smile.pngsweet_potato.pngswimmer.pngsymbols.pngsyringe.pngtada.pngtanabata_tree.pngtangerine.pngtaurus.pngtaxi.pngtea.pngtelephone.pngtelephone_receiver.pngtelescope.pngtennis.pngtent.pngthought_balloon.pngthree.pngthumbsdown.pngthumbsup.pngticket.pngtiger.pngtiger2.pngtired_face.pngtm.pngtoilet.pngtokyo_tower.pngtomato.pngtongue.pngtop.pngtophat.pngtractor.pngtraffic_light.pngtrain.pngtrain2.pngtram.pngtriangular_flag_on_post.pngtriangular_ruler.pngtrident.pngtriumph.pngtrolleybus.pngtrollface.pngtrophy.pngtropical_drink.pngtropical_fish.pngtruck.pngtrumpet.pngtshirt.pngtulip.pngturtle.pngtv.pngtwisted_rightwards_arrows.pngtwo.pngtwo_hearts.pngtwo_men_holding_hands.pngtwo_women_holding_hands.pngu5272.pngu5408.pngu55b6.pngu6307.pngu6708.pngu6709.pngu6e80.pngu7121.pngu7533.pngu7981.pngu7a7a.pnguk.pngumbrella.pngunamused.pngunderage.pngunlock.pngup.pngus.pngv.pngvertical_traffic_light.pngvhs.pngvibration_mode.pngvideo_camera.pngvideo_game.pngviolin.pngvirgo.pngvolcano.pngvs.pngwalking.pngwaning_crescent_moon.pngwaning_gibbous_moon.pngwarning.pngwatch.pngwater_buffalo.pngwatermelon.pngwave.pngwavy_dash.pngwaxing_crescent_moon.pngwaxing_gibbous_moon.pngwc.pngweary.pngwedding.pngwhale.pngwhale2.pngwheelchair.pngwhite_check_mark.pngwhite_circle.pngwhite_flower.pngwhite_large_square.pngwhite_medium_small_square.pngwhite_medium_square.pngwhite_small_square.pngwhite_square_button.pngwind_chime.pngwine_glass.pngwink.pngwolf.pngwoman.pngwomans_clothes.pngwomans_hat.pngwomens.pngworried.pngwrench.pngx.pngyellow_heart.pngyen.pngyum.pngzap.pngzero.pngzzz.png
fomantic
LICENSE.mdsemantic.csssemantic.jssemantic.min.csssemantic.min.js
themes
basic/assets/fonts
default/assets
fonts
brand-icons.eotbrand-icons.svgbrand-icons.ttfbrand-icons.woffbrand-icons.woff2icons.eoticons.svgicons.ttficons.wofficons.woff2outline-icons.eotoutline-icons.svgoutline-icons.ttfoutline-icons.woffoutline-icons.woff2
images
github/assets/fonts
material/assets/fonts
highlight
jquery-migrate
jquery.areyousure
jquery.datetimepicker
jquery
moment
promise-polyfill
vue-calendar-heatmap
vue
routers
admin
api/v1
admin
api.gomisc
notify
org
repo
branch.gocollaborators.gocommits.gofile.gofork.gohook.goissue.goissue_comment.goissue_label.goissue_reaction.goissue_stopwatch.goissue_subscription.goissue_tracked_time.gokey.golabel.gomigrate.gomilestone.gomirror.gopull.gopull_review.gorelease.gorepo.gostar.gostatus.gosubscriber.gotag.gotopic.gotransfer.go
swagger
user
utils
events
home.goinit.goinstall.goorg
private
repo
activity.goattachment.goblame.gobranch.gocommit.gocompare.goeditor.gohttp.goissue.goissue_label.gomiddlewares.gomilestone.gopull.gopull_review.gorelease.gorepo.gosearch.gosetting.gosetting_protected_branch.goview.gowebhook.gowiki.go
routes
swagger_json.gouser
scripts
semantic.jsonservices
gitdiff
issue
mailer
mirror
pull
release
repository
wiki
snap
templates
admin
auth
config.tmpldashboard.tmplemails
hook_new.tmplmonitor.tmplnav.tmplnavbar.tmplnotice.tmplorg
queue.tmplrepo
user
base
explore
home.tmplinstall.tmplmail/issue
org
pwa
repo
activity.tmplblame.tmpl
branch
branch_dropdown.tmplcommit_page.tmplcommits.tmplcommits_list.tmplcommits_table.tmplcreate.tmpldiff
blob_excerpt.tmplbox.tmplcomment_form.tmplcomments.tmplcompare.tmplnew_review.tmploptions_dropdown.tmplsection_unified.tmpl
editor
empty.tmplgraph.tmplheader.tmplhome.tmplissue
branch_selector_field.tmplcomment_tab.tmpllabels.tmpl
labels
list.tmplmilestone_issues.tmplmilestones.tmplnew_form.tmplsearch.tmplview.tmplview_content.tmplview_content
view_title.tmplpulls
release
search.tmplsettings
collaboration.tmpldeploy_keys.tmplgithooks.tmpllfs.tmpllfs_file.tmpllfs_file_find.tmpllfs_locks.tmploptions.tmplprotected_branch.tmpl
sub_menu.tmpluser_cards.tmplview_file.tmplview_list.tmplwebhook
wiki
status
swagger
user
vendor
gitea.com
jolheiser/gitea-vet
lunny/levelqueue
macaron
cors
gzip
session
github.com
RoaringBitmap/roaring
.travis.ymlREADME.mdarraycontainer.gobitmapcontainer.goroaring.goroaringarray.goruncontainer.gosetutil.goutil.go
aymerick/douceur
blevesearch
bleve
.travis.yml
analysis
geo
go.modindex
scorch
introducer.gomerge.gooptimize.gopersister.goscorch.go
segment
segment_plugin.gosnapshot_rollback.gostats.gostore/boltdb
upsidedown
search
collector
highlight/fragmenter/simple
searcher
go-porterstemmer
mmap-go
segment
snowballstem
zap
boombuler/barcode
chris-ramon/douceur
couchbase/vellum
denisenkom/go-mssqldb
dustin/go-humanize
.travis.ymlLICENSEREADME.markdownbig.gobigbytes.gobytes.gocomma.gocommaf.goftoa.gohumanize.gonumber.goordinals.gosi.gotimes.go
edsrzf/mmap-go
etcd-io/bbolt
.gitignore.travis.ymlLICENSEMakefileREADME.mdbolt_386.gobolt_amd64.gobolt_arm.gobolt_arm64.gobolt_linux.gobolt_mips64x.gobolt_mipsx.gobolt_openbsd.gobolt_ppc.gobolt_ppc64.gobolt_ppc64le.gobolt_riscv64.gobolt_s390x.gobolt_unix.gobolt_unix_solaris.gobolt_windows.goboltsync_unix.gobucket.gocursor.godb.godoc.goerrors.gofreelist.gofreelist_hmap.gonode.gopage.gotx.go
fatih
go-enry
go-enry/v2
.gitignore.travis.ymlLICENSEMakefileREADME.mdclassifier.gocommon.go
data
alias.gocolors.gocommit.gocontent.godoc.godocumentation.goextension.gofilename.gofrequencies.gogenerated.gogroups.goheuristics.gointerpreter.gomimeType.go
enry.gogo.modgo.sumrule
test.gotype.govendor.gointernal/tokenizer
regex
utils.gogo-oniguruma
go-git/go-git/v5
COMPATIBILITY.mdREADME.mdhash.goremote.gorepository.go
config
go.modgo.sumoptions.goplumbing
color
format
commitgraph
diff
packfile
object
protocol/packp
transport
storage/filesystem
submodule.goutils/merkletrie
golang/protobuf/proto
buffer.goclone.godecode.godefaults.godeprecated.godiscard.goencode.goequal.goextensions.golib.gomessage_set.gopointer_reflect.gopointer_unsafe.goproperties.goproto.goregistry.gotable_marshal.gotable_merge.gotable_unmarshal.gotext.gotext_decode.gotext_encode.gotext_parser.gowire.gowrappers.go
google
go-github
v24
AUTHORSLICENSE
github
activity.goactivity_events.goactivity_notifications.goactivity_star.goactivity_watching.goadmin.goadmin_stats.goapps.goapps_installation.goapps_marketplace.goauthorizations.gochecks.godoc.goevent.goevent_types.gogists.gogists_comments.gogit.gogit_blobs.gogit_commits.gogit_refs.gogit_tags.gogit_trees.gogithub-accessors.gogithub.gogitignore.gointeractions.gointeractions_orgs.gointeractions_repos.goissues.goissues_assignees.goissues_comments.goissues_events.goissues_labels.goissues_milestones.goissues_timeline.golicenses.gomessages.gomigrations.gomigrations_source_import.gomigrations_user.gomisc.goorgs.goorgs_hooks.goorgs_members.goorgs_outside_collaborators.goorgs_projects.goorgs_users_blocking.goprojects.gopulls.gopulls_comments.gopulls_reviewers.gopulls_reviews.goreactions.gorepos.gorepos_collaborators.gorepos_comments.gorepos_commits.gorepos_community_health.gorepos_contents.gorepos_deployments.gorepos_forks.gorepos_hooks.gorepos_invitations.gorepos_keys.gorepos_merging.gorepos_pages.gorepos_prereceive_hooks.gorepos_projects.gorepos_releases.gorepos_stats.gorepos_statuses.gorepos_traffic.gosearch.gostrings.goteams.goteams_discussion_comments.goteams_discussions.goteams_members.gotimestamp.gousers.gousers_administration.gousers_blocking.gousers_emails.gousers_followers.gousers_gpg_keys.gousers_keys.gowith_appengine.gowithout_appengine.go
v32
AUTHORS
github
actions.goactions_artifacts.goactions_runners.goactions_secrets.goactions_workflow_jobs.goactions_workflow_runs.goactions_workflows.goadmin_orgs.goadmin_users.goapps.goapps_installation.goapps_manifest.goauthorizations.gocode-scanning.godoc.goevent.gogit_commits.gogit_refs.gogit_trees.goissues.goissues_events.goorgs.gopackages.goprojects.gopulls_reviews.goreactions.gorepos.gorepos_collaborators.gorepos_commits.gorepos_deployments.gorepos_pages.gosearch.goteams.goteams_discussion_comments.goteams_discussions.goteams_members.gousers.gousers_projects.go
uuid
gorilla/css
hashicorp
go-cleanhttp
go-retryablehttp
huandu/xstrings
.gitignore.travis.ymlCONTRIBUTING.mdLICENSEREADME.mdcommon.goconvert.gocount.godoc.goformat.gogo.modmanipulate.gotranslate.go
imdario/mergo
issue9/identicon
keybase/go-crypto
cast5
curve25519
const_amd64.hconst_amd64.scswap_amd64.scurve25519.gocurve_impl.godoc.gofreeze_amd64.sladderstep_amd64.smul_amd64.ssquare_amd64.s
ed25519
openpgp
klauspost/compress
flate
deflate.gofast_encoder.gogen_inflate.gohuffman_bit_writer.gohuffman_code.gohuffman_sortByFreq.gohuffman_sortByLiteral.goinflate.goinflate_gen.golevel1.golevel2.golevel3.golevel4.golevel5.golevel6.gostateless.gotoken.go
gzip
mailru/easyjson
markbates/goth/providers
mattn
go-colorable
.travis.ymlLICENSEREADME.mdcolorable_appengine.gocolorable_others.gocolorable_windows.gogo.modgo.sumnoncolorable.go
go-isatty
go-runewidth
mgechev
dots
revive
LICENSE
formatter
lint
rule
add-constant.goargument-limit.goatomic.gobare-return.goblank-imports.gobool-literal-in-expr.gocall-to-gc.gocognitive-complexity.goconfusing-naming.goconfusing-results.goconstant-logical-expr.gocontext-as-argument.gocontext-keys-type.gocyclomatic.godeep-exit.godot-imports.goduplicated-imports.goempty-block.goempty-lines.goerror-naming.goerror-return.goerror-strings.goerrorf.goexported.gofile-header.goflag-param.gofunction-result-limit.goget-return.goif-return.goimport-shadowing.goimports-blacklist.goincrement-decrement.goindent-error-flow.goline-length-limit.gomax-public-structs.gomodifies-param.gomodifies-value-receiver.gopackage-comments.gorange-val-address.gorange-val-in-closure.gorange.goreceiver-naming.goredefines-builtin-id.gostring-of-int.gostruct-tag.gosuperfluous-else.gotime-naming.gounexported-return.gounhandled-error.gounnecessary-stmt.gounreachable-code.gounused-param.gounused-receiver.goutils.govar-declarations.govar-naming.gowaitgroup-by-value.go
microcosm-cc/bluemonday
.gitignore.travis.ymlCONTRIBUTING.mdCREDITS.mdLICENCE.mdREADME.mddoc.gogo.modgo.sumhandlers.gohelpers.gopolicy.gosanitize.go
mschoch/smat
niklasfasching/go-org/org
olekukonko/tablewriter
olivere/elastic/v7
.fossa.yml.gitignore.travis.ymlCHANGELOG-3.0.mdCHANGELOG-5.0.mdCHANGELOG-6.0.mdCHANGELOG-7.0.mdCODE_OF_CONDUCT.mdCONTRIBUTING.mdCONTRIBUTORSISSUE_TEMPLATE.mdLICENSEREADME.mdacknowledged_response.gobackoff.gobulk.gobulk_delete_request.gobulk_delete_request_easyjson.gobulk_index_request.gobulk_index_request_easyjson.gobulk_processor.gobulk_request.gobulk_update_request.gobulk_update_request_easyjson.gocanonicalize.gocat_aliases.gocat_allocation.gocat_count.gocat_health.gocat_indices.goclear_scroll.goclient.gocluster_health.gocluster_reroute.gocluster_state.gocluster_stats.go
config
connection.gocount.godecoder.godelete.godelete_by_query.godoc.godocker-compose.ymldocvalue_field.goerrors.goexists.goexplain.gofetch_source_context.gofield_caps.gogeo_point.goget.gogo.modhighlight.goindex.goindices_analyze.goindices_close.goindices_create.goindices_delete.goindices_delete_template.goindices_exists.goindices_exists_template.goindices_flush.goindices_flush_synced.goindices_forcemerge.goindices_freeze.goindices_get.goindices_get_aliases.goindices_get_field_mapping.goindices_get_mapping.goindices_get_settings.goindices_get_template.goindices_open.goindices_put_alias.goindices_put_mapping.goindices_put_settings.goindices_put_template.goindices_refresh.goindices_rollover.goindices_segments.goindices_shrink.goindices_stats.goindices_unfreeze.goingest_delete_pipeline.goingest_get_pipeline.goingest_put_pipeline.goingest_simulate_pipeline.goinner_hit.gologger.gomget.gomsearch.gomtermvectors.gonodes_info.gonodes_stats.goping.goplugins.goquery.goreindex.gorequest.gorescore.gorescorer.goresponse.goretrier.goretry.gorun-es.shrun-tests.shscript.goscript_delete.goscript_get.goscript_put.goscroll.gosearch.gosearch_aggs.gosearch_aggs_bucket_adjacency_matrix.gosearch_aggs_bucket_auto_date_histogram.gosearch_aggs_bucket_children.gosearch_aggs_bucket_composite.gosearch_aggs_bucket_count_thresholds.gosearch_aggs_bucket_date_histogram.gosearch_aggs_bucket_date_range.gosearch_aggs_bucket_diversified_sampler.gosearch_aggs_bucket_filter.gosearch_aggs_bucket_filters.gosearch_aggs_bucket_geo_distance.gosearch_aggs_bucket_geohash_grid.gosearch_aggs_bucket_global.gosearch_aggs_bucket_histogram.gosearch_aggs_bucket_ip_range.gosearch_aggs_bucket_missing.gosearch_aggs_bucket_nested.gosearch_aggs_bucket_range.gosearch_aggs_bucket_reverse_nested.gosearch_aggs_bucket_sampler.gosearch_aggs_bucket_significant_terms.gosearch_aggs_bucket_significant_text.gosearch_aggs_bucket_terms.gosearch_aggs_matrix_stats.gosearch_aggs_metrics_avg.gosearch_aggs_metrics_cardinality.gosearch_aggs_metrics_extended_stats.gosearch_aggs_metrics_geo_bounds.gosearch_aggs_metrics_geo_centroid.gosearch_aggs_metrics_max.gosearch_aggs_metrics_min.gosearch_aggs_metrics_percentile_ranks.gosearch_aggs_metrics_percentiles.gosearch_aggs_metrics_scripted_metric.gosearch_aggs_metrics_stats.gosearch_aggs_metrics_sum.gosearch_aggs_metrics_top_hits.gosearch_aggs_metrics_value_count.gosearch_aggs_metrics_weighted_avg.gosearch_aggs_pipeline_avg_bucket.gosearch_aggs_pipeline_bucket_script.gosearch_aggs_pipeline_bucket_selector.gosearch_aggs_pipeline_bucket_sort.gosearch_aggs_pipeline_cumulative_sum.gosearch_aggs_pipeline_derivative.gosearch_aggs_pipeline_extended_stats_bucket.gosearch_aggs_pipeline_max_bucket.gosearch_aggs_pipeline_min_bucket.gosearch_aggs_pipeline_mov_avg.gosearch_aggs_pipeline_mov_fn.gosearch_aggs_pipeline_percentiles_bucket.gosearch_aggs_pipeline_serial_diff.gosearch_aggs_pipeline_stats_bucket.gosearch_aggs_pipeline_sum_bucket.gosearch_collapse_builder.gosearch_queries_bool.gosearch_queries_boosting.gosearch_queries_common_terms.gosearch_queries_constant_score.gosearch_queries_dis_max.gosearch_queries_distance_feature_query.gosearch_queries_exists.gosearch_queries_fsq.gosearch_queries_fsq_score_funcs.gosearch_queries_fuzzy.gosearch_queries_geo_bounding_box.gosearch_queries_geo_distance.gosearch_queries_geo_polygon.gosearch_queries_has_child.gosearch_queries_has_parent.gosearch_queries_ids.gosearch_queries_match.gosearch_queries_match_all.gosearch_queries_match_none.gosearch_queries_match_phrase.gosearch_queries_match_phrase_prefix.gosearch_queries_more_like_this.gosearch_queries_multi_match.gosearch_queries_nested.gosearch_queries_parent_id.gosearch_queries_percolator.gosearch_queries_prefix.gosearch_queries_query_string.gosearch_queries_range.gosearch_queries_raw_string.gosearch_queries_regexp.gosearch_queries_script.gosearch_queries_script_score.gosearch_queries_simple_query_string.gosearch_queries_slice.gosearch_queries_term.gosearch_queries_terms.gosearch_queries_terms_set.gosearch_queries_type.gosearch_queries_wildcard.gosearch_queries_wrapper.gosearch_request.gosearch_shards.gosearch_source.gosearch_terms_lookup.gosnapshot_create.gosnapshot_create_repository.gosnapshot_delete.gosnapshot_delete_repository.gosnapshot_get.gosnapshot_get_repository.gosnapshot_restore.gosnapshot_verify_repository.gosort.gosuggest_field.gosuggester.gosuggester_completion.gosuggester_context.gosuggester_context_category.gosuggester_context_geo.gosuggester_phrase.gosuggester_term.gotasks_cancel.gotasks_get_task.gotasks_list.gotermvectors.goupdate.goupdate_by_query.gouritemplates
validate.goxpack_ilm_delete_lifecycle.goxpack_ilm_get_lifecycle.goxpack_ilm_put_lifecycle.goxpack_info.goxpack_security_change_password.goxpack_security_delete_role.goxpack_security_delete_role_mapping.goxpack_security_delete_user.goxpack_security_disable_user.goxpack_security_enable_user.goxpack_security_get_role.goxpack_security_get_role_mapping.goxpack_security_get_user.goxpack_security_put_role.goxpack_security_put_role_mapping.goxpack_security_put_user.goxpack_watcher_ack_watch.goxpack_watcher_activate_watch.goxpack_watcher_deactivate_watch.goxpack_watcher_delete_watch.goxpack_watcher_execute_watch.goxpack_watcher_get_watch.goxpack_watcher_put_watch.goxpack_watcher_start.goxpack_watcher_stats.goxpack_watcher_stop.gopkg/errors
pquerna/otp
satori/go.uuid
steveyen/gtreap
tinylib/msgp/msgp
xanzy/go-gitlab
.gitignore.travis.ymlCHANGELOG.mdLICENSEREADME.mdaccess_requests.goapplications.goaward_emojis.goboards.gobranches.gobroadcast_messages.goci_yml_templates.goclient_options.gocommits.gocustom_attributes.godeploy_keys.godeploy_tokens.godeployments.godiscussions.goenvironments.goepics.goevent_parsing.goevent_systemhook_types.goevent_webhook_types.goevents.gofeature_flags.gogitignore_templates.gogitlab.gogo.modgo.sumgroup_badges.gogroup_boards.gogroup_clusters.gogroup_hooks.gogroup_labels.gogroup_members.gogroup_milestones.gogroup_variables.gogroups.goissue_links.goissues.gojobs.gokeys.golabels.golicense.golicense_templates.gomerge_request_approvals.gomerge_requests.gomilestones.gonamespaces.gonotes.gonotifications.gopages_domains.gopipeline_schedules.gopipeline_triggers.gopipelines.goproject_badges.goproject_clusters.goproject_import_export.goproject_members.goproject_snippets.goproject_variables.goprojects.goprotected_branches.goprotected_tags.goregistry.goreleaselinks.goreleases.gorepositories.gorepository_files.gorequest_options.goresource_label_events.gorunners.gosearch.goservices.gosettings.gosidekiq_metrics.gosnippets.gostrings.gosystem_hooks.gotags.gotime_stats.gotodos.gousers.govalidate.goversion.gowikis.go
yohcop/openid-go
yuin
goldmark-meta
goldmark
go.etcd.io/bbolt
.travis.ymlREADME.mdbolt_386.gobolt_amd64.gobolt_arm.gobolt_mipsx.gobolt_ppc.gobolt_unix_aix.godb.gogo.modgo.sumnode.gopage.gotx.go
golang.org/x
crypto
blake2b
chacha20
poly1305
mac_noasm.gopoly1305.gosum_amd64.gosum_generic.gosum_noasm.gosum_ppc64le.gosum_s390x.gosum_s390x.ssum_vmsl_s390x.s
ssh
mod
oauth2
sys
cpu
internal/unsafeheader
unix
README.mderrors_freebsd_386.goerrors_freebsd_amd64.goerrors_freebsd_arm64.gomkall.shmkerrors.shsyscall_darwin.1_13.gosyscall_darwin.gosyscall_darwin_386.gosyscall_darwin_amd64.gosyscall_darwin_arm.gosyscall_darwin_arm64.gosyscall_freebsd.gosyscall_freebsd_386.gosyscall_freebsd_amd64.gosyscall_illumos.gosyscall_linux.gosyscall_linux_386.gosyscall_linux_amd64.gosyscall_linux_arm.gosyscall_linux_arm64.gosyscall_linux_mips64x.gosyscall_linux_mipsx.gosyscall_linux_ppc64x.gosyscall_linux_riscv64.gosyscall_linux_s390x.gosyscall_linux_sparc64.gosyscall_unix.gozerrors_freebsd_386.gozerrors_freebsd_amd64.gozerrors_freebsd_arm.gozerrors_freebsd_arm64.gozerrors_linux.gozerrors_linux_386.gozerrors_linux_amd64.gozerrors_linux_arm.gozerrors_linux_arm64.gozerrors_linux_mips.gozerrors_linux_mips64.gozerrors_linux_mips64le.gozerrors_linux_mipsle.gozerrors_linux_ppc64.gozerrors_linux_ppc64le.gozerrors_linux_riscv64.gozerrors_linux_s390x.gozerrors_linux_sparc64.gozsyscall_darwin_386.1_11.gozsyscall_darwin_386.gozsyscall_darwin_amd64.1_11.gozsyscall_darwin_amd64.gozsyscall_darwin_arm.1_11.gozsyscall_darwin_arm.gozsyscall_darwin_arm64.1_11.gozsyscall_darwin_arm64.gozsyscall_freebsd_386.gozsyscall_freebsd_amd64.gozsyscall_freebsd_arm64.gozsyscall_illumos_amd64.gozsyscall_linux.gozsyscall_linux_386.gozsyscall_linux_amd64.gozsyscall_linux_arm.gozsyscall_linux_arm64.gozsyscall_linux_mips.gozsyscall_linux_mips64.gozsyscall_linux_mips64le.gozsyscall_linux_mipsle.gozsyscall_linux_ppc64.gozsyscall_linux_ppc64le.gozsyscall_linux_s390x.gozsyscall_linux_sparc64.gozsysctl_openbsd_386.gozsysctl_openbsd_amd64.gozsysctl_openbsd_arm.gozsysnum_linux_386.gozsysnum_linux_amd64.gozsysnum_linux_arm.gozsysnum_linux_arm64.gozsysnum_linux_mips.gozsysnum_linux_mips64.gozsysnum_linux_mips64le.gozsysnum_linux_mipsle.gozsysnum_linux_ppc64.gozsysnum_linux_ppc64le.gozsysnum_linux_riscv64.gozsysnum_linux_s390x.gozsysnum_linux_sparc64.goztypes_freebsd_386.goztypes_freebsd_amd64.goztypes_freebsd_arm64.goztypes_linux.goztypes_linux_386.goztypes_linux_amd64.goztypes_linux_arm.goztypes_linux_arm64.goztypes_linux_mips.goztypes_linux_mips64.goztypes_linux_mips64le.goztypes_linux_mipsle.goztypes_linux_ppc64.goztypes_linux_ppc64le.goztypes_linux_riscv64.goztypes_linux_s390x.goztypes_linux_sparc64.go
windows
time
tools
cover
go
analysis
ast/astutil
internal
packages
types/objectpath
imports
internal
fastwalk
gocommand
gopathwalk
imports
module
packagesinternal
semver
xerrors
google.golang.org
appengine
protobuf
AUTHORSCONTRIBUTORSLICENSEPATENTS
encoding
internal
descfmt
descopts
detrand
encoding
defval
messageset
tag
text
errors
fieldnum
any_gen.goapi_gen.godescriptor_gen.godoc.goduration_gen.goempty_gen.gofield_mask_gen.gosource_context_gen.gostruct_gen.gotimestamp_gen.gotype_gen.gowrappers_gen.go
fieldsort
filedesc
filetype
flags
genname
impl
api_export.gocheckinit.gocodec_extension.gocodec_field.gocodec_gen.gocodec_map.gocodec_map_go111.gocodec_map_go112.gocodec_message.gocodec_messageset.gocodec_reflect.gocodec_tables.gocodec_unsafe.goconvert.goconvert_list.goconvert_map.godecode.goencode.goenum.goextension.golegacy_enum.golegacy_export.golegacy_extension.golegacy_file.golegacy_message.gomerge.gomerge_gen.gomessage.gomessage_reflect.gomessage_reflect_field.gomessage_reflect_gen.gopointer_reflect.gopointer_unsafe.govalidate.goweak.go
mapsort
pragma
set
strs
version
proto
checkinit.godecode.godecode_gen.godoc.goencode.goencode_gen.goequal.goextension.gomerge.gomessageset.goproto.goproto_methods.goproto_reflect.goreset.gosize.gosize_gen.gowrappers.go
reflect
protoreflect
protoregistry
runtime
gopkg.in
modules.txtxorm.io
builder
.drone.yml.gitignorebuilder.gobuilder_insert.gobuilder_limit.gobuilder_select.gobuilder_set_operations.gobuilder_union.gobuilder_update.gocond_eq.gogo.modgo.sumsql.go
core
.drone.yml.gitignoreLICENSEREADME.mdbenchmark.shcache.gocolumn.goconverstion.godb.godialect.godriver.goerror.gofilter.gogo.modgo.sumilogger.goindex.gomapper.gopk.gorows.goscan.gostmt.gotable.gotx.gotype.go
xorm
.changelog.yml.drone.yml.gitignore.revive.tomlCHANGELOG.mdCONTRIBUTING.mdMakefileREADME.mdREADME_CN.mdcache_lru.gocache_memory_store.gojson.go
caches
context_cache.goconvert.goconvert
core
dialect_mssql.godialect_mysql.godialect_oracle.godialect_postgres.godialect_sqlite3.godialects
dialect.godriver.gofilter.gomssql.gomysql.gooracle.gopostgres.goquote.gosqlite3.gotable_name.gotime.go
doc.goengine.goengine_cond.goengine_context.goengine_group.goengine_table.goerror.gogen_reserved.shgo.modgo.sumhelpers.gohelpler_time.gointerface.gointernal
json
statements
utils
log
logger.gonames
pg_reserved.txtrows.goschemas
session.gosession_cols.gosession_cond.gosession_context.gosession_convert.gosession_delete.gosession_exist.gosession_find.gosession_get.gosession_insert.gosession_iterate.gosession_query.gosession_raw.gosession_schema.gosession_stats.gosession_tx.gosession_update.gostatement.gostatement_args.gostatement_columnmap.gostatement_exprparam.gostatement_quote.gosyslogger.gotag.gotags
test_mssql.shtest_mssql_cache.shtest_mymysql.shtest_mymysql_cache.shtest_mysql.shtest_mysql_cache.shtest_postgres.shtest_postgres_cache.shtest_sqlite.shtest_sqlite_cache.shtest_tidb.shtransaction.gotypes.goxorm.goweb_src
css
fomantic
js
components
features
clipboard.jscodeeditor.jscontextpopup.jsdatetimepicker.jsdropzone.jsemoji.jseventsource.sharedworker.jsgitgraph.jshighlight.jshighlight.worker.jsnotification.jsserviceworker.jstribute.jsuserheatmap.js
gitGraph.jsgitGraphLoader.jsindex.jsjquery.jspolyfills.jspublicPath.jspublicpath.jssemanticDropdown.jsserviceworker.jsstandalone
utils.jsvendor
less
@ -15,7 +15,7 @@ groups:
|
||||
labels:
|
||||
- kind/breaking
|
||||
-
|
||||
name: FEATURES
|
||||
name: FEATURE
|
||||
labels:
|
||||
- kind/feature
|
||||
-
|
||||
@ -27,7 +27,7 @@ groups:
|
||||
labels:
|
||||
- kind/bug
|
||||
-
|
||||
name: ENHANCEMENTS
|
||||
name: ENHANCEMENT
|
||||
labels:
|
||||
- kind/enhancement
|
||||
- kind/refactor
|
||||
|
164
.drone.yml
164
.drone.yml
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,4 @@
|
||||
# http://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
@ -6,18 +7,23 @@ insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
end_of_line = lf
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
[*.go]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
[*.{go,tmpl,html}]
|
||||
[*.{tmpl,html}]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
|
||||
[*.{less,css}]
|
||||
[*.less]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.{js,json,yml}]
|
||||
[*.{yml,json}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.js]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
|
1
.eslintignore
Normal file
1
.eslintignore
Normal file
@ -0,0 +1 @@
|
||||
/web_src/js/semanticDropdown.js
|
31
.eslintrc
31
.eslintrc
@ -4,9 +4,6 @@ extends:
|
||||
- eslint-config-airbnb-base
|
||||
- eslint:recommended
|
||||
|
||||
ignorePatterns:
|
||||
- /web_src/js/vendor
|
||||
|
||||
parserOptions:
|
||||
ecmaVersion: 2020
|
||||
|
||||
@ -18,57 +15,39 @@ env:
|
||||
|
||||
globals:
|
||||
__webpack_public_path__: true
|
||||
Clipboard: false
|
||||
CodeMirror: false
|
||||
Dropzone: false
|
||||
emojify: false
|
||||
hljs: false
|
||||
SimpleMDE: false
|
||||
u2fApi: false
|
||||
Tribute: false
|
||||
|
||||
overrides:
|
||||
- files: ["web_src/**/*worker.js"]
|
||||
env:
|
||||
worker: true
|
||||
rules:
|
||||
no-restricted-globals: [0]
|
||||
Vue: false
|
||||
|
||||
rules:
|
||||
arrow-body-style: [0]
|
||||
arrow-parens: [2, always]
|
||||
camelcase: [0]
|
||||
comma-dangle: [2, only-multiline]
|
||||
consistent-return: [0]
|
||||
default-case: [0]
|
||||
func-names: [0]
|
||||
import/extensions: [2, always, {ignorePackages: true}]
|
||||
import/prefer-default-export: [0]
|
||||
import/extensions: [0]
|
||||
max-len: [0]
|
||||
multiline-comment-style: [2, separate-lines]
|
||||
newline-per-chained-call: [0]
|
||||
no-alert: [0]
|
||||
no-cond-assign: [2, except-parens]
|
||||
no-console: [1, {allow: [info, warn, error]}]
|
||||
no-continue: [0]
|
||||
no-empty: [2, {allowEmptyCatch: true}]
|
||||
no-eq-null: [2]
|
||||
no-mixed-operators: [0]
|
||||
no-multi-assign: [0]
|
||||
no-new: [0]
|
||||
no-param-reassign: [0]
|
||||
no-plusplus: [0]
|
||||
no-restricted-syntax: [0]
|
||||
no-return-await: [0]
|
||||
no-shadow: [0]
|
||||
no-underscore-dangle: [0]
|
||||
no-unused-vars: [2, {args: all, argsIgnorePattern: ^_, varsIgnorePattern: ^_, ignoreRestSiblings: true}]
|
||||
no-use-before-define: [0]
|
||||
no-var: [2]
|
||||
object-curly-newline: [0]
|
||||
object-curly-spacing: [2, never]
|
||||
one-var-declaration-per-line: [0]
|
||||
one-var: [0]
|
||||
operator-linebreak: [2, after]
|
||||
prefer-const: [2, {destructuring: all}]
|
||||
prefer-destructuring: [0]
|
||||
quotes: [2, single, {avoidEscape: true, allowTemplateLiterals: true}]
|
||||
radix: [2, as-needed]
|
||||
semi: [2, always, {omitLastInOneLineBlock: true}]
|
||||
|
5
.gitattributes
vendored
5
.gitattributes
vendored
@ -1,10 +1,7 @@
|
||||
* text=auto eol=lf
|
||||
/vendor/** -text -eol
|
||||
/public/vendor/** -text -eol
|
||||
|
||||
conf/* linguist-vendored
|
||||
docker/* linguist-vendored
|
||||
options/* linguist-vendored
|
||||
public/* linguist-vendored
|
||||
build/* linguist-vendored
|
||||
scripts/* linguist-vendored
|
||||
templates/* linguist-vendored
|
||||
|
9
.github/stale.yml
vendored
9
.github/stale.yml
vendored
@ -27,11 +27,9 @@ staleLabel: stale
|
||||
|
||||
# Comment to post when marking as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had recent activity.
|
||||
I am here to help clear issues left open even if solved or waiting for more insight.
|
||||
This issue will be closed if no further activity occurs during the next 2 weeks.
|
||||
If the issue is still valid just add a comment to keep it alive.
|
||||
Thank you for your contributions.
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs during the next 2 weeks. Thank you
|
||||
for your contributions.
|
||||
|
||||
# Comment to post when closing a stale Issue or Pull Request.
|
||||
closeComment: >
|
||||
@ -52,3 +50,4 @@ pulls:
|
||||
closeComment: >
|
||||
This pull request has been automatically closed because of inactivity.
|
||||
You can re-open it if needed.
|
||||
|
||||
|
17
.gitignore
vendored
17
.gitignore
vendored
@ -34,26 +34,19 @@ _testmain.go
|
||||
coverage.all
|
||||
|
||||
/modules/options/bindata.go
|
||||
/modules/options/bindata.go.hash
|
||||
/modules/public/bindata.go
|
||||
/modules/public/bindata.go.hash
|
||||
/modules/templates/bindata.go
|
||||
/modules/templates/bindata.go.hash
|
||||
|
||||
*.db
|
||||
*.log
|
||||
|
||||
/gitea
|
||||
/gitea-vet
|
||||
/debug
|
||||
/integrations.test
|
||||
|
||||
/bin
|
||||
/dist
|
||||
/custom/*
|
||||
!/custom/conf
|
||||
/custom/conf/*
|
||||
!/custom/conf/app.ini.sample
|
||||
/custom
|
||||
/data
|
||||
/indexers
|
||||
/log
|
||||
@ -68,7 +61,6 @@ coverage.all
|
||||
/integrations/indexers-pgsql
|
||||
/integrations/indexers-sqlite
|
||||
/integrations/indexers-mssql
|
||||
/integrations/sqlite.ini
|
||||
/integrations/mysql.ini
|
||||
/integrations/mysql8.ini
|
||||
/integrations/pgsql.ini
|
||||
@ -76,11 +68,7 @@ coverage.all
|
||||
/node_modules
|
||||
/yarn.lock
|
||||
/public/js
|
||||
/public/serviceworker.js
|
||||
/public/css
|
||||
/public/fonts
|
||||
/public/fomantic
|
||||
/public/img/svg
|
||||
/VERSION
|
||||
|
||||
# Snapcraft
|
||||
@ -92,6 +80,3 @@ prime/
|
||||
*.snap-build
|
||||
*_source.tar.bz2
|
||||
.DS_Store
|
||||
|
||||
# Make evidence files
|
||||
/.make_evidence
|
||||
|
@ -95,6 +95,3 @@ issues:
|
||||
- linters:
|
||||
- misspell
|
||||
text: '`Unknwon` is a misspelling of `Unknown`'
|
||||
- path: models/update.go
|
||||
linters:
|
||||
- unused
|
||||
|
3
.ignore
3
.ignore
@ -1,6 +1,5 @@
|
||||
/vendor
|
||||
/public/vendor/plugins
|
||||
/public/vendor/assets
|
||||
/public/vendor
|
||||
/modules/options/bindata.go
|
||||
/modules/public/bindata.go
|
||||
/modules/templates/bindata.go
|
||||
|
1
.npmrc
1
.npmrc
@ -1,2 +1 @@
|
||||
package-lock=true
|
||||
save-exact=true
|
||||
|
@ -1,16 +1,11 @@
|
||||
extends: stylelint-config-standard
|
||||
|
||||
ignoreFiles:
|
||||
- web_src/less/vendor/**/*
|
||||
|
||||
rules:
|
||||
at-rule-empty-line-before: null
|
||||
block-closing-brace-empty-line-before: null
|
||||
color-hex-length: null
|
||||
comment-empty-line-before: null
|
||||
declaration-empty-line-before: null
|
||||
indentation: 4
|
||||
no-descending-specificity: null
|
||||
number-leading-zero: never
|
||||
rule-empty-line-before: null
|
||||
selector-pseudo-element-colon-notation: null
|
||||
|
447
CHANGELOG.md
447
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@ -71,21 +71,23 @@ to make sure your changes don't cause regression elsewhere.
|
||||
|
||||
Here's how to run the test suite:
|
||||
|
||||
- code lint
|
||||
- Install the correct version of the drone-cli package. As of this
|
||||
writing, the correct drone-cli version is
|
||||
[1.2.0](https://docs.drone.io/cli/install/).
|
||||
- Ensure you have enough free disk space. You will need at least
|
||||
15-20 Gb of free disk space to hold all of the containers drone
|
||||
creates (a default AWS or GCE disk size won't work -- see
|
||||
[#6243](https://github.com/go-gitea/gitea/issues/6243)).
|
||||
- Change into the base directory of your copy of the gitea repository,
|
||||
and run `drone exec --event pull_request`.
|
||||
- At the moment `drone exec` doesn't support the Docker Toolbox on Windows 10
|
||||
(see [drone-cli#135](https://github.com/drone/drone-cli/issues/135))
|
||||
|
||||
| | |
|
||||
| :-------------------- | :---------------------------------------------------------------- |
|
||||
|``make lint`` | lint everything (not suggest if you only change one type code) |
|
||||
|``make lint-frontend`` | lint frontend files |
|
||||
|``make lint-backend`` | lint backend files |
|
||||
|
||||
- run test code (Suggest run in linux)
|
||||
|
||||
| | |
|
||||
| :------------------------------------- | :----------------------------------------------- |
|
||||
|``make test[\#TestSpecificName]`` | run unit test |
|
||||
|``make test-sqlite[\#TestSpecificName]``| run [integration](integrations) test for sqlite |
|
||||
|[More detail message about integrations](integrations/README.md) |
|
||||
The drone version, command line, and disk requirements do change over
|
||||
time (see [#4053](https://github.com/go-gitea/gitea/issues/4053) and
|
||||
[#6243](https://github.com/go-gitea/gitea/issues/6243)); if you
|
||||
discover any issues, please feel free to send us a pull request to
|
||||
update these instructions.
|
||||
|
||||
## Vendoring
|
||||
|
||||
@ -112,7 +114,15 @@ included in the next released version.
|
||||
|
||||
## Building Gitea
|
||||
|
||||
See the [hacking instructions](https://docs.gitea.io/en-us/hacking-on-gitea/).
|
||||
Generally, the go build tools are installed as-needed in the `Makefile`.
|
||||
An exception are the tools to build the CSS, JS and images.
|
||||
|
||||
- To build CSS and JS: Install [Node.js](https://nodejs.org/en/download/package-manager) at version 10.0 or above
|
||||
with `npm` and then run `npm install`, `make css` and `make js`.
|
||||
- To build Images: ImageMagick, inkscape and zopflipng binaries must be
|
||||
available in your `PATH` to run `make generate-images`.
|
||||
|
||||
For more details on how to generate files, build and test Gitea, see the [hacking instructions](https://docs.gitea.io/en-us/hacking-on-gitea/)
|
||||
|
||||
## Code review
|
||||
|
||||
@ -344,7 +354,7 @@ be reviewed by two maintainers and must pass the automatic tests.
|
||||
Code that you contribute should use the standard copyright header:
|
||||
|
||||
```
|
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2019 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
```
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
###################################
|
||||
#Build stage
|
||||
FROM golang:1.14-alpine3.11 AS build-env
|
||||
FROM golang:1.13-alpine3.11 AS build-env
|
||||
|
||||
ARG GOPROXY
|
||||
ENV GOPROXY ${GOPROXY:-direct}
|
||||
@ -9,7 +9,6 @@ ENV GOPROXY ${GOPROXY:-direct}
|
||||
ARG GITEA_VERSION
|
||||
ARG TAGS="sqlite sqlite_unlock_notify"
|
||||
ENV TAGS "bindata $TAGS"
|
||||
ARG CGO_EXTRA_CFLAGS
|
||||
|
||||
#Build deps
|
||||
RUN apk --no-cache add build-base git nodejs npm
|
||||
@ -20,7 +19,7 @@ WORKDIR ${GOPATH}/src/code.gitea.io/gitea
|
||||
|
||||
#Checkout version if set
|
||||
RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \
|
||||
&& make clean-all build
|
||||
&& make clean build
|
||||
|
||||
FROM alpine:3.11
|
||||
LABEL maintainer="maintainers@gitea.io"
|
||||
@ -38,8 +37,7 @@ RUN apk --no-cache add \
|
||||
s6 \
|
||||
sqlite \
|
||||
su-exec \
|
||||
tzdata \
|
||||
gnupg
|
||||
tzdata
|
||||
|
||||
RUN addgroup \
|
||||
-S -g 1000 \
|
||||
|
14
README.md
14
README.md
@ -3,7 +3,7 @@
|
||||
<h1> <img src="https://raw.githubusercontent.com/go-gitea/gitea/master/public/img/gitea-192.png" alt="logo" width="30" height="30"> Gitea - Git with a cup of tea</h1>
|
||||
|
||||
[](https://drone.gitea.io/go-gitea/gitea)
|
||||
[](https://discord.gg/Gitea)
|
||||
[](https://discord.gg/NsatcWJ)
|
||||
[](https://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com")
|
||||
[](https://codecov.io/gh/go-gitea/gitea)
|
||||
[](https://goreportcard.com/report/code.gitea.io/gitea)
|
||||
@ -33,18 +33,14 @@ From the root of the source tree, run:
|
||||
|
||||
TAGS="bindata" make build
|
||||
|
||||
or if sqlite support is required:
|
||||
|
||||
TAGS="bindata sqlite sqlite_unlock_notify" make build
|
||||
|
||||
The `build` target is split into two sub-targets:
|
||||
|
||||
- `make backend` which requires [Go 1.12](https://golang.org/dl/) or greater.
|
||||
- `make frontend` which requires [Node.js 10.13](https://nodejs.org/en/download/) or greater.
|
||||
- `make backend` which requires [Go 1.11](https://golang.org/dl/) or greater.
|
||||
- `make frontend` which requires [Node.js 10.0.0](https://nodejs.org/en/download/) or greater.
|
||||
|
||||
If pre-built frontend files are present it is possible to only build the backend:
|
||||
|
||||
TAGS="bindata" make backend
|
||||
TAGS="bindata" make backend
|
||||
|
||||
More info: https://docs.gitea.io/en-us/install-from-source/
|
||||
|
||||
@ -69,7 +65,7 @@ NOTES:
|
||||
For more information and instructions about how to install Gitea, please look
|
||||
at our [documentation](https://docs.gitea.io/en-us/). If you have questions
|
||||
that are not covered by the documentation, you can get in contact with us on
|
||||
our [Discord server](https://discord.gg/Gitea),
|
||||
our [Discord server](https://discord.gg/NsatcWJ),
|
||||
or [forum](https://discourse.gitea.io/)!
|
||||
|
||||
## Authors
|
||||
|
@ -3,7 +3,7 @@
|
||||
<h1> <img src="https://raw.githubusercontent.com/go-gitea/gitea/master/public/img/gitea-192.png" alt="logo" width="30" height="30"> Gitea - Git with a cup of tea</h1>
|
||||
|
||||
[](https://drone.gitea.io/go-gitea/gitea)
|
||||
[](https://discord.gg/Gitea)
|
||||
[](https://discord.gg/NsatcWJ)
|
||||
[](https://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com")
|
||||
[](https://codecov.io/gh/go-gitea/gitea)
|
||||
[](https://goreportcard.com/report/code.gitea.io/gitea)
|
||||
|
File diff suppressed because one or more lines are too long
32
build.go
32
build.go
@ -1,32 +0,0 @@
|
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//+build vendor
|
||||
|
||||
package main
|
||||
|
||||
// Libraries that are included to vendor utilities used during build.
|
||||
// These libraries will not be included in a normal compilation.
|
||||
|
||||
import (
|
||||
// for lint
|
||||
_ "github.com/BurntSushi/toml"
|
||||
_ "github.com/mgechev/dots"
|
||||
_ "github.com/mgechev/revive/formatter"
|
||||
_ "github.com/mgechev/revive/lint"
|
||||
_ "github.com/mgechev/revive/rule"
|
||||
_ "github.com/mitchellh/go-homedir"
|
||||
|
||||
// for embed
|
||||
_ "github.com/shurcooL/vfsgen"
|
||||
|
||||
// for cover merge
|
||||
_ "golang.org/x/tools/cover"
|
||||
|
||||
// for vet
|
||||
_ "gitea.com/jolheiser/gitea-vet"
|
||||
|
||||
// for swagger
|
||||
_ "github.com/go-swagger/go-swagger/cmd/swagger"
|
||||
)
|
@ -1,86 +0,0 @@
|
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/sha1"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
"github.com/shurcooL/vfsgen"
|
||||
)
|
||||
|
||||
func needsUpdate(dir string, filename string) (bool, []byte) {
|
||||
needRegen := false
|
||||
_, err := os.Stat(filename)
|
||||
if err != nil {
|
||||
needRegen = true
|
||||
}
|
||||
|
||||
oldHash, err := ioutil.ReadFile(filename + ".hash")
|
||||
if err != nil {
|
||||
oldHash = []byte{}
|
||||
}
|
||||
|
||||
hasher := sha1.New()
|
||||
|
||||
err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, _ = hasher.Write([]byte(info.Name()))
|
||||
_, _ = hasher.Write([]byte(info.ModTime().String()))
|
||||
_, _ = hasher.Write([]byte(strconv.FormatInt(info.Size(), 16)))
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return true, oldHash
|
||||
}
|
||||
|
||||
newHash := hasher.Sum([]byte{})
|
||||
|
||||
if bytes.Compare(oldHash, newHash) != 0 {
|
||||
|
||||
return true, newHash
|
||||
}
|
||||
|
||||
return needRegen, newHash
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 4 {
|
||||
log.Fatal("Insufficient number of arguments. Need: directory packageName filename")
|
||||
}
|
||||
|
||||
dir, packageName, filename := os.Args[1], os.Args[2], os.Args[3]
|
||||
|
||||
update, newHash := needsUpdate(dir, filename)
|
||||
|
||||
if !update {
|
||||
fmt.Printf("bindata for %s already up-to-date\n", packageName)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("generating bindata for %s\n", packageName)
|
||||
var fsTemplates http.FileSystem = http.Dir(dir)
|
||||
err := vfsgen.Generate(fsTemplates, vfsgen.Options{
|
||||
PackageName: packageName,
|
||||
BuildTags: "bindata",
|
||||
VariableName: "Assets",
|
||||
Filename: filename,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("%v\n", err)
|
||||
}
|
||||
_ = ioutil.WriteFile(filename+".hash", newHash, 0666)
|
||||
}
|
@ -1,221 +0,0 @@
|
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2015 Kenneth Shaw
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
const (
|
||||
gemojiURL = "https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json"
|
||||
maxUnicodeVersion = 12
|
||||
)
|
||||
|
||||
var (
|
||||
flagOut = flag.String("o", "modules/emoji/emoji_data.go", "out")
|
||||
)
|
||||
|
||||
// Gemoji is a set of emoji data.
|
||||
type Gemoji []Emoji
|
||||
|
||||
// Emoji represents a single emoji and associated data.
|
||||
type Emoji struct {
|
||||
Emoji string `json:"emoji"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Aliases []string `json:"aliases"`
|
||||
UnicodeVersion string `json:"unicode_version,omitempty"`
|
||||
SkinTones bool `json:"skin_tones,omitempty"`
|
||||
}
|
||||
|
||||
// Don't include some fields in JSON
|
||||
func (e Emoji) MarshalJSON() ([]byte, error) {
|
||||
type emoji Emoji
|
||||
x := emoji(e)
|
||||
x.UnicodeVersion = ""
|
||||
x.Description = ""
|
||||
x.SkinTones = false
|
||||
return json.Marshal(x)
|
||||
}
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
flag.Parse()
|
||||
|
||||
// generate data
|
||||
buf, err := generate()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// write
|
||||
err = ioutil.WriteFile(*flagOut, buf, 0644)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
var replacer = strings.NewReplacer(
|
||||
"main.Gemoji", "Gemoji",
|
||||
"main.Emoji", "\n",
|
||||
"}}", "},\n}",
|
||||
", Description:", ", ",
|
||||
", Aliases:", ", ",
|
||||
", UnicodeVersion:", ", ",
|
||||
", SkinTones:", ", ",
|
||||
)
|
||||
|
||||
var emojiRE = regexp.MustCompile(`\{Emoji:"([^"]*)"`)
|
||||
|
||||
func generate() ([]byte, error) {
|
||||
var err error
|
||||
|
||||
// load gemoji data
|
||||
res, err := http.Get(gemojiURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
|
||||
// read all
|
||||
body, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// unmarshal
|
||||
var data Gemoji
|
||||
err = json.Unmarshal(body, &data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var skinTones = make(map[string]string)
|
||||
|
||||
skinTones["\U0001f3fb"] = "Light Skin Tone"
|
||||
skinTones["\U0001f3fc"] = "Medium-Light Skin Tone"
|
||||
skinTones["\U0001f3fd"] = "Medium Skin Tone"
|
||||
skinTones["\U0001f3fe"] = "Medium-Dark Skin Tone"
|
||||
skinTones["\U0001f3ff"] = "Dark Skin Tone"
|
||||
|
||||
var tmp Gemoji
|
||||
|
||||
//filter out emoji that require greater than max unicode version
|
||||
for i := range data {
|
||||
val, _ := strconv.ParseFloat(data[i].UnicodeVersion, 64)
|
||||
if int(val) <= maxUnicodeVersion {
|
||||
tmp = append(tmp, data[i])
|
||||
}
|
||||
}
|
||||
data = tmp
|
||||
|
||||
sort.Slice(data, func(i, j int) bool {
|
||||
return data[i].Aliases[0] < data[j].Aliases[0]
|
||||
})
|
||||
|
||||
aliasMap := make(map[string]int, len(data))
|
||||
|
||||
for i, e := range data {
|
||||
if e.Emoji == "" || len(e.Aliases) == 0 {
|
||||
continue
|
||||
}
|
||||
for _, a := range e.Aliases {
|
||||
if a == "" {
|
||||
continue
|
||||
}
|
||||
aliasMap[a] = i
|
||||
}
|
||||
}
|
||||
|
||||
// gitea customizations
|
||||
i, ok := aliasMap["tada"]
|
||||
if ok {
|
||||
data[i].Aliases = append(data[i].Aliases, "hooray")
|
||||
}
|
||||
i, ok = aliasMap["laughing"]
|
||||
if ok {
|
||||
data[i].Aliases = append(data[i].Aliases, "laugh")
|
||||
}
|
||||
|
||||
// write a JSON file to use with tribute (write before adding skin tones since we can't support them there yet)
|
||||
file, _ := json.Marshal(data)
|
||||
_ = ioutil.WriteFile("assets/emoji.json", file, 0644)
|
||||
|
||||
// Add skin tones to emoji that support it
|
||||
var (
|
||||
s []string
|
||||
newEmoji string
|
||||
newDescription string
|
||||
newData Emoji
|
||||
)
|
||||
|
||||
for i := range data {
|
||||
if data[i].SkinTones {
|
||||
for k, v := range skinTones {
|
||||
s = strings.Split(data[i].Emoji, "")
|
||||
|
||||
if utf8.RuneCountInString(data[i].Emoji) == 1 {
|
||||
s = append(s, k)
|
||||
} else {
|
||||
// insert into slice after first element because all emoji that support skin tones
|
||||
// have that modifer placed at this spot
|
||||
s = append(s, "")
|
||||
copy(s[2:], s[1:])
|
||||
s[1] = k
|
||||
}
|
||||
|
||||
newEmoji = strings.Join(s, "")
|
||||
newDescription = data[i].Description + ": " + v
|
||||
newAlias := data[i].Aliases[0] + "_" + strings.ReplaceAll(v, " ", "_")
|
||||
|
||||
newData = Emoji{newEmoji, newDescription, []string{newAlias}, "12.0", false}
|
||||
data = append(data, newData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add header
|
||||
str := replacer.Replace(fmt.Sprintf(hdr, gemojiURL, data))
|
||||
|
||||
// change the format of the unicode string
|
||||
str = emojiRE.ReplaceAllStringFunc(str, func(s string) string {
|
||||
var err error
|
||||
s, err = strconv.Unquote(s[len("{Emoji:"):])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return "{" + strconv.QuoteToASCII(s)
|
||||
})
|
||||
|
||||
// format
|
||||
return format.Source([]byte(str))
|
||||
}
|
||||
|
||||
const hdr = `
|
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package emoji
|
||||
|
||||
// Code generated by gen.go. DO NOT EDIT.
|
||||
// Sourced from %s
|
||||
//
|
||||
var GemojiData = %#v
|
||||
`
|
@ -1,119 +0,0 @@
|
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Copyright (c) 2015, Wade Simmons
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// gocovmerge takes the results from multiple `go test -coverprofile` runs and
|
||||
// merges them into one profile
|
||||
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"sort"
|
||||
|
||||
"golang.org/x/tools/cover"
|
||||
)
|
||||
|
||||
func mergeProfiles(p *cover.Profile, merge *cover.Profile) {
|
||||
if p.Mode != merge.Mode {
|
||||
log.Fatalf("cannot merge profiles with different modes")
|
||||
}
|
||||
// Since the blocks are sorted, we can keep track of where the last block
|
||||
// was inserted and only look at the blocks after that as targets for merge
|
||||
startIndex := 0
|
||||
for _, b := range merge.Blocks {
|
||||
startIndex = mergeProfileBlock(p, b, startIndex)
|
||||
}
|
||||
}
|
||||
|
||||
func mergeProfileBlock(p *cover.Profile, pb cover.ProfileBlock, startIndex int) int {
|
||||
sortFunc := func(i int) bool {
|
||||
pi := p.Blocks[i+startIndex]
|
||||
return pi.StartLine >= pb.StartLine && (pi.StartLine != pb.StartLine || pi.StartCol >= pb.StartCol)
|
||||
}
|
||||
|
||||
i := 0
|
||||
if sortFunc(i) != true {
|
||||
i = sort.Search(len(p.Blocks)-startIndex, sortFunc)
|
||||
}
|
||||
i += startIndex
|
||||
if i < len(p.Blocks) && p.Blocks[i].StartLine == pb.StartLine && p.Blocks[i].StartCol == pb.StartCol {
|
||||
if p.Blocks[i].EndLine != pb.EndLine || p.Blocks[i].EndCol != pb.EndCol {
|
||||
log.Fatalf("OVERLAP MERGE: %v %v %v", p.FileName, p.Blocks[i], pb)
|
||||
}
|
||||
switch p.Mode {
|
||||
case "set":
|
||||
p.Blocks[i].Count |= pb.Count
|
||||
case "count", "atomic":
|
||||
p.Blocks[i].Count += pb.Count
|
||||
default:
|
||||
log.Fatalf("unsupported covermode: '%s'", p.Mode)
|
||||
}
|
||||
} else {
|
||||
if i > 0 {
|
||||
pa := p.Blocks[i-1]
|
||||
if pa.EndLine >= pb.EndLine && (pa.EndLine != pb.EndLine || pa.EndCol > pb.EndCol) {
|
||||
log.Fatalf("OVERLAP BEFORE: %v %v %v", p.FileName, pa, pb)
|
||||
}
|
||||
}
|
||||
if i < len(p.Blocks)-1 {
|
||||
pa := p.Blocks[i+1]
|
||||
if pa.StartLine <= pb.StartLine && (pa.StartLine != pb.StartLine || pa.StartCol < pb.StartCol) {
|
||||
log.Fatalf("OVERLAP AFTER: %v %v %v", p.FileName, pa, pb)
|
||||
}
|
||||
}
|
||||
p.Blocks = append(p.Blocks, cover.ProfileBlock{})
|
||||
copy(p.Blocks[i+1:], p.Blocks[i:])
|
||||
p.Blocks[i] = pb
|
||||
}
|
||||
return i + 1
|
||||
}
|
||||
|
||||
func addProfile(profiles []*cover.Profile, p *cover.Profile) []*cover.Profile {
|
||||
i := sort.Search(len(profiles), func(i int) bool { return profiles[i].FileName >= p.FileName })
|
||||
if i < len(profiles) && profiles[i].FileName == p.FileName {
|
||||
mergeProfiles(profiles[i], p)
|
||||
} else {
|
||||
profiles = append(profiles, nil)
|
||||
copy(profiles[i+1:], profiles[i:])
|
||||
profiles[i] = p
|
||||
}
|
||||
return profiles
|
||||
}
|
||||
|
||||
func dumpProfiles(profiles []*cover.Profile, out io.Writer) {
|
||||
if len(profiles) == 0 {
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(out, "mode: %s\n", profiles[0].Mode)
|
||||
for _, p := range profiles {
|
||||
for _, b := range p.Blocks {
|
||||
fmt.Fprintf(out, "%s:%d.%d,%d.%d %d %d\n", p.FileName, b.StartLine, b.StartCol, b.EndLine, b.EndCol, b.NumStmt, b.Count)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var merged []*cover.Profile
|
||||
|
||||
for _, file := range flag.Args() {
|
||||
profiles, err := cover.ParseProfiles(file)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to parse profiles: %v", err)
|
||||
}
|
||||
for _, p := range profiles {
|
||||
merged = addProfile(merged, p)
|
||||
}
|
||||
}
|
||||
|
||||
dumpProfiles(merged, os.Stdout)
|
||||
}
|
325
build/lint.go
325
build/lint.go
File diff suppressed because it is too large
Load Diff
@ -1,23 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
mv ./options/locale/locale_en-US.ini ./options/
|
||||
|
||||
# Make sure to only change lines that have the translation enclosed between quotes
|
||||
sed -i -r -e '/^[a-zA-Z0-9_.-]+[ ]*=[ ]*".*"$/ {
|
||||
s/^([a-zA-Z0-9_.-]+)[ ]*="/\1=/
|
||||
s/\\"/"/g
|
||||
s/"$//
|
||||
}' ./options/locale/*.ini
|
||||
|
||||
# Remove translation under 25% of en_us
|
||||
baselines=`wc -l "./options/locale_en-US.ini" | cut -d" " -f1`
|
||||
baselines=$((baselines / 4))
|
||||
for filename in ./options/locale/*.ini; do
|
||||
lines=`wc -l "$filename" | cut -d" " -f1`
|
||||
if [ $lines -lt $baselines ]; then
|
||||
echo "Removing $filename: $lines/$baselines"
|
||||
rm "$filename"
|
||||
fi
|
||||
done
|
||||
|
||||
mv ./options/locale_en-US.ini ./options/locale/
|
53
cmd/admin.go
53
cmd/admin.go
@ -14,10 +14,9 @@ import (
|
||||
"code.gitea.io/gitea/models"
|
||||
"code.gitea.io/gitea/modules/auth/oauth2"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/graceful"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
pwd "code.gitea.io/gitea/modules/password"
|
||||
repo_module "code.gitea.io/gitea/modules/repository"
|
||||
"code.gitea.io/gitea/modules/repository"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
|
||||
"github.com/urfave/cli"
|
||||
@ -146,32 +145,6 @@ var (
|
||||
Name: "list",
|
||||
Usage: "List auth sources",
|
||||
Action: runListAuth,
|
||||
Flags: []cli.Flag{
|
||||
cli.IntFlag{
|
||||
Name: "min-width",
|
||||
Usage: "Minimal cell width including any padding for the formatted table",
|
||||
Value: 0,
|
||||
},
|
||||
cli.IntFlag{
|
||||
Name: "tab-width",
|
||||
Usage: "width of tab characters in formatted table (equivalent number of spaces)",
|
||||
Value: 8,
|
||||
},
|
||||
cli.IntFlag{
|
||||
Name: "padding",
|
||||
Usage: "padding added to a cell before computing its width",
|
||||
Value: 1,
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "pad-char",
|
||||
Usage: `ASCII char used for padding if padchar == '\\t', the Writer will assume that the width of a '\\t' in the formatted output is tabwidth, and cells are left-aligned independent of align_left (for correct-looking results, tabwidth must correspond to the tab width in the viewer displaying the result)`,
|
||||
Value: "\t",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "vertical-bars",
|
||||
Usage: "Set to true to print vertical bars between columns",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
idFlag = cli.Int64Flag{
|
||||
@ -377,11 +350,9 @@ func runRepoSyncReleases(c *cli.Context) error {
|
||||
log.Trace("Synchronizing repository releases (this may take a while)")
|
||||
for page := 1; ; page++ {
|
||||
repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
|
||||
ListOptions: models.ListOptions{
|
||||
PageSize: models.RepositoryListDefaultPageSize,
|
||||
Page: page,
|
||||
},
|
||||
Private: true,
|
||||
Page: page,
|
||||
PageSize: models.RepositoryListDefaultPageSize,
|
||||
Private: true,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("SearchRepositoryByName: %v", err)
|
||||
@ -404,7 +375,7 @@ func runRepoSyncReleases(c *cli.Context) error {
|
||||
}
|
||||
log.Trace(" currentNumReleases is %d, running SyncReleasesWithTags", oldnum)
|
||||
|
||||
if err = repo_module.SyncReleasesWithTags(repo, gitRepo); err != nil {
|
||||
if err = repository.SyncReleasesWithTags(repo, gitRepo); err != nil {
|
||||
log.Warn(" SyncReleasesWithTags: %v", err)
|
||||
gitRepo.Close()
|
||||
continue
|
||||
@ -439,7 +410,7 @@ func runRegenerateHooks(c *cli.Context) error {
|
||||
if err := initDB(); err != nil {
|
||||
return err
|
||||
}
|
||||
return repo_module.SyncRepositoryHooks(graceful.GetManager().ShutdownContext())
|
||||
return models.SyncRepositoryHooks()
|
||||
}
|
||||
|
||||
func runRegenerateKeys(c *cli.Context) error {
|
||||
@ -561,18 +532,8 @@ func runListAuth(c *cli.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
flags := tabwriter.AlignRight
|
||||
if c.Bool("vertical-bars") {
|
||||
flags |= tabwriter.Debug
|
||||
}
|
||||
|
||||
padChar := byte('\t')
|
||||
if len(c.String("pad-char")) > 0 {
|
||||
padChar = c.String("pad-char")[0]
|
||||
}
|
||||
|
||||
// loop through each source and print
|
||||
w := tabwriter.NewWriter(os.Stdout, c.Int("min-width"), c.Int("tab-width"), c.Int("padding"), padChar, flags)
|
||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.AlignRight)
|
||||
fmt.Fprintf(w, "ID\tName\tType\tEnabled\n")
|
||||
for _, source := range loginSources {
|
||||
fmt.Fprintf(w, "%d\t%s\t%s\t%t\n", source.ID, source.Name, models.LoginNames[source.Type], source.IsActived)
|
||||
|
@ -61,10 +61,6 @@ var (
|
||||
Name: "admin-filter",
|
||||
Usage: "An LDAP filter specifying if a user should be given administrator privileges.",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "restricted-filter",
|
||||
Usage: "An LDAP filter specifying if a user should be given restricted status.",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "allow-deactivate-all",
|
||||
Usage: "Allow empty search results to deactivate all users.",
|
||||
@ -239,9 +235,6 @@ func parseLdapConfig(c *cli.Context, config *models.LDAPConfig) error {
|
||||
if c.IsSet("admin-filter") {
|
||||
config.Source.AdminFilter = c.String("admin-filter")
|
||||
}
|
||||
if c.IsSet("restricted-filter") {
|
||||
config.Source.RestrictedFilter = c.String("restricted-filter")
|
||||
}
|
||||
if c.IsSet("allow-deactivate-all") {
|
||||
config.Source.AllowDeactivateAll = c.Bool("allow-deactivate-all")
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ func TestAddLdapBindDn(t *testing.T) {
|
||||
"--user-search-base", "ou=Users,dc=full-domain-bind,dc=org",
|
||||
"--user-filter", "(memberOf=cn=user-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
"--admin-filter", "(memberOf=cn=admin-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
"--restricted-filter", "(memberOf=cn=restricted-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
"--username-attribute", "uid-bind full",
|
||||
"--firstname-attribute", "givenName-bind full",
|
||||
"--surname-attribute", "sn-bind full",
|
||||
@ -75,7 +74,6 @@ func TestAddLdapBindDn(t *testing.T) {
|
||||
SearchPageSize: 99,
|
||||
Filter: "(memberOf=cn=user-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
AdminFilter: "(memberOf=cn=admin-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
RestrictedFilter: "(memberOf=cn=restricted-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
Enabled: true,
|
||||
},
|
||||
},
|
||||
@ -267,7 +265,6 @@ func TestAddLdapSimpleAuth(t *testing.T) {
|
||||
"--user-search-base", "ou=Users,dc=full-domain-simple,dc=org",
|
||||
"--user-filter", "(&(objectClass=posixAccount)(full-simple-cn=%s))",
|
||||
"--admin-filter", "(memberOf=cn=admin-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
"--restricted-filter", "(memberOf=cn=restricted-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
"--username-attribute", "uid-simple full",
|
||||
"--firstname-attribute", "givenName-simple full",
|
||||
"--surname-attribute", "sn-simple full",
|
||||
@ -295,7 +292,6 @@ func TestAddLdapSimpleAuth(t *testing.T) {
|
||||
AttributeSSHPublicKey: "publickey-simple full",
|
||||
Filter: "(&(objectClass=posixAccount)(full-simple-cn=%s))",
|
||||
AdminFilter: "(memberOf=cn=admin-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
RestrictedFilter: "(memberOf=cn=restricted-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
Enabled: true,
|
||||
},
|
||||
},
|
||||
@ -503,7 +499,6 @@ func TestUpdateLdapBindDn(t *testing.T) {
|
||||
"--user-search-base", "ou=Users,dc=full-domain-bind,dc=org",
|
||||
"--user-filter", "(memberOf=cn=user-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
"--admin-filter", "(memberOf=cn=admin-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
"--restricted-filter", "(memberOf=cn=restricted-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
"--username-attribute", "uid-bind full",
|
||||
"--firstname-attribute", "givenName-bind full",
|
||||
"--surname-attribute", "sn-bind full",
|
||||
@ -548,7 +543,6 @@ func TestUpdateLdapBindDn(t *testing.T) {
|
||||
SearchPageSize: 99,
|
||||
Filter: "(memberOf=cn=user-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
AdminFilter: "(memberOf=cn=admin-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
RestrictedFilter: "(memberOf=cn=restricted-group,ou=example,dc=full-domain-bind,dc=org)",
|
||||
Enabled: true,
|
||||
},
|
||||
},
|
||||
@ -984,7 +978,6 @@ func TestUpdateLdapSimpleAuth(t *testing.T) {
|
||||
"--user-search-base", "ou=Users,dc=full-domain-simple,dc=org",
|
||||
"--user-filter", "(&(objectClass=posixAccount)(full-simple-cn=%s))",
|
||||
"--admin-filter", "(memberOf=cn=admin-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
"--restricted-filter", "(memberOf=cn=restricted-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
"--username-attribute", "uid-simple full",
|
||||
"--firstname-attribute", "givenName-simple full",
|
||||
"--surname-attribute", "sn-simple full",
|
||||
@ -1013,7 +1006,6 @@ func TestUpdateLdapSimpleAuth(t *testing.T) {
|
||||
AttributeSSHPublicKey: "publickey-simple full",
|
||||
Filter: "(&(objectClass=posixAccount)(full-simple-cn=%s))",
|
||||
AdminFilter: "(memberOf=cn=admin-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
RestrictedFilter: "(memberOf=cn=restricted-group,ou=example,dc=full-domain-simple,dc=org)",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
120
cmd/doctor.go
120
cmd/doctor.go
@ -22,7 +22,6 @@ import (
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/options"
|
||||
"code.gitea.io/gitea/modules/repository"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"xorm.io/builder"
|
||||
|
||||
@ -85,16 +84,10 @@ var checklist = []check{
|
||||
},
|
||||
{
|
||||
title: "Check Database Version",
|
||||
name: "check-db-version",
|
||||
name: "check-db",
|
||||
isDefault: true,
|
||||
f: runDoctorCheckDBVersion,
|
||||
abortIfFailed: false,
|
||||
},
|
||||
{
|
||||
title: "Check consistency of database",
|
||||
name: "check-db-consistency",
|
||||
isDefault: false,
|
||||
f: runDoctorCheckDBConsistency,
|
||||
abortIfFailed: true,
|
||||
},
|
||||
{
|
||||
title: "Check if OpenSSH authorized_keys file is up-to-date",
|
||||
@ -120,12 +113,6 @@ var checklist = []check{
|
||||
isDefault: false,
|
||||
f: runDoctorPRMergeBase,
|
||||
},
|
||||
{
|
||||
title: "Recalculate Stars number for all user",
|
||||
name: "recalculate_stars_number",
|
||||
isDefault: false,
|
||||
f: runDoctorUserStarNum,
|
||||
},
|
||||
// more checks please append here
|
||||
}
|
||||
|
||||
@ -365,7 +352,7 @@ func runDoctorAuthorizedKeys(ctx *cli.Context) ([]string, error) {
|
||||
if ctx.Bool("fix") {
|
||||
return []string{"authorized_keys is out of date, attempting regeneration"}, models.RewriteAllPublicKeys()
|
||||
}
|
||||
return nil, fmt.Errorf(`authorized_keys is out of date and should be regenerated with "gitea admin regenerate keys" or "gitea doctor --run authorized_keys --fix"`)
|
||||
return nil, fmt.Errorf("authorized_keys is out of date and should be regenerated with gitea admin regenerate keys")
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
@ -413,12 +400,12 @@ func iteratePRs(repo *models.Repository, each func(*models.Repository, *models.P
|
||||
func runDoctorHooks(ctx *cli.Context) ([]string, error) {
|
||||
// Need to iterate across all of the repositories
|
||||
return iterateRepositories(func(repo *models.Repository) ([]string, error) {
|
||||
results, err := repository.CheckDelegateHooks(repo.RepoPath())
|
||||
results, err := models.CheckDelegateHooks(repo.RepoPath())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(results) > 0 && ctx.Bool("fix") {
|
||||
return []string{fmt.Sprintf("regenerated hooks for %s", repo.FullName())}, repository.CreateDelegateHooks(repo.RepoPath())
|
||||
return []string{fmt.Sprintf("regenerated hooks for %s", repo.FullName())}, models.CreateDelegateHooks(repo.RepoPath())
|
||||
}
|
||||
|
||||
return results, nil
|
||||
@ -500,10 +487,6 @@ func runDoctorPRMergeBase(ctx *cli.Context) ([]string, error) {
|
||||
return results, err
|
||||
}
|
||||
|
||||
func runDoctorUserStarNum(ctx *cli.Context) ([]string, error) {
|
||||
return nil, models.DoctorUserStarNum()
|
||||
}
|
||||
|
||||
func runDoctorScriptType(ctx *cli.Context) ([]string, error) {
|
||||
path, err := exec.LookPath(setting.ScriptType)
|
||||
if err != nil {
|
||||
@ -511,96 +494,3 @@ func runDoctorScriptType(ctx *cli.Context) ([]string, error) {
|
||||
}
|
||||
return []string{fmt.Sprintf("ScriptType %s is on the current PATH at %s", setting.ScriptType, path)}, nil
|
||||
}
|
||||
|
||||
func runDoctorCheckDBConsistency(ctx *cli.Context) ([]string, error) {
|
||||
var results []string
|
||||
|
||||
// make sure DB version is uptodate
|
||||
if err := models.NewEngine(context.Background(), migrations.EnsureUpToDate); err != nil {
|
||||
return nil, fmt.Errorf("model version on the database does not match the current Gitea version. Model consistency will not be checked until the database is upgraded")
|
||||
}
|
||||
|
||||
//find labels without existing repo or org
|
||||
count, err := models.CountOrphanedLabels()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count > 0 {
|
||||
if ctx.Bool("fix") {
|
||||
if err = models.DeleteOrphanedLabels(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, fmt.Sprintf("%d labels without existing repository/organisation deleted", count))
|
||||
} else {
|
||||
results = append(results, fmt.Sprintf("%d labels without existing repository/organisation", count))
|
||||
}
|
||||
}
|
||||
|
||||
//find issues without existing repository
|
||||
count, err = models.CountOrphanedIssues()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count > 0 {
|
||||
if ctx.Bool("fix") {
|
||||
if err = models.DeleteOrphanedIssues(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, fmt.Sprintf("%d issues without existing repository deleted", count))
|
||||
} else {
|
||||
results = append(results, fmt.Sprintf("%d issues without existing repository", count))
|
||||
}
|
||||
}
|
||||
|
||||
//find pulls without existing issues
|
||||
count, err = models.CountOrphanedObjects("pull_request", "issue", "pull_request.issue_id=issue.id")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count > 0 {
|
||||
if ctx.Bool("fix") {
|
||||
if err = models.DeleteOrphanedObjects("pull_request", "issue", "pull_request.issue_id=issue.id"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, fmt.Sprintf("%d pull requests without existing issue deleted", count))
|
||||
} else {
|
||||
results = append(results, fmt.Sprintf("%d pull requests without existing issue", count))
|
||||
}
|
||||
}
|
||||
|
||||
//find tracked times without existing issues/pulls
|
||||
count, err = models.CountOrphanedObjects("tracked_time", "issue", "tracked_time.issue_id=issue.id")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count > 0 {
|
||||
if ctx.Bool("fix") {
|
||||
if err = models.DeleteOrphanedObjects("tracked_time", "issue", "tracked_time.issue_id=issue.id"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, fmt.Sprintf("%d tracked times without existing issue deleted", count))
|
||||
} else {
|
||||
results = append(results, fmt.Sprintf("%d tracked times without existing issue", count))
|
||||
}
|
||||
}
|
||||
|
||||
count, err = models.CountNullArchivedRepository()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count > 0 {
|
||||
if ctx.Bool("fix") {
|
||||
updatedCount, err := models.FixNullArchivedRepository()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, fmt.Sprintf("%d repositories with null is_archived updated", updatedCount))
|
||||
} else {
|
||||
results = append(results, fmt.Sprintf("%d repositories with null is_archived", count))
|
||||
}
|
||||
}
|
||||
|
||||
//ToDo: function to recalc all counters
|
||||
|
||||
return results, nil
|
||||
}
|
||||
|
13
cmd/dump.go
13
cmd/dump.go
@ -52,10 +52,6 @@ It can be used for backup and capture Gitea server image to send to maintainer`,
|
||||
Name: "skip-repository, R",
|
||||
Usage: "Skip the repository dumping",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "skip-log, L",
|
||||
Usage: "Skip the log dumping",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@ -99,7 +95,7 @@ func runDump(ctx *cli.Context) error {
|
||||
|
||||
zip.Verbose = ctx.Bool("verbose")
|
||||
|
||||
if ctx.IsSet("skip-repository") && ctx.Bool("skip-repository") {
|
||||
if ctx.IsSet("skip-repository") {
|
||||
log.Info("Skip dumping local repositories")
|
||||
} else {
|
||||
log.Info("Dumping local repositories...%s", setting.RepoRootPath)
|
||||
@ -155,12 +151,7 @@ func runDump(ctx *cli.Context) error {
|
||||
}
|
||||
}
|
||||
|
||||
// Doesn't check if LogRootPath exists before processing --skip-log intentionally,
|
||||
// ensuring that it's clear the dump is skipped whether the directory's initialized
|
||||
// yet or not.
|
||||
if ctx.IsSet("skip-log") && ctx.Bool("skip-log") {
|
||||
log.Info("Skip dumping log files")
|
||||
} else if com.IsExist(setting.LogRootPath) {
|
||||
if com.IsExist(setting.LogRootPath) {
|
||||
if err := z.AddDir("log", setting.LogRootPath); err != nil {
|
||||
fatal("Failed to include log: %v", err)
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user