added ebuild for gitlabhq-6.6.5 with patches. the ebuild compiles, i didn't test the installation or even if it runs, so beware!

This commit is contained in:
Manuel Friedli 2014-05-18 18:53:48 +02:00
parent d5533d34de
commit 38af1e988e
31 changed files with 2267 additions and 0 deletions

View File

@ -0,0 +1,31 @@
AUX config.ssh 245 SHA256 5bf5d5a357e88b71e14a12bb28ea68d0286ed29118045aa944484b84b6fa5e4b SHA512 52dbec481cd45136e72370713ab20a41616dccb252e75b884b66e2494aaefe7795719169906dcad5030dcbe33201d021bdad1f7a99120ac40a64611290ff8759 WHIRLPOOL 9b991ad20787e0e7274136ddb8e22e1082360d580f8576feb722730b5c3f3fa22992f671f7916e191052a78d8d688d32044b39059dc7146d14c2da57fa891214
AUX gitlab-sidekiq.init 979 SHA256 f9bc02031b0418e4c765fae37bb40cd9e16dbe5b1a7f5c105a2d7ba3568b0195 SHA512 e3311f1110fca02a378a9f74704d9241884a1973e90be1dbd663809b524528eda25e3ad0ac5d20737f6ccd78343582557ac579adb976473f8aabc0320172921f WHIRLPOOL 365d539cceacb5ff9171aa7316ac061ef4b4a8d63e6d4a26395afb841878a08bdd1b9bf2709602dc90f15a1ed5ff8566a0e8239e8ab9184e84814a16993f3aeb
AUX gitlab-support.init 1188 SHA256 09059c391a5d5a8856030b4a50a9c8bb7d8fdb8f7ab75c1a869015bbff6a3a32 SHA512 25fe623e1d506a750897b4e100fcaddc654997a7cf23b7f1a6b4c3b77907cbe8af669cc38da86753696861e4fd14415ea7bc1decb0fdb500de1ef8a3e845860c WHIRLPOOL 169fab28b013762d3eaac4d8a37ded0ba6dedd9ebcd9fdd55347409f279d332a8d0326ec6eb66255c6f1d488c856c7135c60f3069972a7a07e55453e55bbe969
AUX gitlab-unicorn-6.init 1663 SHA256 ba211c63d559cbca510483d5536d28131e08f67dc8914444a2c85b27c7a92b60 SHA512 a574b3bb5b9af3e3a707045ac6d783bab73bab1db033d07999b3d06789da0853bc3de0bba39a3c154e5b1ab385926ee3ec4487f4c797708a318fa5df22827069 WHIRLPOOL 497cf52ebb4b33cc6bbd81e53d4961878b2ea9dc42bacabf7a32686e52a54c22eed73836705e80714d7b759cfd2ee1929e6aa12083435f265c472270e158f72a
AUX gitlab-unicorn.init 1874 SHA256 8bede14eb7beaba955e64d0ff2928324992522e22e777aab33bf51d743c7ba4e SHA512 a8595a623cd724a3d2e3b95ea7216e2574d0beea75369a46dfd6c5483310675a827d08cda516dec0df7ccbff399d27e3dde0e0fae07d11eed6412b0d3f9ca8d9 WHIRLPOOL c619180431ee27b5fe724aaf6ed31bb9fcf8db3779d7879e79c7a04927ea7d4efcd363d5cc44184917bd4de8292267e93136de849e8892ffc1e2891aacb5f51c
AUX gitlab.logrotate 191 SHA256 9c02c26f5faa443cd576599462c6a8206d62495ab9671098a5f0e379f216541b SHA512 2212a8e5f2d4704256d5abb92b5a1201b20f82b04610758e734d163792a60b78f482017510169666a70ed9352b171177d05237ffe87988cacb764c5ef7ba5443 WHIRLPOOL f61297015311316554e63af4822b8d274f5a2378e829e5c14bb22e642b0d83023446acff45a13aa354f127543ce1552c99488b92ed8f39d86959343c7e67bbee
AUX gitlabhq-4.0.0-fix-checks-gentoo.patch 1936 SHA256 d1775b91fa55f3706793771fd98564a06322e3dfc07970a6fd3497709507f527 SHA512 45e1e55fc9ed514e1cb18c5d4bc8b514fb995035e1ff9cf58b6bc238271bd3468fad1af23f53035b7c43a1a7becf51234522953064eefedcae8b507e5b7cfd7a WHIRLPOOL b18cc3df85b6251b823219657397ea89f9f08c67b57b64e09bfedfa341a04aa6910acb4876c2bcca2b853e27bf5ee43a1f2237625b84f183edab134cf08fa17a
AUX gitlabhq-4.0.0-fix-gemfile.patch 1736 SHA256 b37a447b38e5303e94205fda9ce131f5c8828c323974e9ed30253d53938d7640 SHA512 6e5e875a53bb2efda1153c6ef8275f93cd8b9eb8d936b34a6df6f0db3bc577099fbc22f2e6c844ee8629af13c4d4fed968b0c5d3360ebdcee1136010a04be34e WHIRLPOOL 1f24e69f52df32d75863295378a781da4ff6df22699a77d1b9f53a98c78df81a1cd0136b60695fe28ff904dcb32c87b6e67b4ae324c070c873bfefc3bd3d6c2e
AUX gitlabhq-4.0.0-fix-passenger.patch 1156 SHA256 f2ccaad4e349cb8c965ed46607a78f7d738ed434565fc7d80b15ac92121a29a0 SHA512 31906f2a8831ce0484279bbac68d9935dca52e831cf8c473746a51d1b2de4077f40726544a09b10b80890c72b9028bda7b294fb19ccec5df5a312f5a2ce3d1aa WHIRLPOOL 384912fc1c1ae5da05e98525b435417f6488d3927e285fd16d3cf7659bc376bf5e801e3bc3be7f4de480c7302cc1d7edc3fa88825e82836dbaf0606f8218e662
AUX gitlabhq-4.0.0-fix-resque-pg.patch 415 SHA256 c1b764777a0089020893f05649b6d15cf8c60611e90d9d0b3e74ee29bcb57614 SHA512 83639200bbc49350ab9bfc033c0a5401967ad2ab6b23bbdcd948c09dc5e2c05b7b17ae144751b410b9d67e2c3cc76a7b268dcfc0381ce9385bc5c3e8507f969e WHIRLPOOL 2fd974d4a2db04de2b1c6dbef320319dc33be553faf3dd7a40e5af20d2aecd245da35354fc6568f98e8fbb40da1e11eda41e60d6353c32664132fdd6a478e56d
AUX gitlabhq-4.0.0-fix-wiki-pg.patch 2871 SHA256 c27f7ebd8614d217d824782dd65f9e2e12c7bc507a3eb01339a8a962279483f0 SHA512 6f86728574e495ab9604855be43a3739194b0f81ba9dd9dd3fdb76ca950400d1068119be4190612030cfe8e2c59cb771cc434dbe9cc0ad55329953178fe6d8fb WHIRLPOOL 4bb437cc63ad721a3826da4d796d2d79a79f140fa02a18b1d36cfa5b1caaea082888bd950ead666f24d5951ddbc9f81ef0d4914aae61dd262eae6e31dcb501ac
AUX gitlabhq-4.0.0-google-analytics.patch 3490 SHA256 52eb67c29fa6f41e8776ce2ba8d86c098fa2583a827541aae7ffe5c496da42d7 SHA512 7a4d551e69d15dcd7f180c34381f98f80b76d6a0fa0b8d702d74bf0f6178b80bb6c9595e8d9ab3b56e4ede249532294adb8727c7bebb73fddf67e71e88117e8b WHIRLPOOL 85a62da7088c5e11d5a727ecf2057c831a4f3c8c42cc8a69c5d8778dfda495b351d72c45e73ced2e7876c7cb56a37eefaab125f32ca48fde3078c7e92e7a31fb
AUX gitlabhq-4.0.0-performance.patch 6391 SHA256 7857a5f3c0789680cd3be2bfdea5981a97521726aac49430cbf9ef21069113a4 SHA512 573fb038c91eb7749f4fca50f8ef51f70895e5b695eabeb59553831850fe957c130f8e32aa3e866133d10ee3129b39e8fcfb7b6200b8f058a98989d8c1bfaec8 WHIRLPOOL 2f37d70ba9295bd38399e7411162ec339854ae283129df7e743054363eb4f7c130c1bd3cf1f93ccc97ab416bed1f9a86abcb398c2b979eada0cff89554ede96c
AUX gitlabhq-4.0.0-public-projects.patch 5611 SHA256 e006809ab10496e31432496504f720a78a9cffc00f49f1b3ba267f323e0dc674 SHA512 d0e39b502504cd2d76419f57c1ea4061b8f9166317f11c1690df1c1bc41f278efbcd11a3762990a18a2141088c14c7446697559a95c1c5214487f179be099370 WHIRLPOOL 6d10625a101a8839f27be2dd9813126b9cee6f38267c345199ff51800c7c2e711add38c0d51667c80df68c5489d2c8404722ad69f0748d9ef86e25103a3aea51
AUX gitlabhq-4.0.0-r1-fix-gemfile.patch 3189 SHA256 f6efec5d8ed7533adade361efcbd0d485d5b7ca9d9dd9f4b4d3a30264804fcca SHA512 fbf4685db1501fc85d0dc16bbae614ebe21b4546dbde8cd52a0ca8b0be0b818c4737835d833e09cfc621edc70583bb7c8f002f28734ced3ffd0c8ae906467f44 WHIRLPOOL b92a8c3e7df5b97ffe21aad1ec4ceaf4a0904e5d758f8994b771e51218f0998fa8043d654d6a5cabfd0d2d82da9481caf640baf5e1f25395a7c7156798095320
AUX gitlabhq-6.0.2-fix-gemfile.patch 2103 SHA256 f4d07fd2a8b59a7a89f3b522324f059ce00ce4292d1647d161d64d3c8fc27995 SHA512 dbd439d2338240622cd63e09703035bd676266edf1ceba90b402e78f500d3a80ef32a63ef1a178d12b0ca9f9e60e250b3c3e287772a6cba25d2371372b1e02af WHIRLPOOL 4fb037080c5d4051c9f38c2f3d32521ee5241cab6348ffabd9c8c606413526fc127a71e70079e296aaf34b055cdb874879cf46e1378617ac393669fbb5da90b8
AUX gitlabhq-6.0.2-fix-project-name-regex.patch 1203 SHA256 9ffa0c164384c00de3953a57c1f3984fe08cfcd996216ea7fece0ffa70ea91d6 SHA512 04bc0d2940f551d8b8c283b402cfb992dcd34900154d15a9372c4b560d0d07900923268a24785cfa647894f6a3ade8a0db3f84075d1365387dd2ef6a2cf11bec WHIRLPOOL 21250714ea6e273e0133673171812b1725228a60c616eece52c7feaf1a475c40a633f96d25d7e7089f6a6670ad21eae85d4bdc8728c63b483eb6b813381606be
AUX gitlabhq-6.0.2-fix-sendmail-config.patch 731 SHA256 51f0d0af2a7c048d7cff56cf27955632f340ca67f9d460af840cf34ed60ca574 SHA512 b10d5b8d89927404d25345e17ba37ca4e7848b04c2ca20c5eef14eaac43d9ba14b62ae4c0d532eefaf6f9a2944578e84eb65a3420335d32495855c4807eec356 WHIRLPOOL 66f6443f311f2355ffd4efaea914f462816a1966a715b3b5ffaaa26b41bdced928b9905b8606f06fac3c2ccf20741553cfed2615430287bede01cf376aae2a60
AUX gitlabhq-6.0.2-ldap-user-mapping.patch 7176 SHA256 202c21c2cc2ca26cabf648ba61d0269a73ea12dd8ea67f07c003c911620d4205 SHA512 40644e71f2977ef5fa26b260c151b96589ab57e5fbef5403614e22da0475f211f01569fe54865ea0ffb944431843dac02db997a5d5d64733dda3a878c9b09b97 WHIRLPOOL 7889c3052a370849b0a329dc8fa745e6f61754578807b2527312b3d09b34ec3c6c4bfc7a85315aff9e56488f6c66661ef025d5b2510e010266e935080214a0f4
AUX gitlabhq-6.5.1-email-custom-reply_to.patch 1816 SHA256 e0c56d2c26de1b3715473116f1337e5c184e42d2224eda5f448823018376e660 SHA512 08709c2421e5fad9f070fdf14992680a9afed81cb4348cdd726ab4476843b088d3bbd2bc6a1f74d54b6724bb0fee5e35562244eae043c02a6086950d5b2b2f31 WHIRLPOOL 288af9d299590645f2049f0b3013adf78cbdac974e4d5190cdf51e5dfe8cc9f2b60998a949383277a555a6d222da54cd610aa4b25571cad62314b1522958210b
AUX gitlabhq-6.5.1-fix-gemfile.patch 1996 SHA256 5cf252093179dc8868a335c9a792331b31b147c545bf7f7ed33efc061707b356 SHA512 39f2c585fa160ab54120f40ce451a2337e2f932382bc419a3a032215adaedc147ba29bf134e63fe973d0b8df6178f3c7a6797631ba059831a3b94a3dbfc39480 WHIRLPOOL f43fc4a03f76893f58cf33a04b563a0c4cfbb45888dcf4139fc30a9bf4d57c9becedbcd2448f494aa264aeb83a439c09996398a30d4e23a6652221ac3ac13669
AUX gitlabhq-6.5.1-fix-ldap-dn-case.patch 649 SHA256 37b217c56ccbed79a13e7d657572433c307867d62aa8e21c7ab1c537733b0d4f SHA512 99508485b83c21a9ba70b5d65ed082baf2fca1f6542d4118f24de841dc1eb35f9639ab5afcf46342043d9fc8b7c76e5ae7e8d749c7faa0263de91213415a22c1 WHIRLPOOL cb41be068a5b727e22ee917741dbd71ff363efc003502d37956a08fe741b57ab7507b066b784229c6b5a9691c884971ab138de3457e58c5d8ad619b770e31c27
AUX gitlabhq-6.5.1-fix-project-name-regex.patch 997 SHA256 a9e321bf7a986d86dbb87f1af3360ce71d60de5a9d6d3e23b12e469240ecd8bd SHA512 d0883c30b1d542e20908c8efa46cacab337fc70e902894a01707468b033be88ce6af865d78d5bc8830c74fbca55fc1c70286a4a95b9b6c82f06f0d0720e40b35 WHIRLPOOL 16f89f870d5b317015f08e415db323baac6f99ad789c7555f16c37ca918a9706c05b4ff527661d8399814fc7847895f5079a621d98c8c427da59deaaa2a3bd89
AUX gitlabhq-6.5.1-ldap-custom-mapping.patch 3276 SHA256 d335fc980a891a7a24cbb96ec7a4109bb3fc3a89ebc8c797d787e69fff74e7d2 SHA512 7cb523db97986eb94d0feda7be0eb8f400b9df744f25a44a783925059ae97671400bebfbe75b6d803640e4eb828abea193dcde26a2e6d5f103dc9d0913772365 WHIRLPOOL 76d81fd7075bb6dd52b622c6f2147393dd5fcf8e42addb82e9431a019c445f5703a77f31db71a62e05561eb05be8195bf05da0be83cd20db57659a057f7b0481
AUX gitlabhq-6.6.5-email-custom-reply_to.patch 1617 SHA256 320405e34892d5fc3f1e6ccc9ed043623e540b0d2daa18184c01a038d3bb558c SHA512 5117743fd42dafa2ebf107b9c25ca0d5b79e02aa987cfc9380aef6270ab5417db69b2d59740fd59d4d828a128d1ae4cb26eef895387e89cabb3581c855ef9254 WHIRLPOOL 4634491c9611b97e0d2203b3656ef3ceb175b21c0cad0bb564ac728884cc983a39f5a68f84b9a387c60e36524e8c58efcc563f6590527e768b68b3218c84c762
AUX gitlabhq-6.6.5-fix-gemfile.patch 2161 SHA256 7f1f6fef287a00a0f794ad31a81cced87a5ac6a31e79e27be6530f92d66a2598 SHA512 24bb78ea36886764911af7825c0ade796dbd24ee99ee19e418d4478bc4d4dcbdb4ffcfd63b615a842a320234c4e6b0b851094abdd0c5be0a5cd80308a00d380a WHIRLPOOL 6345e2ec96c52f79545f21fb330e8517925c04f162dc2cbad959c1eb59fd65e89be4cc45d1510ef662e43a26541e840e02742adb9474569a44e80771df773d7f
AUX gitlabhq-6.6.5-fix-ldap-dn-case.patch 649 SHA256 37b217c56ccbed79a13e7d657572433c307867d62aa8e21c7ab1c537733b0d4f SHA512 99508485b83c21a9ba70b5d65ed082baf2fca1f6542d4118f24de841dc1eb35f9639ab5afcf46342043d9fc8b7c76e5ae7e8d749c7faa0263de91213415a22c1 WHIRLPOOL cb41be068a5b727e22ee917741dbd71ff363efc003502d37956a08fe741b57ab7507b066b784229c6b5a9691c884971ab138de3457e58c5d8ad619b770e31c27
AUX gitlabhq-6.6.5-fix-project-name-regex.patch 997 SHA256 a9e321bf7a986d86dbb87f1af3360ce71d60de5a9d6d3e23b12e469240ecd8bd SHA512 d0883c30b1d542e20908c8efa46cacab337fc70e902894a01707468b033be88ce6af865d78d5bc8830c74fbca55fc1c70286a4a95b9b6c82f06f0d0720e40b35 WHIRLPOOL 16f89f870d5b317015f08e415db323baac6f99ad789c7555f16c37ca918a9706c05b4ff527661d8399814fc7847895f5079a621d98c8c427da59deaaa2a3bd89
AUX gitlabhq-6.6.5-ldap-custom-mapping.patch 3052 SHA256 64e47278393ba4442037bb684a44c1538e671683cfaa9dfcb9bf61e5265da03a SHA512 f1e9ad71e4b95e6cb4f56179d1a9f92b5a2b7c59a425f4c9620c3bb6cd68c9bd2ae4e443f8a29d84455b029d99ba248517b44b1b8e9ddeeca249a6e749bf095f WHIRLPOOL c2045af7b8b766a3e154a1a8fa83a469df4111b352973533f902c16abfeee161d1f4cf88861847f64dad36e39ca65a796598e9d75ddad5a8e9f160707af349a3
DIST gitlabhq-6.6.5.tar.gz 10240388 SHA256 70c2c50ab903b7173ccbb32d2c7f3db9a89a4a005d5515ef9ed5d935193dca2e SHA512 38d2395eabb4607b40798de0c6e9aa7fb6ecfe482b6f7d1a5cc2350c1cf04d939ae2487834d159419d01c24e82b818920f7b1999df444cb473c99d9fc40244da WHIRLPOOL ce684cac1ca27ae51f25277cba1c62fa389150ccd83ae83d5d91a17cf4e183e8af7928431000924f0dcb03505045cad850a05e6b2ac4fa001a488e73a4b09971
EBUILD gitlabhq-6.6.5.ebuild 10772 SHA256 b28fabaa399d478468740c6567dc5fb6403039ecf63fb10dd4d3947b3bdb5b4f SHA512 fef43df379af3200d023d06b8e3c7a8118e3c464e6a910ec8b16882a8a39e027a1082f4f604384282fe0a64a64f5f79f27f87636e8150ed6c5ef355c8d4581a2 WHIRLPOOL 8d1775f01638a55f407ed8590606675962544887500ce46f73b81cd383817bdbc27a510e6bfed0426bbaa8b0deea76cdafc08844e4b58929815f1e2dfc8ca861

View File

@ -0,0 +1,10 @@
Host localhost
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
BatchMode yes
CheckHostIP no
AddressFamily inet
PreferredAuthentications publickey
ControlMaster auto
ControlPath ~/.ssh/ssh-%r-%h:%p.sock
ControlPersist 24h

View File

@ -0,0 +1,43 @@
#!/sbin/runscript
name="GitLab Sidekiq"
description="Sidekiq for GitLab @SLOT@"
: ${gitlab_user:=@USER@}
: ${gitlab_base:="@GITLAB_BASE@"}
: ${rails_env:=production}
: ${sidekiq_pidfile:="/run/gitlab/sidekiq.pid"}
: ${sidekiq_logfile:="@LOGS_DIR@/sidekiq.log"}
: ${sidekiq_queues:="@QUEUES@"}
sidekiq_command="/usr/bin/bundle"
sidekiq_command_args="exec sidekiq -q ${sidekiq_queues} -P ${sidekiq_pidfile} -L ${sidekiq_logfile}"
depend() {
need redis
use net
}
start() {
checkpath -d -o ${gitlab_user} -m755 "$(dirname "${sidekiq_pidfile}")"
ebegin "Starting ${name} - Sidekiq"
start-stop-daemon --start \
--background --quiet \
--chdir "${gitlab_base}" \
--user=${gitlab_user} \
--pidfile="${sidekiq_pidfile}" \
--env RAILS_ENV=${rails_env} \
--exec ${sidekiq_command} -- ${sidekiq_command_args}
eend $?
}
stop() {
ebegin "Stopping ${name} - Sidekiq"
start-stop-daemon --stop \
--pidfile=${sidekiq_pidfile} \
--exec ${sidekiq_command}
eend $?
}

View File

@ -0,0 +1,50 @@
#!/sbin/runscript
name="GitLab support"
description="Support for GitLab @SLOT@"
: ${gitlab_user:=@USER@}
: ${gitlab_group:=@GROUP@}
: ${gitlab_home:="@GITLAB_HOME@"}
: ${resque_pidfile:="/run/gitlab/resque_worker.pid"}
: ${resque_log:="@LOG_DIR@/resque.log"}
: ${resque_queue:="@RESQUE_QUEUE@"}
: ${rails_env:=production}
resque_command="/usr/bin/bundle"
resque_command_args="exec rake environment resque:work QUEUE=${resque_queue} RAILS_ENV=${rails_env}"
if [ ${rails_env} = development ]; then
resque_command_args+=" VVERBOSE=1"
fi
depend() {
provide gitlab
need redis
use net
}
start() {
ebegin "Starting GitLab @SLOT@ Resque worker"
checkpath -d -o "${gitlab_user}:${gitlab_group}" -m750 "$(dirname "${resque_pidfile}")"
start-stop-daemon --start \
--background --quiet \
--chdir "${gitlab_home}" \
--user="${gitlab_user}:${gitlab_group}" \
--make-pidfile --pidfile=${resque_pidfile} \
--stdout "${resque_log}" --stderr "${resque_log}" \
--exec ${resque_command} -- ${resque_command_args}
eend $?
}
stop() {
ebegin "Stopping GitLab @SLOT@ Resque worker"
start-stop-daemon --stop \
--pidfile=${resque_pidfile} \
--exec ${resque_command}
eend $?
}

View File

@ -0,0 +1,67 @@
#!/sbin/runscript
name="GitLab-@SLOT@"
description="GitLab @SLOT@ on Unicorns"
: ${gitlab_user:=@USER@}
: ${gitlab_base:="@GITLAB_BASE@"}
: ${rails_env:=production}
: ${server_pidfile:="/run/gitlab/unicorn.pid"}
: ${sidekiq_pidfile:="/run/gitlab/sidekiq.pid"}
: ${sidekiq_logfile:="@LOGS_DIR@/sidekiq.log"}
: ${sidekiq_queues:="@QUEUES@"}
server_command="/usr/bin/bundle"
server_command_args="exec unicorn_rails -c ${gitlab_base}/config/unicorn.rb -E ${rails_env} -D"
sidekiq_command="/usr/bin/bundle"
sidekiq_command_args="exec sidekiq -q ${sidekiq_queues} -P ${sidekiq_pidfile} -L ${sidekiq_logfile}"
depend() {
provide gitlab
need redis
use net
}
start() {
ebegin "Starting ${name} - Unicorn servers"
checkpath -d -o ${gitlab_user} -m755 "$(dirname "${server_pidfile}")"
checkpath -d -o ${gitlab_user} -m755 "$(dirname "${sidekiq_pidfile}")"
start-stop-daemon --start \
--chdir "${gitlab_base}" \
--user=${gitlab_user} \
--pidfile="${server_pidfile}" \
--env RAILS_ENV=${rails_env} \
--exec ${server_command} -- ${server_command_args}
eend $?
ebegin "Starting ${name} - Sidekiq"
start-stop-daemon --start \
--background --quiet \
--chdir "${gitlab_base}" \
--user=${gitlab_user} \
--pidfile="${sidekiq_pidfile}" \
--env RAILS_ENV=${rails_env} \
--exec ${sidekiq_command} -- ${sidekiq_command_args}
eend $?
}
stop() {
ebegin "Stopping ${name} - Sidekiq"
start-stop-daemon --stop \
--pidfile=${sidekiq_pidfile} \
--exec ${sidekiq_command}
eend $?
ebegin "Stopping ${name} - Unicorn servers"
start-stop-daemon --stop \
--signal QUIT \
--pidfile=${server_pidfile} \
--exec ${server_command}
eend $?
}

View File

@ -0,0 +1,69 @@
#!/sbin/runscript
name="GitLab"
description="GitLab @SLOT@ on Unicorns"
: ${gitlab_user:=@USER@}
: ${gitlab_group:=@GROUP@}
: ${gitlab_home:="@GITLAB_HOME@"}
: ${server_pidfile:="/run/gitlab/unicorn.pid"}
: ${rails_env:=production}
: ${resque_pidfile:="/run/gitlab/resque_worker.pid"}
: ${resque_log:="/var/log/gitlab-4.0/resque.log"}
: ${resque_queue:=@RESQUE_QUEUE@}
server_command="/usr/bin/bundle"
server_command_args="exec unicorn_rails -c ${gitlab_home}/config/unicorn.rb -E ${rails_env} -D"
resque_command="/usr/bin/bundle"
resque_command_args="exec rake environment resque:work QUEUE=${resque_queue} RAILS_ENV=${rails_env}"
if [ ${rails_env} = development ]; then
resque_command_args+=" VVERBOSE=1"
fi
depend() {
provide gitlab
need redis
use net
}
start() {
ebegin "Starting GitLab @SLOT@ Unicorn servers"
checkpath -d -o "${gitlab_user}:${gitlab_group}" -m750 "$(dirname "${server_pidfile}")"
checkpath -d -o "${gitlab_user}:${gitlab_group}" -m750 "$(dirname "${resque_pidfile}")"
start-stop-daemon --start \
--chdir "${gitlab_home}" \
--user="${gitlab_user}:${gitlab_group}" \
--pidfile="${server_pidfile}" \
--exec ${server_command} -- ${server_command_args}
eend $?
ebegin "Starting GitLab @SLOT@ Resque worker"
start-stop-daemon --start \
--background --quiet \
--chdir "${gitlab_home}" \
--user="${gitlab_user}:${gitlab_group}" \
--make-pidfile --pidfile=${resque_pidfile} \
--stdout "${resque_log}" --stderr "${resque_log}" \
--exec ${resque_command} -- ${resque_command_args}
eend $?
}
stop() {
ebegin "Stopping GitLab @SLOT@ Resque worker"
start-stop-daemon --stop \
--pidfile=${resque_pidfile} \
--exec ${resque_command}
eend $?
ebegin "Stopping GitLab @SLOT@ Unicorn servers"
start-stop-daemon --stop \
--pidfile=${server_pidfile} \
--exec ${server_command} -- ${server_command_args}
eend $?
}

View File

@ -0,0 +1,10 @@
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
@LOG_DIR@/*.log {
missingok
delaycompress
compress
copytruncate
}

View File

@ -0,0 +1,58 @@
--- a/lib/tasks/gitlab/info.rake 2012-12-25 00:33:12.066872526 +0100
+++ b/lib/tasks/gitlab/info.rake 2012-12-25 00:33:55.682878240 +0100
@@ -12,6 +12,9 @@
debian_version = File.read('/etc/debian_version')
"Debian #{debian_version}"
end
+ os_name ||= if File.readable?('/etc/gentoo-release')
+ File.read('/etc/gentoo-release')
+ end
os_name.squish!
# check if there is an RVM environment
--- a/lib/tasks/gitlab/check.rake 2012-12-25 01:47:35.162380668 +0100
+++ b/lib/tasks/gitlab/check.rake 2012-12-25 01:49:49.006346565 +0100
@@ -20,8 +20,8 @@
check_gitlab_config_not_outdated
check_log_writable
check_tmp_writable
- check_init_script_exists
- check_init_script_up_to_date
+# check_init_script_exists
+# check_init_script_up_to_date
check_satellites_exist
finished_checking "GitLab"
@@ -254,7 +254,7 @@
start_checking "Environment"
check_gitlab_in_git_group
- check_issue_1056_shell_profile_error
+# check_issue_1056_shell_profile_error --don't need on Gentoo
check_gitlab_git_config
check_python2_exists
check_python2_version
@@ -542,7 +542,7 @@
def check_gitolite_is_up_to_date
print "Using recommended version ... "
- if gitolite_version.try(:start_with?, "v3.04")
+ if gitolite_version.try(:start_with?, "3.2")
puts "yes".green
else
puts "no".red
@@ -838,11 +838,13 @@
gitolite_version_file = "#{gitolite_home}/gitolite/src/VERSION"
if File.readable?(gitolite_version_file)
File.read(gitolite_version_file)
+ else
+ run("equery -q list -F '$version' 'gitolite'")
end
end
def has_gitolite3?
- gitolite_version.try(:start_with?, "v3.")
+ gitolite_version.try(:start_with?, "3.")
end
end

View File

@ -0,0 +1,48 @@
diff --git a/Gemfile b/Gemfile
index 49fbcad04fcdbb0d9a46c79e9185e10013c00f33..14b3553ffb8ae9bcb88c55b2d2772a926771cc55 100644
--- a/Gemfile
+++ b/Gemfile
@@ -28,6 +28,9 @@ gem 'yaml_db', git: "https://github.com/gitlabhq/yaml_db.git", ref:
gem 'grack', git: "https://github.com/gitlabhq/grack.git", ref: 'ba46f3b0845c6a09d488ae6abdce6ede37e227e8'
gem 'grit_ext', git: "https://github.com/gitlabhq/grit_ext.git", ref: '8e6afc2da821354774aa4d1ee8a1aa2082f84a3e'
+# Patched to fix issues with compiling on Gentoo
+gem "charlock_holmes", git: "https://github.com/ISSIntel/charlock_holmes.git", ref: '994dcf37aba066250750866e13bb51e3d5e72898'
+
# Gitolite client (for work with gitolite-admin repo)
gem "gitolite", '1.1.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index d8be14ba80ab191d6001e601026d27cdfa8fbb54..60f98ef22a8daf77ef08b58c52fab8f0cf560b51 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -6,6 +6,13 @@ GIT
database_cleaner (0.9.1)
GIT
+ remote: https://github.com/ISSIntel/charlock_holmes.git
+ revision: 994dcf37aba066250750866e13bb51e3d5e72898
+ ref: 994dcf37aba066250750866e13bb51e3d5e72898
+ specs:
+ charlock_holmes (0.6.9)
+
+GIT
remote: https://github.com/ctran/annotate_models.git
revision: be4e26825b521f0b2d86b181e2dff89901aa9b1e
specs:
@@ -129,7 +136,6 @@ GEM
carrierwave (0.7.1)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
- charlock_holmes (0.6.9)
childprocess (0.3.6)
ffi (~> 1.0, >= 1.0.6)
chosen-rails (0.9.8)
@@ -461,6 +467,7 @@ DEPENDENCIES
bootstrap-sass (= 2.2.1.1)
capybara
carrierwave (~> 0.7.1)
+ charlock_holmes!
chosen-rails (= 0.9.8)
coffee-rails (~> 3.2.2)
colored

View File

@ -0,0 +1,29 @@
--- /dev/null 2012-12-22 21:17:05.856026005 +0100
+++ /config/initializers/passenger_fix.rb 2013-01-01 23:11:18.717833817 +0100
@@ -0,0 +1,26 @@
+if defined?(PhusionPassenger)
+
+ # When you're using Passenger with smart-lv2 (default) or smart spawn method,
+ # Resque doesn't recognize that it has been forked and should re-establish
+ # Redis connection. You can see this error message in log:
+ # Redis::InheritedError, Tried to use a connection from a child process
+ # without reconnecting. You need to reconnect to Redis after forking.
+ #
+ # This solution is based on
+ # https://github.com/redis/redis-rb/wiki/redis-rb-on-Phusion-Passenger
+ #
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
+ # do nothing if we're not in smart spawning mode
+ return unless forked
+
+ # reconnect to Redis
+ Resque.redis.client.reconnect
+
+ # reconnect to cache store unless :memory_store or :null_store is used
+ unless [ActiveSupport::Cache::MemoryStore,
+ ActiveSupport::Cache::NullStore].include? Rails.cache.class
+ Rails.cache.instance_variable_get(:@data).reset
+ end
+ end
+end
+

View File

@ -0,0 +1,13 @@
--- a/lib/tasks/resque.rake 2012-12-25 14:39:00.679594127 +0100
+++ b/lib/tasks/resque.rake 2012-12-25 14:40:14.003591438 +0100
@@ -3,6 +3,10 @@
task "resque:setup" => :environment do
Resque.after_fork do
Resque.redis.client.reconnect
+
+ # Without that you will see exception:
+ # 'PGError: ERROR: prepared statement "a1" already exists'
+ ActiveRecord::Base.establish_connection
end
end

View File

@ -0,0 +1,93 @@
diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb
index a93afe114df68c026716911fa49963a0c77db016..0be71d465a28779db3ed646df9ac116fea73e49a 100644
--- a/app/controllers/wikis_controller.rb
+++ b/app/controllers/wikis_controller.rb
@@ -2,9 +2,9 @@ class WikisController < ProjectResourceController
before_filter :authorize_read_wiki!
before_filter :authorize_write_wiki!, only: [:edit, :create, :history]
before_filter :authorize_admin_wiki!, only: :destroy
-
+
def pages
- @wikis = @project.wikis.group(:slug).order("created_at")
+ @wikis = @project.wikis.last_revisions.order("created_at")
end
def show
@@ -49,7 +49,7 @@ class WikisController < ProjectResourceController
def history
@wikis = @project.wikis.where(slug: params[:id]).order("created_at")
end
-
+
def destroy
@wikis = @project.wikis.where(slug: params[:id]).delete_all
diff --git a/app/models/wiki.rb b/app/models/wiki.rb
index 252a97e8cca647dda190cec95f3a9bbe8129181e..53d52ec2a19760a7e6d37e38e8858c1ed92433cc 100644
--- a/app/models/wiki.rb
+++ b/app/models/wiki.rb
@@ -47,6 +47,19 @@ class Wiki < ActiveRecord::Base
new_wiki
end
+ # Scope with last revisions of pages (i.e. newest page per project_id
+ # and slug).
+ #
+ # return:
+ # ActiveRecord::Relation
+ #
+ def self.last_revisions
+ t1 = arel_table.alias(table_name + '1')
+ where(
+ id: from(t1).select(t1[:id].maximum).where(project_id: t1[:project_id], slug: t1[:slug])
+ )
+ end
+
def set_slug
self.slug = self.title.parameterize
end
diff --git a/spec/factories.rb b/spec/factories.rb
index abc0d37470176e57eb8006e0af64dbb4fbbebb02..8357fe2127f358c3e82f06b9cc3c575e5d9ae6b2 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -138,9 +138,10 @@ FactoryGirl.define do
end
factory :wiki do
- title
- content
+ sequence(:title) { |n| "wiki#{n}" }
+ content "Content"
user
+ project
end
factory :snippet do
diff --git a/spec/models/wiki_spec.rb b/spec/models/wiki_spec.rb
index 9750b81d303ecd1105a6c2bbe2d6b76aa79edd5b..a8967e95b200f45e26374be419f90375870c8d4a 100644
--- a/spec/models/wiki_spec.rb
+++ b/spec/models/wiki_spec.rb
@@ -32,4 +32,22 @@ describe Wiki do
it { should validate_presence_of(:content) }
it { should validate_presence_of(:user) }
end
+
+ describe "#last_revisions" do
+ let(:project) { create(:project) }
+ before do
+ %w(p1 p2).each do |title|
+ %w(old new).each do |content|
+ create(:wiki, title: title, slug: title, project: project, content: content)
+ end
+ end
+ end
+ subject(:last_revisions) { project.wikis.last_revisions.all }
+
+ its(:count) { should == 2 }
+ it "should return each page once" do
+ last_revisions.map(&:title).should =~ %w(p1 p2)
+ end
+ end
+
end

View File

@ -0,0 +1,81 @@
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 52715a265bd49e0cc54a0f524351c15a70ea3c66..359d5cdaef52cd27322c9dfd71890c46c9f16bc7 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -160,4 +160,8 @@ module ApplicationHelper
image_tag("authbuttons/#{file_name}",
alt: "Sign in with #{provider.to_s.titleize}")
end
+
+ def analytics_enable?
+ Gitlab.config.analytics.enabled and Rails.env.production?
+ end
end
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index 4a0f60d36c26b5f5eb3a02d44a7da39bacaae04b..013ff6d15e02ea1e0c08b06b391fe865e7ba94f5 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -15,3 +15,4 @@
- if current_controller?(:issues)
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, private_token: current_user.private_token), title: "#{@project.name} issues")
= csrf_meta_tags
+ = render "shared/google_analytics" if analytics_enable?
diff --git a/app/views/shared/_google_analytics.html.haml b/app/views/shared/_google_analytics.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..e8d4b9146680fb4da666d1462881f991bb1661fe
--- /dev/null
+++ b/app/views/shared/_google_analytics.html.haml
@@ -0,0 +1,9 @@
+:javascript
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', '#{ Gitlab.config.analytics.tracking_id }']);
+ _gaq.push(['_trackPageview']);
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index f47625eb132ab304a71e35bf2ccf998fbe413c1f..3a603159cfab83ce078f839cf8c14ddf934dd837 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -1,4 +1,4 @@
-# # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # #
# Gitlab application config file #
# # # # # # # # # # # # # # # # # #
#
@@ -109,3 +109,13 @@ git:
max_size: 5242880 # 5.megabytes
# Git timeout to read commit, in seconds
timeout: 10
+ git_timeout: 10
+
+#
+# 4. Other settings:
+# ==========================
+
+# Google Analytics
+analytics:
+ enabled: false
+ tracking_id: '_your_tracking_id'
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 4fe3ced4d8d1f7021a4e8cc8064a1ceaf74d65bc..6699c7f896781da77ecc4e525a7acf53b12c80cb 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -266,8 +266,6 @@ class Settings < Settingslogic
app['gravatar_ssl_url'] || 'https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm'
end
-
-
def gitlab_on_non_standard_port?
![443, 80].include?(gitlab.port.to_i)
end
@@ -350,3 +348,6 @@ Settings.git['max_size'] ||= Settings.pre_40_config ? Settings.git_max_size : 5
Settings.git['bin_path'] ||= Settings.pre_40_config ? Settings.git_bin_path : '/usr/bin/git'
Settings.git['timeout'] ||= Settings.pre_40_config ? Settings.git_timeout : 10
Settings.git['path'] ||= Settings.git.bin_path # FIXME: Deprecated: remove for 4.1
+
+Settings['analytics'] ||= Settingslogic.new({})
+Settings.analytics['enabled'] ||= false

View File

@ -0,0 +1,190 @@
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -147,9 +147,8 @@ module ApplicationHelper
end
def project_last_activity project
- activity = project.last_activity
- if activity && activity.created_at
- time_ago_in_words(activity.created_at) + " ago"
+ if project.last_activity_date != project.created_at
+ time_ago_in_words(project.last_activity_date) + " ago"
else
"Never"
end
diff --git a/app/models/event.rb b/app/models/event.rb
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -38,7 +38,7 @@ class Event < ActiveRecord::Base
delegate :title, to: :merge_request, prefix: true, allow_nil: true
belongs_to :author, class_name: "User"
- belongs_to :project
+ belongs_to :project, touch: true
belongs_to :target, polymorphic: true
# For Hash only
diff --git a/app/models/project.rb b/app/models/project.rb
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -227,7 +227,8 @@ class Project < ActiveRecord::Base
end
def last_activity_date
- last_event.try(:created_at) || updated_at
+ # touched when any associated event is saved
+ updated_at
end
def project_id
diff --git a/db/migrate/20121227190440_touch_projects_last_activity.rb b/db/migrate/20121227190440_touch_projects_last_activity.rb
--- /dev/null
+++ b/db/migrate/20121227190440_touch_projects_last_activity.rb
@@ -0,0 +1,18 @@
+class TouchProjectsLastActivity < ActiveRecord::Migration
+ def up
+ Project.record_timestamps = false
+
+ Project.find_each do |project|
+ last_event = project.events.order(:created_at).last
+ if last_event and last_event.created_at > project.updated_at
+ project.update_attribute(:updated_at, last_event.created_at)
+ end
+ end
+
+ Project.record_timestamps = true
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20121219095402) do
+ActiveRecord::Schema.define(:version => 20121227190440) do
create_table "events", :force => true do |t|
t.string "target_type"
diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -30,6 +30,17 @@ describe Event do
it { should respond_to(:commits) }
end
+ describe "Save" do
+ let(:event) { create(:event) }
+ let(:project) { create(:project) }
+
+ it "should touch associated project" do
+ event.stub(project: project)
+ event.project.should_receive(:touch)
+ event.save!
+ end
+ end
+
describe "Push event" do
before do
project = create(:project)
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -163,22 +163,18 @@ describe Project do
describe "last_activity methods" do
let(:project) { create(:project) }
- let(:last_event) { double(created_at: Time.now) }
+ let(:last_event) { create(:event) }
describe "last_activity" do
- it "should alias last_activity to last_event"do
+ it "should alias last_activity to last_event" do
project.stub(last_event: last_event)
project.last_activity.should == last_event
end
end
- describe 'last_activity_date' do
- it 'returns the creation date of the project\'s last event if present' do
- project.stub(last_event: last_event)
- project.last_activity_date.should == last_event.created_at
- end
-
- it 'returns the project\'s last update date if it has no events' do
+ describe "last_activity_date" do
+ it "should alias last_activity_date to updated_at" do
+ project.stub(updated_at: Time.now)
project.last_activity_date.should == project.updated_at
end
end
diff --git a/app/roles/authority.rb b/app/roles/authority.rb
--- a/app/roles/authority.rb
+++ b/app/roles/authority.rb
@@ -19,21 +19,25 @@ module Authority
end
def repository_readers
- keys = Key.joins({user: :users_projects}).
- where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::REPORTER)
- keys.map(&:identifier) + deploy_keys.map(&:identifier)
+ repository_members[UsersProject::REPORTER]
end
def repository_writers
- keys = Key.joins({user: :users_projects}).
- where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::DEVELOPER)
- keys.map(&:identifier)
+ repository_members[UsersProject::DEVELOPER]
end
def repository_masters
- keys = Key.joins({user: :users_projects}).
- where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::MASTER)
- keys.map(&:identifier)
+ repository_members[UsersProject::MASTER]
+ end
+
+ def repository_members
+ keys = Hash.new {|h,k| h[k] = [] }
+ UsersProject.select("keys.identifier, project_access").
+ joins(user: :keys).where(project_id: id).
+ each {|row| keys[row.project_access] << [row.identifier] }
+
+ keys[UsersProject::REPORTER] += deploy_keys.pluck(:identifier)
+ keys
end
def allow_read_for?(user)
diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml
--- a/app/views/events/_event.html.haml
+++ b/app/views/events/_event.html.haml
@@ -2,14 +2,14 @@
%div.event-item
%span.cgray.right
#{time_ago_in_words(event.created_at)} ago.
+ - cache event do
+ = image_tag gravatar_icon(event.author_email), class: "avatar s24"
- = image_tag gravatar_icon(event.author_email), class: "avatar s24"
-
- - if event.push?
- = render "events/event/push", event: event
- .clearfix
- - elsif event.note?
- = render "events/event/note", event: event
- - else
- = render "events/event/common", event: event
+ - if event.push?
+ = render "events/event/push", event: event
+ .clearfix
+ - elsif event.note?
+ = render "events/event/note", event: event
+ - else
+ = render "events/event/common", event: event

View File

@ -0,0 +1,141 @@
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 1fcadbfefbaf4d015d68ab7bc349f67becb717df..9d6a9449fcdcfbd138c7f8d4feb1e6b0e5a11926 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -14,6 +14,8 @@ class DashboardController < ApplicationController
@projects.personal(current_user)
when 'joined' then
@projects.joined(current_user)
+ when 'public' then
+ @projects.public_only
else
@projects
end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 2d80c6720b79da74ae9e4d20d816b2433f3082a8..946ec1e1128da3f55ac9b7198b6c0fbdc1d4aba7 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -27,6 +27,8 @@ class Ability
elsif project.guest_access_for?(user)
rules << project_guest_rules
+ elsif project.public?
+ rules << project_public_rules
end
if project.namespace
@@ -104,6 +106,10 @@ class Ability
]
end
+ def project_public_rules
+ project_report_rules
+ end
+
def group_abilities user, group
rules = []
diff --git a/app/models/project.rb b/app/models/project.rb
index 3e5c912e0b47a22cc5489b9cbfb1dd53da5095e9..f10a6afde27ce4226677c0aa28aabd7497fb4a9d 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -30,7 +30,7 @@ class Project < ActiveRecord::Base
class TransferError < StandardError; end
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
- :wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
+ :wall_enabled, :merge_requests_enabled, :wiki_enabled, :private_flag, as: [:default, :admin]
attr_accessible :namespace_id, :owner_id, as: :admin
@@ -87,7 +87,7 @@ class Project < ActiveRecord::Base
class << self
def authorized_for user
projects = includes(:users_projects, :namespace)
- projects = projects.where("users_projects.user_id = :user_id or projects.owner_id = :user_id or namespaces.owner_id = :user_id", user_id: user.id)
+ projects = projects.where("users_projects.user_id = :user_id or projects.owner_id = :user_id or namespaces.owner_id = :user_id or projects.private_flag = false", user_id: user.id)
end
def active
diff --git a/app/roles/authority.rb b/app/roles/authority.rb
--- a/app/roles/authority.rb
+++ b/app/roles/authority.rb
@@ -20,2 +20,3 @@ module Authority
def repository_readers
+ return ['@all'] if public?
diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml
index 27c22872d501456bc4b7fd4bfd2a31c45b0a0a53..793f6a22ac3a96540c4f18e518d2197de51482bf 100644
--- a/app/views/admin/projects/_form.html.haml
+++ b/app/views/admin/projects/_form.html.haml
@@ -24,6 +24,10 @@
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, project.heads.map(&:name), {}, style: "width:210px;")
+ .clearfix
+ = f.label :private_flag, "Private"
+ .input= f.check_box :private_flag
+
%fieldset.adv_settings
%legend Features:
diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml
index 634b1836754a026cd26a32a30e4b0745629fc1e5..7bcedf6156e341ce7be48bee56cf1087ba63ccdb 100644
--- a/app/views/admin/projects/show.html.haml
+++ b/app/views/admin/projects/show.html.haml
@@ -102,6 +102,13 @@
%td
= check_box_tag :post_receive_file, 1, @project.has_post_receive_file?, disabled: true
+ %tr
+ %td
+ %b
+ Private:
+ %td
+ = check_box_tag :private_flag, 1, @project.private?, disabled: true
+
%br
%h5
Team
diff --git a/app/views/dashboard/_projects.html.haml b/app/views/dashboard/_projects.html.haml
index cffafb5445c2b476018974c500f3e924dd8ee9c7..058e13f1741a52aedf7632052f745bf52ee00bbe 100644
--- a/app/views/dashboard/_projects.html.haml
+++ b/app/views/dashboard/_projects.html.haml
@@ -15,6 +15,8 @@
= link_to "Personal", dashboard_path(scope: 'personal')
= nav_tab :scope, 'joined' do
= link_to "Joined", dashboard_path(scope: 'joined')
+ = nav_tab :scope, 'public' do
+ = link_to "Public", dashboard_path(scope: 'public')
%ul.well-list
- projects.each do |project|
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index 7044d1f20be1183c446de80268903f3018b7646e..2073b78d0606b688ffda69209130a4fb9f6d513c 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -23,6 +23,11 @@
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;")
+ .control-group
+ = f.label :private_flag, "Private"
+ .controls
+ = f.check_box :private_flag
+
%fieldset.features
%legend Features:
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 83a769760987b719e10892723c78ae797bed01d0..31ce053a7657d3d834a99d33faa5c6ebdfa03fbe 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -42,7 +42,7 @@ describe Project do
describe "Mass assignment" do
it { should_not allow_mass_assignment_of(:namespace_id) }
it { should_not allow_mass_assignment_of(:owner_id) }
- it { should_not allow_mass_assignment_of(:private_flag) }
+ it { should allow_mass_assignment_of(:private_flag) }
end
describe "Validation" do

View File

@ -0,0 +1,105 @@
--- a/Gemfile 2012-12-23 12:58:41.000000000 +0100
+++ b/Gemfile 2013-01-02 01:05:20.267204968 +0100
@@ -14,6 +14,9 @@
gem "mysql2", group: :mysql
gem "pg", group: :postgres
+# Cache store adapter for Memcached
+gem "dalli", group: :memcached
+
# Auth
gem "devise", "~> 2.1.0"
gem 'omniauth', "~> 1.1.1"
@@ -28,8 +31,12 @@
gem 'grack', git: "https://github.com/gitlabhq/grack.git", ref: 'ba46f3b0845c6a09d488ae6abdce6ede37e227e8'
gem 'grit_ext', git: "https://github.com/gitlabhq/grit_ext.git", ref: '8e6afc2da821354774aa4d1ee8a1aa2082f84a3e'
+# Patched to fix issues with compiling on Gentoo
+gem "charlock_holmes", git: "https://github.com/ISSIntel/charlock_holmes.git", ref: '994dcf37aba066250750866e13bb51e3d5e72898'
+
# Gitolite client (for work with gitolite-admin repo)
-gem "gitolite", '1.1.0'
+# Forked version with important performance patch (will be merged to upstream soon)
+gem "gitolite", git: "git://github.com/jirutka/gitolite.git", ref: '75d64ea15aa51557034fae44c578438f85249f1e'
# Syntax highlighter
gem "pygments.rb", git: "https://github.com/gitlabhq/pygments.rb.git", branch: "master"
--- a/Gemfile.lock 2012-12-23 12:58:41.000000000 +0100
+++ b/Gemfile.lock 2013-01-02 01:05:20.271204975 +0100
@@ -1,4 +1,14 @@
GIT
+ remote: git://github.com/jirutka/gitolite.git
+ revision: 75d64ea15aa51557034fae44c578438f85249f1e
+ ref: 75d64ea15aa51557034fae44c578438f85249f1e
+ specs:
+ gitolite (1.1.0)
+ gratr19 (~> 0.4.4.1)
+ grit (~> 2.5.0)
+ hashery (~> 1.5.0)
+
+GIT
remote: https://github.com/bmabey/database_cleaner.git
revision: f89c34300e114be99532f14c115b2799a3380ac6
ref: f89c34300e114be99532f14c115b2799a3380ac6
@@ -6,6 +16,13 @@
database_cleaner (0.9.1)
GIT
+ remote: https://github.com/ISSIntel/charlock_holmes.git
+ revision: 994dcf37aba066250750866e13bb51e3d5e72898
+ ref: 994dcf37aba066250750866e13bb51e3d5e72898
+ specs:
+ charlock_holmes (0.6.9)
+
+GIT
remote: https://github.com/ctran/annotate_models.git
revision: be4e26825b521f0b2d86b181e2dff89901aa9b1e
specs:
@@ -129,7 +146,6 @@
carrierwave (0.7.1)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
- charlock_holmes (0.6.9)
childprocess (0.3.6)
ffi (~> 1.0, >= 1.0.6)
chosen-rails (0.9.8)
@@ -147,6 +163,7 @@
colorize (0.5.8)
crack (0.3.1)
daemons (1.1.9)
+ dalli (2.6.0)
devise (2.1.2)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.1)
@@ -190,10 +207,6 @@
pygments.rb (>= 0.2.13)
github-markup (0.7.4)
gitlab_meta (4.0)
- gitolite (1.1.0)
- gratr19 (~> 0.4.4.1)
- grit (~> 2.5.0)
- hashery (~> 1.5.0)
grape (0.2.2)
activesupport
hashie (~> 1.2)
@@ -461,9 +474,11 @@
bootstrap-sass (= 2.2.1.1)
capybara
carrierwave (~> 0.7.1)
+ charlock_holmes!
chosen-rails (= 0.9.8)
coffee-rails (~> 3.2.2)
colored
+ dalli
database_cleaner!
devise (~> 2.1.0)
draper (~> 0.18.0)
@@ -477,7 +492,7 @@
github-linguist (~> 2.3.4)
github-markup (~> 0.7.4)
gitlab_meta (= 4.0)
- gitolite (= 1.1.0)
+ gitolite!
grack!
grape (~> 0.2.1)
grit!

View File

@ -0,0 +1,82 @@
--- a/Gemfile 2013-09-10 00:16:33.951426871 +0200
+++ b/Gemfile 2013-09-10 01:02:00.745109650 +0200
@@ -120,11 +120,14 @@
# Sanitize user input
gem "sanitize"
+# The newer revision of charlock_holmes that is finally fixed to
+# be compatible with Gentoo
+gem "charlock_holmes", git: "https://github.com/brianmario/charlock_holmes.git", ref: "dde194609b3513b0d2369ce8f916ae52566154b4"
+
group :assets do
gem "sass-rails"
gem "coffee-rails"
gem "uglifier"
- gem "therubyracer"
gem 'turbolinks'
gem 'jquery-turbolinks'
--- a/Gemfile.lock 2013-09-10 00:16:40.079441559 +0200
+++ b/Gemfile.lock 2013-09-10 01:03:51.837297421 +0200
@@ -1,4 +1,11 @@
GIT
+ remote: https://github.com/brianmario/charlock_holmes.git
+ revision: dde194609b3513b0d2369ce8f916ae52566154b4
+ ref: dde194609b3513b0d2369ce8f916ae52566154b4
+ specs:
+ charlock_holmes (0.6.9.4)
+
+GIT
remote: https://github.com/ctran/annotate_models.git
revision: 18a4e2eb77c8f3ef695b563e4a7ca45dfede819b
specs:
@@ -69,7 +76,6 @@
activesupport (>= 3.2.0)
celluloid (0.14.1)
timers (>= 1.0.0)
- charlock_holmes (0.6.9.4)
childprocess (0.3.9)
ffi (~> 1.0, >= 1.0.11)
chosen-rails (1.0.0)
@@ -271,7 +277,6 @@
addressable (~> 2.3)
letter_opener (1.1.1)
launchy (~> 2.2)
- libv8 (3.11.8.17)
listen (1.2.2)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
@@ -407,7 +412,6 @@
redis-store (~> 1.1.0)
redis-store (1.1.3)
redis (>= 2.2.0)
- ref (1.0.5)
rest-client (1.6.7)
mime-types (>= 1.16)
rspec (2.13.0)
@@ -493,9 +497,6 @@
stringex (1.5.1)
temple (0.6.5)
test_after_commit (0.2.0)
- therubyracer (0.11.4)
- libv8 (~> 3.11.8.12)
- ref
thin (1.5.1)
daemons (>= 1.0.9)
eventmachine (>= 0.12.6)
@@ -556,6 +557,7 @@
bootstrap-sass
capybara
carrierwave
+ charlock_holmes!
chosen-rails (= 1.0.0)
coffee-rails
colored
@@ -634,7 +636,6 @@
stamp
state_machine
test_after_commit
- therubyracer
thin
tinder (~> 1.9.2)
turbolinks

View File

@ -0,0 +1,32 @@
diff --git a/lib/gitlab/regex.rb b/lib/gitlab/regex.rb
index b4be46d..2120f5a 100644
--- a/lib/gitlab/regex.rb
+++ b/lib/gitlab/regex.rb
@@ -1,3 +1,5 @@
+# encoding: utf-8
+
module Gitlab
module Regex
extend self
@@ -7,7 +9,7 @@ module Gitlab
end
def project_name_regex
- /\A[a-zA-Z0-9][a-zA-Z0-9_\-\. ]*\z/
+ /\A\p{Word}[\p{Word}\-:\. ]*\z/
end
def name_regex
diff --git a/app/models/project.rb b/app/models/project.rb
index d8fa6cb..c4e5427 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -73,7 +73,7 @@ class Project < ActiveRecord::Base
validates :description, length: { within: 0..2000 }
validates :name, presence: true, length: { within: 0..255 },
format: { with: Gitlab::Regex.project_name_regex,
- message: "only letters, digits, spaces & '_' '-' '.' allowed. Letter or digit should be first" }
+ message: "only letters, digits, spaces & '_' '-' '.' ':' allowed. Letter or digit should be first" }
validates :path, presence: true, length: { within: 0..255 },
exclusion: { in: Gitlab::Blacklist.path },
format: { with: Gitlab::Regex.path_regex,

View File

@ -0,0 +1,20 @@
diff --git a/config/environments/production.rb b/gitlab-6/environments/production.rb
index 82eb250..10e25e5 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -73,11 +73,10 @@ Gitlab::Application.configure do
# config.active_record.auto_explain_threshold_in_seconds = 0.5
config.action_mailer.delivery_method = :sendmail
- # Defaults to:
- # # config.action_mailer.sendmail_settings = {
- # # location: '/usr/sbin/sendmail',
- # # arguments: '-i -t'
- # # }
+ config.action_mailer.sendmail_settings = {
+ location: '/usr/sbin/sendmail',
+ arguments: '-i'
+ }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
end

View File

@ -0,0 +1,207 @@
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 59a4d1f..e48dfe7 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -103,6 +103,10 @@ production: &base
bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
password: '_the_password_of_the_bind_user'
allow_username_or_email_login: true
+ mapping:
+ name: 'cn'
+ username: 'uid'
+ email: 'mail'
## OmniAuth settings
omniauth:
@@ -131,7 +135,14 @@ production: &base
# - { name: 'github', app_id: 'YOUR APP ID',
# app_secret: 'YOUR APP SECRET' }
-
+ ## User Mapping Procs
+ # These procs allow for custom mapping of user information from LDAP / Omniauth
+ # onto your user model.
+ #
+ # user_mapping:
+ # name: ->(auth) { auth.info.name.to_s }
+ # username: ->(auth) { auth.info.email.to_s.downcase.match(/^[^@]*/)[0] }
+ # email: ->(auth) { auth.info.email.to_s.downcase }
#
# 3. Advanced settings
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index e0207c6..c079cc4 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -36,6 +36,7 @@ end
# Default settings
Settings['ldap'] ||= Settingslogic.new({})
+Settings.ldap['mapping'] ||= Settingslogic.new({})
Settings.ldap['enabled'] = false if Settings.ldap['enabled'].nil?
Settings.ldap['allow_username_or_email_login'] = false if Settings.ldap['allow_username_or_email_login'].nil?
diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb
index de70c5c..bea8191 100644
--- a/lib/gitlab/auth.rb
+++ b/lib/gitlab/auth.rb
@@ -33,13 +33,14 @@ module Gitlab
def create_from_omniauth(auth, ldap = false)
provider = auth.provider
uid = auth.info.uid || auth.uid
- uid = uid.to_s.force_encoding("utf-8")
- name = auth.info.name.to_s.force_encoding("utf-8")
- email = auth.info.email.to_s.downcase unless auth.info.email.nil?
+ uid = uid.to_s.force_encoding('utf-8')
+ name = extract(:name, auth, ldap).force_encoding('utf-8')
+ username = extract(:username, auth, ldap).force_encoding('utf-8')
+ email = extract(:email, auth, ldap).force_encoding('utf-8')
ldap_prefix = ldap ? '(LDAP) ' : ''
raise OmniAuth::Error, "#{ldap_prefix}#{provider} does not provide an email"\
- " address" if auth.info.email.blank?
+ " address" if email.blank?
log.info "#{ldap_prefix}Creating user from #{provider} login"\
" {uid => #{uid}, name => #{name}, email => #{email}}"
@@ -48,7 +49,7 @@ module Gitlab
extern_uid: uid,
provider: provider,
name: name,
- username: email.match(/^[^@]*/)[0],
+ username: username,
email: email,
password: password,
password_confirmation: password,
@@ -101,5 +102,31 @@ module Gitlab
def ldap_conf
@ldap_conf ||= Gitlab.config.ldap
end
+
+ private
+
+ def extract(field_name, auth, ldap = false)
+ @ldap_mapper ||= Gitlab.config.ldap.mapping rescue Hash.new
+ @mapper ||= begin
+ defaults = {
+ name: ->(auth) { auth.info.name.to_s },
+ username: ->(auth) { auth.info.email.to_s.downcase.match(/^[^@]*/)[0] },
+ email: ->(auth) { auth.info.email.to_s.downcase },
+ }
+ extras = Gitlab.config.user_mapping rescue Hash.new
+ defaults.merge(extras)
+ end
+
+ if ldap && !@ldap_mapper[field_name].nil?
+ begin
+ ldap_attr = @ldap_mapper[field_name].to_sym
+ Array(auth.extra.raw_info[ldap_attr])[0]
+ rescue
+ raise "(LDAP) Failed to get '#{@ldap_mapper[field_name]}' for #{field_name} for #{auth.info.uid}"
+ end
+ else
+ @mapper[field_name].call(auth)
+ end
+ end
end
end
diff --git a/spec/lib/auth_spec.rb b/spec/lib/auth_spec.rb
index 903d276..cf9e7b7 100644
--- a/spec/lib/auth_spec.rb
+++ b/spec/lib/auth_spec.rb
@@ -4,7 +4,7 @@ describe Gitlab::Auth do
let(:gl_auth) { Gitlab::Auth.new }
before do
- Gitlab.config.stub(omniauth: {})
+ Gitlab.config.stub(omniauth: {}, ldap: {})
@info = mock(
uid: '12djsak321',
@@ -74,9 +74,22 @@ describe Gitlab::Auth do
end
describe :create_from_omniauth do
+ before do
+ @raw_info = {
+ cn: 'John Black',
+ mail: [ 'john.black@email.com' ],
+ nickname: 'jonny'
+ }
+
+ @ldap_auth = mock(
+ info: @info,
+ extra: mock(raw_info: @raw_info),
+ provider: 'ldap'
+ )
+ end
+
it "should create user from LDAP" do
- @auth = mock(info: @info, provider: 'ldap')
- user = gl_auth.create_from_omniauth(@auth, true)
+ user = gl_auth.create_from_omniauth(@ldap_auth, true)
user.should be_valid
user.extern_uid.should == @info.uid
@@ -92,9 +105,59 @@ describe Gitlab::Auth do
user.provider.should == 'twitter'
end
+ it "should still import without extra mapping" do
+ Gitlab.config.stub(omniauth: {})
+ user = gl_auth.create_from_omniauth(@ldap_auth, true)
+
+ user.should be_valid
+ user.extern_uid.should == @info.uid
+ user.provider.should == 'ldap'
+ end
+
+ it "should have user details from procs" do
+ Gitlab.config.stub(omniauth: {}, user_mapping: {})
+ Gitlab.config.user_mapping[:name] = ->(auth) { 'TestName' }
+ Gitlab.config.user_mapping[:email] = ->(auth) { 'email@somewhere.com' }
+ Gitlab.config.user_mapping[:username] = ->(auth) { 'TestUsername' }
+
+ user = gl_auth.create_from_omniauth(@ldap_auth, true)
+ user.should be_valid
+ user.extern_uid.should == @info.uid
+ user.name.should == 'TestName'
+ user.email.should == 'email@somewhere.com'
+ user.username.should == 'TestUsername'
+ end
+
+ it "should modify value using proc" do
+ Gitlab.config.stub(omniauth: {}, user_mapping: {})
+ Gitlab.config.user_mapping[:username] = ->(auth) { auth.info.email.to_s.downcase.split('@').first }
+
+ user = gl_auth.create_from_omniauth(@ldap_auth, true)
+ user.should be_valid
+ user.extern_uid.should == @info.uid
+ user.username.should == 'john'
+ end
+
+ it "should be able to use raw ldap information through simple ldap mapping" do
+ Gitlab.config.ldap.stub(mapping: { name: 'cn', email: 'mail' })
+
+ user = gl_auth.create_from_omniauth(@ldap_auth, true)
+ user.should be_valid
+ user.extern_uid.should == @info.uid
+ user.name.should == 'John Black'
+ user.email.should == 'john.black@email.com'
+ end
+
+ it "should raise an error if an invalid field is in ldap mapping" do
+ Gitlab.config.ldap.stub(mapping: { name: 'invalid' })
+
+ expect {
+ gl_auth.create_from_omniauth(@ldap_auth, true)
+ }.to raise_error
+ end
+
it "should apply defaults to user" do
- @auth = mock(info: @info, provider: 'ldap')
- user = gl_auth.create_from_omniauth(@auth, true)
+ user = gl_auth.create_from_omniauth(@ldap_auth, true)
user.should be_valid
user.projects_limit.should == Gitlab.config.gitlab.default_projects_limit

View File

@ -0,0 +1,39 @@
diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb
index aec4c57..eec1480 100644
--- a/app/mailers/notify.rb
+++ b/app/mailers/notify.rb
@@ -16,7 +16,7 @@ class Notify < ActionMailer::Base
default_url_options[:script_name] = Gitlab.config.gitlab.relative_url_root
default from: Gitlab.config.gitlab.email_from
- default reply_to: "noreply@#{Gitlab.config.gitlab.host}"
+ default reply_to: Gitlab.config.gitlab.email_reply_to
# Just send email with 3 seconds delay
def self.delay
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index c63e8cb..776d930 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -37,6 +37,9 @@ production: &base
# Email address used in the "From" field in mails sent by GitLab
email_from: gitlab@localhost
+ # Email address used in the "Reply-To" field in mails send by GitLab (default: no-reply@<host>)
+ email_reply_to: no-reply@localhost
+
# Email address of your support contact (default: same as email_from)
support_email: support@localhost
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index ea391ca..580d65b 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -82,6 +82,7 @@ Settings.gitlab['port'] ||= Settings.gitlab.https ? 443 : 80
Settings.gitlab['relative_url_root'] ||= ENV['RAILS_RELATIVE_URL_ROOT'] || ''
Settings.gitlab['protocol'] ||= Settings.gitlab.https ? "https" : "http"
Settings.gitlab['email_from'] ||= "gitlab@#{Settings.gitlab.host}"
+Settings.gitlab['email_reply_to'] ||= "no-reply@#{Settings.gitlab.host}"
Settings.gitlab['support_email'] ||= Settings.gitlab.email_from
Settings.gitlab['url'] ||= Settings.send(:build_gitlab_url)
Settings.gitlab['user'] ||= 'git'

View File

@ -0,0 +1,84 @@
--- a/Gemfile
+++ b/Gemfile
@@ -137,13 +137,16 @@
# Sanitize user input
gem "sanitize"
+# The newer revision of charlock_holmes that is finally fixed to
+# be compatible with Gentoo
+gem "charlock_holmes", git: "https://github.com/brianmario/charlock_holmes.git", ref: "dde194609b3513b0d2369ce8f916ae52566154b4"
+
# Protect against bruteforcing
gem "rack-attack"
gem "sass-rails"
gem "coffee-rails"
gem "uglifier"
-gem "therubyracer"
gem 'turbolinks'
gem 'jquery-turbolinks'
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,4 +1,11 @@
GIT
+ remote: https://github.com/brianmario/charlock_holmes.git
+ revision: dde194609b3513b0d2369ce8f916ae52566154b4
+ ref: dde194609b3513b0d2369ce8f916ae52566154b4
+ specs:
+ charlock_holmes (0.6.9.4)
+
+GIT
remote: https://github.com/gitlabhq/markup.git
revision: 61ade389c1e1c159359338f570d18464a44ddbc4
ref: 61ade389c1e1c159359338f570d18464a44ddbc4
@@ -70,7 +77,6 @@
json (>= 1.7)
celluloid (0.15.2)
timers (~> 1.1.0)
- charlock_holmes (0.6.9.4)
cliver (0.2.2)
code_analyzer (0.4.3)
sexp_processor
@@ -267,7 +273,6 @@
addressable (~> 2.3)
letter_opener (1.1.2)
launchy (~> 2.2)
- libv8 (3.16.14.3)
listen (2.3.1)
celluloid (>= 0.15.2)
rb-fsevent (>= 0.9.3)
@@ -401,7 +406,6 @@
redis-store (~> 1.1.0)
redis-store (1.1.4)
redis (>= 2.2)
- ref (1.0.5)
require_all (1.3.2)
rest-client (1.6.7)
mime-types (>= 1.16)
@@ -488,9 +492,6 @@
term-ansicolor (1.2.2)
tins (~> 0.8)
test_after_commit (0.2.2)
- therubyracer (0.12.0)
- libv8 (~> 3.16.14.0)
- ref
thin (1.6.1)
daemons (>= 1.0.9)
eventmachine (>= 1.0.0)
@@ -561,6 +562,7 @@
bootstrap-sass (~> 3.0)
capybara
carrierwave
+ charlock_holmes!
coffee-rails
colored
coveralls
@@ -644,7 +646,6 @@
stamp
state_machine
test_after_commit
- therubyracer
thin
tinder (~> 1.9.2)
turbolinks

View File

@ -0,0 +1,20 @@
diff --git a/lib/gitlab/ldap/user.rb b/lib/gitlab/ldap/user.rb
index 59f0fa6..8afd64f 100644
--- a/lib/gitlab/ldap/user.rb
+++ b/lib/gitlab/ldap/user.rb
@@ -83,8 +83,14 @@ module Gitlab
private
+ # Override superclass method to use our case-insensitive find_by_uid
+ def find_by_uid_and_provider
+ find_by_uid(uid)
+ end
+
def find_by_uid(uid)
- model.where(provider: provider, extern_uid: uid).last
+ # LDAP distinguished name is case-insensitive
+ model.where("provider = ? and lower(extern_uid) = ?", provider, uid.downcase).last
end
def provider

View File

@ -0,0 +1,28 @@
--- a/lib/gitlab/regex.rb
+++ b/lib/gitlab/regex.rb
@@ -1,3 +1,5 @@
+# encoding: utf-8
+
module Gitlab
module Regex
extend self
@@ -7,7 +9,7 @@
end
def project_name_regex
- /\A[a-zA-Z0-9][a-zA-Z0-9_\-\. ]*\z/
+ /\A\p{Word}[\p{Word}\-:\. ]*\z/
end
def name_regex
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -85,7 +85,7 @@
validates :description, length: { maximum: 2000 }, allow_blank: true
validates :name, presence: true, length: { within: 0..255 },
format: { with: Gitlab::Regex.project_name_regex,
- message: "only letters, digits, spaces & '_' '-' '.' allowed. Letter or digit should be first" }
+ message: "only letters, digits, spaces & '_' '-' '.' ':' allowed. Letter or digit should be first" }
validates :path, presence: true, length: { within: 0..255 },
exclusion: { in: Gitlab::Blacklist.path },
format: { with: Gitlab::Regex.path_regex,

View File

@ -0,0 +1,99 @@
diff --git a/Gemfile b/Gemfile
index fe8e54e..b33a74e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -36,7 +36,8 @@ gem "gitlab_git", "~> 4.0.0"
gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack'
# LDAP Auth
-gem 'gitlab_omniauth-ldap', '1.0.3', require: "omniauth-ldap"
+# Patched for attributes mapping customization
+gem 'gitlab_omniauth-ldap', '1.0.4', require: 'omniauth-ldap', git: 'https://github.com/jirutka/omniauth-ldap.git', ref: 'b55852bfc9b46ecf790a2c5526386702350eab89'
# Syntax highlighter
gem "gitlab-pygments.rb", '~> 0.5.4', require: 'pygments.rb'
diff --git a/Gemfile.lock b/Gemfile.lock
index d0f185b..46543e3 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -6,6 +6,17 @@ GIT
charlock_holmes (0.6.9.4)
GIT
+ remote: https://github.com/jirutka/omniauth-ldap.git
+ revision: b55852bfc9b46ecf790a2c5526386702350eab89
+ ref: b55852bfc9b46ecf790a2c5526386702350eab89
+ specs:
+ gitlab_omniauth-ldap (1.0.4)
+ net-ldap (~> 0.3.1)
+ omniauth (~> 1.0)
+ pyu-ruby-sasl (~> 0.0.3.1)
+ rubyntlm (~> 0.1.1)
+
+GIT
remote: https://github.com/gitlabhq/markup.git
revision: 61ade389c1e1c159359338f570d18464a44ddbc4
ref: 61ade389c1e1c159359338f570d18464a44ddbc4
@@ -193,11 +204,6 @@ GEM
gitlab-linguist (~> 2.9.5)
gitlab-pygments.rb (~> 0.5.4)
gitlab_meta (6.0)
- gitlab_omniauth-ldap (1.0.3)
- net-ldap (~> 0.3.1)
- omniauth (~> 1.0)
- pyu-ruby-sasl (~> 0.0.3.1)
- rubyntlm (~> 0.1.1)
gon (5.0.1)
actionpack (>= 2.3.0)
json
@@ -587,7 +593,7 @@ DEPENDENCIES
gitlab-pygments.rb (~> 0.5.4)
gitlab_git (~> 4.0.0)
gitlab_meta (= 6.0)
- gitlab_omniauth-ldap (= 1.0.3)
+ gitlab_omniauth-ldap (= 1.0.4)!
gon (~> 5.0.0)
grape (~> 0.6.1)
grape-entity (~> 0.3.0)
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 776d930..a5b96e4 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -130,6 +130,10 @@ production: &base
method: 'ssl' # "ssl" or "plain"
bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
password: '_the_password_of_the_bind_user'
+ mapping:
+ username: 'uid'
+ name: 'cn'
+ email: 'mail'
# If allow_username_or_email_login is enabled, GitLab will ignore everything
# after the first '@' in the LDAP username submitted by the user on login.
#
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index 2539097..739de8e 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -223,6 +223,7 @@ Devise.setup do |config|
method: Gitlab.config.ldap['method'],
bind_dn: Gitlab.config.ldap['bind_dn'],
password: Gitlab.config.ldap['password'],
+ mapping: Gitlab.config.ldap['mapping'],
name_proc: email_stripping_proc
end
diff --git a/lib/gitlab/ldap/user.rb b/lib/gitlab/ldap/user.rb
index 8afd64f..f1f1bea 100644
--- a/lib/gitlab/ldap/user.rb
+++ b/lib/gitlab/ldap/user.rb
@@ -97,6 +97,10 @@ module Gitlab
'ldap'
end
+ def username
+ (auth.info.username || auth.info.nickname).to_s.force_encoding('utf-8')
+ end
+
def raise_error(message)
raise OmniAuth::Error, "(LDAP) " + message
end

View File

@ -0,0 +1,33 @@
--- app/mailers/notify.rb.orig 2014-05-18 18:48:35.150000000 +0200
+++ app/mailers/notify.rb 2014-05-18 18:49:20.480000000 +0200
@@ -16,7 +16,7 @@
default_url_options[:script_name] = Gitlab.config.gitlab.relative_url_root
default from: Gitlab.config.gitlab.email_from
- default reply_to: "noreply@#{Gitlab.config.gitlab.host}"
+ default reply_to: Gitlab.config.gitlab.email_reply_to
# Just send email with 3 seconds delay
def self.delay
--- config/gitlab.yml.example.orig 2014-05-18 18:49:50.880000000 +0200
+++ config/gitlab.yml.example 2014-05-18 18:50:28.350000000 +0200
@@ -37,6 +37,9 @@
# Email address used in the "From" field in mails sent by GitLab
email_from: gitlab@localhost
+ # Email address used in the "Reply-To" field in mails send by GitLab (default: no-reply@<host>)
+ email_reply_to: no-reply@localhost
+
# Email address of your support contact (default: same as email_from)
support_email: support@localhost
--- config/initializers/1_settings.rb.orig 2014-05-18 18:50:52.300000000 +0200
+++ config/initializers/1_settings.rb 2014-05-18 18:51:29.860000000 +0200
@@ -78,6 +78,7 @@
Settings.gitlab['relative_url_root'] ||= ENV['RAILS_RELATIVE_URL_ROOT'] || ''
Settings.gitlab['protocol'] ||= Settings.gitlab.https ? "https" : "http"
Settings.gitlab['email_from'] ||= "gitlab@#{Settings.gitlab.host}"
+Settings.gitlab['email_reply_to'] ||= "no-reply@#{Settings.gitlab.host}"
Settings.gitlab['support_email'] ||= Settings.gitlab.email_from
Settings.gitlab['url'] ||= Settings.send(:build_gitlab_url)
Settings.gitlab['user'] ||= 'git'

View File

@ -0,0 +1,85 @@
--- Gemfile.orig 2014-05-18 18:05:50.320000000 +0200
+++ Gemfile 2014-05-18 18:06:59.040000000 +0200
@@ -133,6 +133,10 @@
# Sanitize user input
gem "sanitize"
+# The newer revision of charlock_holmes that is finally fixed to
+# be compatible with Gentoo
+gem "charlock_holmes", git: "https://github.com/brianmario/charlock_holmes.git", ref: "dde194609b3513b0d2369ce8f916ae52566154b4"
+
# Protect against bruteforcing
gem "rack-attack"
@@ -142,7 +146,6 @@
gem "sass-rails"
gem "coffee-rails"
gem "uglifier"
-gem "therubyracer"
gem 'turbolinks'
gem 'jquery-turbolinks'
--- Gemfile.lock.orig 2014-05-18 18:07:31.730000000 +0200
+++ Gemfile.lock 2014-05-18 18:25:30.580000000 +0200
@@ -1,4 +1,11 @@
GIT
+ remote: https://github.com/brianmario/charlock_holmes.git
+ revision: dde194609b3513b0d2369ce8f916ae52566154b4
+ ref: dde194609b3513b0d2369ce8f916ae52566154b4
+ specs:
+ charlock_holmes (0.6.9.4)
+
+GIT
remote: https://github.com/gitlabhq/markup.git
revision: 61ade389c1e1c159359338f570d18464a44ddbc4
ref: 61ade389c1e1c159359338f570d18464a44ddbc4
@@ -71,7 +78,6 @@
json (>= 1.7)
celluloid (0.15.2)
timers (~> 1.1.0)
- charlock_holmes (0.6.9.4)
cliver (0.2.2)
code_analyzer (0.4.3)
sexp_processor
@@ -264,7 +270,6 @@
addressable (~> 2.3)
letter_opener (1.1.2)
launchy (~> 2.2)
- libv8 (3.16.14.3)
listen (2.3.1)
celluloid (>= 0.15.2)
rb-fsevent (>= 0.9.3)
@@ -398,7 +403,6 @@
redis-store (~> 1.1.0)
redis-store (1.1.4)
redis (>= 2.2)
- ref (1.0.5)
require_all (1.3.2)
rest-client (1.6.7)
mime-types (>= 1.16)
@@ -491,9 +495,6 @@
term-ansicolor (1.2.2)
tins (~> 0.8)
test_after_commit (0.2.2)
- therubyracer (0.12.0)
- libv8 (~> 3.16.14.0)
- ref
thin (1.6.1)
daemons (>= 1.0.9)
eventmachine (>= 1.0.0)
@@ -563,6 +564,7 @@
bootstrap-sass (~> 3.0)
capybara
carrierwave
+ charlock_holmes!
coffee-rails
colored
coveralls
@@ -648,7 +650,6 @@
stamp
state_machine
test_after_commit
- therubyracer
thin
tinder (~> 1.9.2)
turbolinks

View File

@ -0,0 +1,20 @@
diff --git a/lib/gitlab/ldap/user.rb b/lib/gitlab/ldap/user.rb
index 59f0fa6..8afd64f 100644
--- a/lib/gitlab/ldap/user.rb
+++ b/lib/gitlab/ldap/user.rb
@@ -83,8 +83,14 @@ module Gitlab
private
+ # Override superclass method to use our case-insensitive find_by_uid
+ def find_by_uid_and_provider
+ find_by_uid(uid)
+ end
+
def find_by_uid(uid)
- model.where(provider: provider, extern_uid: uid).last
+ # LDAP distinguished name is case-insensitive
+ model.where("provider = ? and lower(extern_uid) = ?", provider, uid.downcase).last
end
def provider

View File

@ -0,0 +1,28 @@
--- a/lib/gitlab/regex.rb
+++ b/lib/gitlab/regex.rb
@@ -1,3 +1,5 @@
+# encoding: utf-8
+
module Gitlab
module Regex
extend self
@@ -7,7 +9,7 @@
end
def project_name_regex
- /\A[a-zA-Z0-9][a-zA-Z0-9_\-\. ]*\z/
+ /\A\p{Word}[\p{Word}\-:\. ]*\z/
end
def name_regex
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -85,7 +85,7 @@
validates :description, length: { maximum: 2000 }, allow_blank: true
validates :name, presence: true, length: { within: 0..255 },
format: { with: Gitlab::Regex.project_name_regex,
- message: "only letters, digits, spaces & '_' '-' '.' allowed. Letter or digit should be first" }
+ message: "only letters, digits, spaces & '_' '-' '.' ':' allowed. Letter or digit should be first" }
validates :path, presence: true, length: { within: 0..255 },
exclusion: { in: Gitlab::Blacklist.path },
format: { with: Gitlab::Regex.path_regex,

View File

@ -0,0 +1,89 @@
--- Gemfile.orig 2014-05-18 18:41:03.150000000 +0200
+++ Gemfile 2014-05-18 18:41:42.840000000 +0200
@@ -35,7 +35,8 @@
gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack'
# LDAP Auth
-gem 'gitlab_omniauth-ldap', '1.0.4', require: "omniauth-ldap"
+# Patched for attributes mapping customization
+gem 'gitlab_omniauth-ldap', '1.0.4', require: 'omniauth-ldap', git: 'https://github.com/jirutka/omniauth-ldap.git', ref: 'b55852bfc9b46ecf790a2c5526386702350eab89'
# Git Wiki
gem "gitlab-gollum-lib", "~> 1.1.0", require: 'gollum-lib'
--- Gemfile.lock.orig 2014-05-18 18:42:08.100000000 +0200
+++ Gemfile.lock 2014-05-18 18:43:35.330000000 +0200
@@ -5,6 +5,17 @@
specs:
charlock_holmes (0.6.9.4)
+ GIT
+ remote: https://github.com/jirutka/omniauth-ldap.git
+ revision: b55852bfc9b46ecf790a2c5526386702350eab89
+ ref: b55852bfc9b46ecf790a2c5526386702350eab89
+ specs:
+ gitlab_omniauth-ldap (1.0.4)
+ net-ldap (~> 0.3.1)
+ omniauth (~> 1.0)
+ pyu-ruby-sasl (~> 0.0.3.1)
+ rubyntlm (~> 0.1.1)
+
GIT
remote: https://github.com/gitlabhq/markup.git
revision: 61ade389c1e1c159359338f570d18464a44ddbc4
@@ -190,11 +201,6 @@
gitlab-linguist (~> 3.0.0)
rugged (~> 0.19.0)
gitlab_meta (6.0)
- gitlab_omniauth-ldap (1.0.4)
- net-ldap (~> 0.3.1)
- omniauth (~> 1.0)
- pyu-ruby-sasl (~> 0.0.3.1)
- rubyntlm (~> 0.1.1)
gon (5.0.1)
actionpack (>= 2.3.0)
json
@@ -588,7 +594,7 @@
gitlab-linguist (~> 3.0.0)
gitlab_git (~> 5.4.0)
gitlab_meta (= 6.0)
- gitlab_omniauth-ldap (= 1.0.4)
+ gitlab_omniauth-ldap (= 1.0.4)!
gon (~> 5.0.0)
grape (~> 0.6.1)
grape-entity (~> 0.3.0)
--- config/gitlab.yml.example.orig 2014-05-18 18:44:01.500000000 +0200
+++ config/gitlab.yml.example 2014-05-18 18:44:44.250000000 +0200
@@ -127,6 +127,10 @@
method: 'ssl' # "tls" or "ssl" or "plain"
bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
password: '_the_password_of_the_bind_user'
+ mapping:
+ username: 'uid'
+ name: 'cn'
+ email: 'mail'
# If allow_username_or_email_login is enabled, GitLab will ignore everything
# after the first '@' in the LDAP username submitted by the user on login.
#
--- config/initializers/devise.rb.orig 2014-05-18 18:45:35.080000000 +0200
+++ config/initializers/devise.rb 2014-05-18 18:46:06.530000000 +0200
@@ -223,6 +223,7 @@
method: Gitlab.config.ldap['method'],
bind_dn: Gitlab.config.ldap['bind_dn'],
password: Gitlab.config.ldap['password'],
+ mapping: Gitlab.config.ldap['mapping'],
name_proc: email_stripping_proc
end
--- lib/gitlab/ldap/user.rb.orig 2014-05-18 18:46:48.820000000 +0200
+++ lib/gitlab/ldap/user.rb 2014-05-18 18:47:22.240000000 +0200
@@ -97,6 +97,10 @@
'ldap'
end
+ def username
+ (auth.info.username || auth.info.nickname).to_s.force_encoding('utf-8')
+ end
+
def raise_error(message)
raise OmniAuth::Error, "(LDAP) " + message
end

View File

@ -0,0 +1,363 @@
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI="5"
# Mainteiner notes:
# - This ebuild uses Bundler to download and install all gems in deployment mode
# (i.e. into isolated directory inside application). That's not Gentoo way how
# it should be done, but GitLab has too many dependencies that it will be too
# difficult to maintain them via ebuilds.
#
USE_RUBY="ruby19 ruby20"
PYTHON_DEPEND="2:2.7"
inherit eutils python ruby-ng user
DESCRIPTION="GitLab is a free project and repository management application"
HOMEPAGE="https://github.com/gitlabhq/gitlabhq"
SRC_URI="https://github.com/gitlabhq/gitlabhq/archive/v${PV}.tar.gz -> ${P}.tar.gz"
RESTRICT="mirror"
LICENSE="MIT"
SLOT="6"
KEYWORDS="amd64 x86"
IUSE="mysql +postgres +unicorn"
## Gems dependencies:
# charlock_holmes dev-libs/icu
# grape, capybara dev-libs/libxml2, dev-libs/libxslt
# json dev-util/ragel
# pygments.rb python 2.7+
# execjs net-libs/nodejs, or any other JS runtime
# pg dev-db/postgresql-base
# mysql virtual/mysql
#
GEMS_DEPEND="
dev-libs/icu
dev-libs/libxml2
dev-libs/libxslt
dev-util/ragel
net-libs/nodejs
postgres? ( dev-db/postgresql-base )
mysql? ( virtual/mysql )"
DEPEND="${GEMS_DEPEND}
>=dev-vcs/gitlab-shell-1.8
dev-vcs/git"
RDEPEND="${DEPEND}
dev-db/redis
virtual/mta"
ruby_add_bdepend "
virtual/rubygems
>=dev-ruby/bundler-1.0"
#
# fix-gemfile:
# Remove therubyracer that doesn't compile well on Gentoo (we're using
# nodejs instead that is faster and better). Also replace broken
# charlock_holmes version with fixed one.
#
# fix-project-name-regex:
# Allow project name to contain non-ASCII characters.
#
# fix-sendmail-config:
# Fix default settings to work with ssmtp that doesn't know '-t' argument.
#
RUBY_PATCHES=(
"${P}-fix-gemfile.patch"
"${P}-fix-project-name-regex.patch"
"${PN}-6.0.2-fix-sendmail-config.patch"
"${P}-fix-ldap-dn-case.patch"
"${P}-ldap-custom-mapping.patch"
"${P}-email-custom-reply_to.patch"
)
MY_NAME="gitlab"
MY_USER="git" # should be same as in gitlab-shell
DEST_DIR="/opt/${MY_NAME}-${SLOT}"
CONF_DIR="/etc/${MY_NAME}-${SLOT}"
LOGS_DIR="/var/log/${MY_NAME}"
TEMP_DIR="/var/tmp/${MY_NAME}"
# When updating ebuild to newer version, check list of the queues in
# https://github.com/gitlabhq/gitlabhq/blob/v${PV}/script/background_jobs
SIDEKIQ_QUEUES="post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default"
all_ruby_prepare() {
# fix paths
local satellites_path="${TEMP_DIR}/repo_satellites"
local repos_path=/var/lib/git/repositories
local shell_path=/usr/share/gitlab-shell
sed -i -E \
-e "/satellites:$/,/\w:$/ s|(\s*path:\s).*|\1${satellites_path}/|" \
-e "/gitlab_shell:$/,/\w:$/ s|(\s*path:\s).*|\1${shell_path}/|" \
-e "/gitlab_shell:$/,/\w:$/ s|(\s*repos_path:\s).*|\1${repos_path}/|" \
-e "/gitlab_shell:$/,/\w:$/ s|(\s*hooks_path:\s).*|\1${shell_path}/hooks/|" \
config/gitlab.yml.example || die "failed to filter gitlab.yml.example"
local run_path=/run/${MY_NAME}
sed -i -E \
-e "s|/home/git/gitlab/tmp/(pids\|sockets)|${run_path}|" \
-e "s|/home/git/gitlab/log|${LOGS_DIR}|" \
-e "s|/home/git/gitlab|${DEST_DIR}|" \
config/unicorn.rb.example || die "failed to filter unicorn.rb.example"
sed -i \
-e "s|/home/git/gitlab/tmp/sockets|${run_path}|" \
lib/support/nginx/gitlab || die "failed to filter nginx/gitlab"
# modify default database settings for PostgreSQL
sed -i -E \
-e 's|(username:).*|\1 gitlab|' \
-e 's|(password:).*|\1 gitlab|' \
-e 's|(socket:).*|/run/postgresql/.s.PGSQL.5432|' \
config/database.yml.postgresql \
|| die "failed to filter database.yml.postgresql"
# rename config files
mv config/gitlab.yml.example config/gitlab.yml
mv config/unicorn.rb.example config/unicorn.rb
local dbconf=config/database.yml
if use postgres && ! use mysql; then
mv ${dbconf}.postgresql ${dbconf}
rm ${dbconf}.mysql
elif use mysql && ! use postgres; then
mv ${dbconf}.mysql ${dbconf}
rm ${dbconf}.postgresql
fi
# remove zzet's stupid migration which expetcs that users are so foolish
# to run GitLab with PostgreSQL's superuser...
rm db/migrate/20121009205010_postgres_create_integer_cast.rb
# remove useless files
rm -r lib/support/{deploy,init.d}
rm -r script/{background_jobs,web}
use unicorn || rm config/unicorn.rb
}
all_ruby_install() {
local dest=${DEST_DIR}
local conf=${CONF_DIR}
local logs=${LOGS_DIR}
local temp=${TEMP_DIR}
# prepare directories
diropts -m750
dodir ${logs} ${temp} ${temp}/repo_satellites
diropts -m755
dodir ${conf} ${dest}/public/uploads
dosym ${temp} ${dest}/tmp
dosym ${logs} ${dest}/log
# install configs
insinto ${conf}
doins -r config/*
dosym ${conf} ${dest}/config
echo 'export RAILS_ENV=production' > "${D}/${dest}/.profile"
# remove needless dirs
rm -Rf config tmp log
# install the rest files
# using cp 'cause doins is slow
cp -Rl * "${D}/${dest}"/
# install logrotate config
dodir /etc/logrotate.d
cat > "${D}/etc/logrotate.d/${MY_NAME}" <<-EOF
${logs}/*.log {
missingok
delaycompress
compress
copytruncate
}
EOF
## Install gems via bundler ##
cd "${D}/${dest}"
local without="development test aws"
local flag; for flag in mysql postgres unicorn; do
without+="$(use $flag || echo ' '$flag)"
done
local bundle_args="--deployment ${without:+--without ${without}}"
einfo "Running bundle install ${bundle_args} ..."
${RUBY} /usr/bin/bundle install ${bundle_args} || die "bundler failed"
# clean gems cache
rm -Rf vendor/bundle/ruby/*/cache
# fix permissions
fowners -R ${MY_USER}:${MY_USER} ${dest} ${temp} ${logs}
fperms +x script/{rails,check}
## RC script ##
local rcscript=gitlab-sidekiq.init
use unicorn && rcscript=gitlab-unicorn-6.init
cp "${FILESDIR}/${rcscript}" "${T}" || die
sed -i \
-e "s|@USER@|${MY_USER}|" \
-e "s|@SLOT@|${SLOT}|" \
-e "s|@GITLAB_BASE@|${dest}|" \
-e "s|@LOGS_DIR@|${logs}|" \
-e "s|@QUEUES@|${SIDEKIQ_QUEUES}|" \
"${T}/${rcscript}" \
|| die "failed to filter ${rcscript}"
newinitd "${T}/${rcscript}" "${MY_NAME}-${SLOT}"
}
pkg_postinst() {
elog
elog "1. Configure your GitLab's settings in ${CONF_DIR}/gitlab.yml."
elog
elog "2. Configure your database settings in ${CONF_DIR}/database.yml"
elog " for \"production\" environment."
elog
elog "3. Then you should create a database for your GitLab instance, if you"
elog "haven't done so already."
elog
if use postgres; then
elog "If you have local PostgreSQL running, just copy&run:"
elog " su postgres"
elog " psql -c \"CREATE ROLE gitlab PASSWORD 'gitlab' \\"
elog " NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;\""
elog " createdb -E UTF-8 -O gitlab gitlabhq_production"
elog " Note: You should change your password to something more random..."
elog
fi
elog "4. Finally execute the following command to initlize environment:"
elog " emerge --config \"=${CATEGORY}/${PF}\""
elog " Note: Do not forget to start Redis server first!"
elog
elog "If this is an update from previous version, it's HIGHLY recommended"
elog "to backup your database before running the config phase!"
elog
elog "If you're running GitLab behind an SSL proxy such as nginx or Apache and"
elog "you can't login after the upgrade, be sure to read the section about the"
elog "verification of the CSRF token in GitLab's trouble-shooting guide at"
elog "http://goo.gl/5XGRGv."
}
pkg_config() {
local shell_conf='/etc/gitlab-shell.yml'
einfo "Checking configuration files"
if [ ! -r "${CONF_DIR}/database.yml" ]; then
eerror "Copy ${CONF_DIR}/database.yml.* to"
eerror "${CONF_DIR}/database.yml and edit this file in order to configure your"
eerror "database settings for \"production\" environment."; die
fi
# check gitlab-shell configuration
if [ -r ${shell_conf} ]; then
local shell_repos_path="$(ryaml ${shell_conf} repos_path)"
local gitlab_repos_path="$(ryaml ${CONF_DIR}/gitlab.yml \
production gitlab_shell repos_path)"
if [ ! "${shell_repos_path}" -ef "${gitlab_repos_path}" ]; then
eerror "repos_path in ${CONF_DIR}/gitlab.yml and ${shell_conf}"
eerror "must points to the same location! Fix the repos_path location and"
eerror "run this again."; die
fi
else
ewarn "GitLab Shell checks skipped, could not find config file at"
ewarn "${shell_conf}. Make sure that you have gitlab-shell properly"
ewarn "installed and that repos_path is the same as in GitLab."
fi
local email_from="$(ryaml ${CONF_DIR}/gitlab.yml production gitlab email_from)"
local git_home="$(egethome ${MY_USER})"
# configure Git global settings
if [ ! -e "${git_home}/.gitconfig" ]; then
einfo "Setting git user"
su -l ${MY_USER} -c "
git config --global user.email '${email_from}';
git config --global user.name 'GitLab'" \
|| die "failed to setup git name and email"
fi
if [ ! -d "${DEST_DIR}/.git" ]; then
# create dummy git repo as workaround for
# https://github.com/bundler/bundler/issues/2039
einfo "Initializing dummy git repository to avoid false errors from bundler"
su -l ${MY_USER} -c "
cd ${DEST_DIR}
git init
git add README.md
git commit -m 'Dummy repository'" >/dev/null
fi
## Initialize app ##
local RAILS_ENV="production"
local RUBY=${RUBY:-/usr/bin/ruby}
local BUNDLE="${RUBY} /usr/bin/bundle"
local dbname="$(ryaml ${CONF_DIR}/database.yml production database)"
if [ -f "${DEST_DIR}/.secret" ]; then
local update=true
einfo "Migrating database ..."
exec_rake db:migrate
# https://github.com/gitlabhq/gitlabhq/issues/5311#issuecomment-31656496
einfo "Migrating iids ..."
exec_rake migrate_iids
einfo "Cleaning old precompiled assets ..."
exec_rake assets:clean
einfo "Cleaning cache ..."
exec_rake cache:clear
else
local update=false
einfo "Initializing database ..."
exec_rake gitlab:setup
fi
einfo "Precompiling assests ..."
exec_rake assets:precompile
if [ "${update}" = 'true' ]; then
ewarn
ewarn "This configuration script runs only common migration tasks."
ewarn "Please read guides on"
ewarn " https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/"
ewarn "for any additional migration tasks specific to your previous GitLab"
ewarn "version."
fi
}
ryaml() {
ruby -ryaml -e 'puts ARGV[1..-1].inject(YAML.load(File.read(ARGV[0]))) {|acc, key| acc[key] }' "$@"
}
exec_rake() {
local command="${BUNDLE} exec rake $@ RAILS_ENV=${RAILS_ENV}"
echo " ${command}"
su -l ${MY_USER} -c "
export LANG=en_US.UTF-8; export LC_ALL=en_US.UTF-8
cd ${DEST_DIR}
${command}" \
|| die "failed to run rake $@"
}