2 # - webservers integration
3 # - system js packages, jquery, jquery-ui, etc
4 # - do we need to package .less and not minified .js? nose.cfg?
5 # - handle upgrades on version change:
6 # $ rb-site upgrade /path/to/rb/install
7 Summary: Web-based code review tool
12 Group: Applications/Networking
13 URL: http://www.review-board.org/
14 Source0: http://downloads.reviewboard.org/releases/ReviewBoard/1.7/ReviewBoard-%{version}.tar.gz
15 # Source0-md5: 6576730e935964a9780feffa52114460
17 Patch0: default-cache-file-path.patch
19 BuildRequires: python-django >= 1.4.3
20 BuildRequires: python-django-evolution >= 0.6.7
21 BuildRequires: python-djblets >= 0.7.8
22 BuildRequires: python-jsmin
23 BuildRequires: python-modules
24 BuildRequires: python-setuptools
25 BuildRequires: python-sqlite
26 BuildRequires: rpm-pythonprov
27 BuildRequires: rpmbuild(macros) >= 1.219
28 BuildRequires: sed >= 4.0
32 Requires: python-dateutil
33 Requires: python-django >= 1.4.3
34 Requires: python-django-evolution >= 0.6.7
35 Requires: python-django-pipeline >= 1.2.22
36 Requires: python-djblets >= 0.7.1
37 Requires: python-docutils
39 Requires: python-markdown >= 2.2.1
40 Requires: python-memcached
41 Requires: python-mimeparse
43 Requires: python-paramiko >= 1.7.6
44 Requires: python-pygments >= 1.5
45 Requires: python-pysvn
47 Requires: python-recaptcha
48 Requires: python-slimit
49 # Pull one of webserver modes
50 Suggests: apache-mod_python
51 Suggests: apache-mod_wsgi
52 # Pull in the client libraries for all of the supported databases
53 Requires: python-MySQLdb
54 Requires: python-psycopg2
55 Requires: python-sqlite
56 # Pull in the tools for working with common repositories
62 Suggests: python-rbtools
63 Obsoletes: ReviewBoard < 1.7.0
65 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
67 %define _webapps /etc/webapps
68 %define _webapp %{name}
69 %define _sysconfdir %{_webapps}/%{_webapp}
70 %define _appdir %{_datadir}/%{_webapp}
73 Review Board is a powerful web-based code review tool that offers
74 developers an easy way to handle code reviews. It scales well from
75 small projects to large companies and offers a variety of tools to
76 take much of the stress and time out of the code review process.
79 %setup -q -n ReviewBoard-%{version}
82 %{__sed} -i -e '1s,^#!.*python,#!%{__python},' reviewboard/manage.py
84 # Remove packaged egg-info so it's regenerated by setup.py
85 %{__rm} -r ReviewBoard*.egg-info
88 %{__python} setup.py build
91 rm -rf $RPM_BUILD_ROOT
92 install -d $RPM_BUILD_ROOT/var/cache/%{name}
93 %{__python} setup.py install \
96 --root $RPM_BUILD_ROOT
98 install -d $RPM_BUILD_ROOT%{_sysconfdir}
99 cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/apache.conf
100 cp -p $RPM_BUILD_ROOT%{_sysconfdir}/{apache,httpd}.conf
102 # create htdocs structure that rb-site install would create
103 # TODO: maybe move rb htdocs instead of symlinking here?
104 D=$RPM_BUILD_ROOT%{_appdir}/htdocs
105 install -d $D/{media/{ext,uploaded/images},static}
106 ln -s %{py_sitescriptdir}/%{name}/htdocs/errordocs $D
108 ln -s %{py_sitescriptdir}/%{name}/htdocs/static/admin $S/admin
109 ln -s %{py_sitescriptdir}/djblets/static $S/djblets
110 ln -s %{py_sitescriptdir}/%{name}/htdocs/static/lib $S/lib
111 ln -s %{py_sitescriptdir}/%{name}/htdocs/static/rb $S/rb
113 # The rb-site executable has a PyGTK GUI, so would normally
114 # require us to ship a .desktop file. However it can only be run when supplied
115 # a directory as a command-line argument, hence it wouldn't be meaningful to
116 # create a .desktop file for it.
120 # hardlink files with fingerprinted variants
121 findup -m $RPM_BUILD_ROOT
123 # scripts that have a shebang and are meaningful to run; make executable:
124 # need to reinstall as py_postclean has removed .py
125 install -p reviewboard/manage.py $RPM_BUILD_ROOT%{py_sitescriptdir}/%{name}/manage.py
127 # Remove test data from the installed packages
128 #%{__rm} $RPM_BUILD_ROOT%{py_sitescriptdir}/%{name}/nose.cfg
129 %{__rm} -r $RPM_BUILD_ROOT%{py_sitescriptdir}/%{name}/diffviewer/testdata \
130 $RPM_BUILD_ROOT%{py_sitescriptdir}/%{name}/scmtools/testdata \
131 $RPM_BUILD_ROOT%{py_sitescriptdir}/webtests
134 rm -rf $RPM_BUILD_ROOT
136 %triggerin -- apache1 < 1.3.37-3, apache1-base
137 %webapp_register apache %{_webapp}
139 %triggerun -- apache1 < 1.3.37-3, apache1-base
140 %webapp_unregister apache %{_webapp}
142 %triggerin -- apache < 2.2.0, apache-base
143 %webapp_register httpd %{_webapp}
145 %triggerun -- apache < 2.2.0, apache-base
146 %webapp_unregister httpd %{_webapp}
149 %defattr(644,root,root,755)
150 %doc AUTHORS COPYING INSTALL NEWS README
151 %dir %attr(750,root,http) %{_sysconfdir}
152 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/apache.conf
153 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/httpd.conf
154 %attr(755,root,root) %{_bindir}/rb-site
155 %attr(755,root,root) %{_bindir}/rbssh
156 %dir %attr(770,root,http) /var/cache/%{name}
157 %dir %{py_sitescriptdir}/%{name}
158 %{py_sitescriptdir}/%{name}/*.py[co]
159 %{py_sitescriptdir}/%{name}/nose.cfg
160 %attr(755,root,root) %{py_sitescriptdir}/%{name}/manage.py
162 %{py_sitescriptdir}/%{name}/accounts
163 %{py_sitescriptdir}/%{name}/admin
164 %{py_sitescriptdir}/%{name}/attachments
165 %{py_sitescriptdir}/%{name}/changedescs
166 %{py_sitescriptdir}/%{name}/cmdline
167 %{py_sitescriptdir}/%{name}/diffviewer
168 %{py_sitescriptdir}/%{name}/extensions
169 %{py_sitescriptdir}/%{name}/hostingsvcs
170 %{py_sitescriptdir}/%{name}/htdocs
171 %{py_sitescriptdir}/%{name}/notifications
172 %{py_sitescriptdir}/%{name}/reviews
173 %{py_sitescriptdir}/%{name}/scmtools
174 %{py_sitescriptdir}/%{name}/site
175 %{py_sitescriptdir}/%{name}/ssh
176 %{py_sitescriptdir}/%{name}/templates
177 %{py_sitescriptdir}/%{name}/webapi
178 %{py_sitescriptdir}/ReviewBoard-%{version}-*.egg-info
181 %dir %{_appdir}/htdocs
182 %{_appdir}/htdocs/static
183 %{_appdir}/htdocs/errordocs
184 # FIXME: media remap to /var
185 %{_appdir}/htdocs/media
187 %dir %{py_sitescriptdir}/%{name}/static
188 %dir %{py_sitescriptdir}/%{name}/static/lib
189 %dir %{py_sitescriptdir}/%{name}/static/lib/js
190 %{py_sitescriptdir}/%{name}/static/lib/js/backbone-0.9.2.min.js
191 %{py_sitescriptdir}/%{name}/static/lib/js/csshover2.htc
192 %dir %{py_sitescriptdir}/%{name}/static/lib/js/flot
193 %{py_sitescriptdir}/%{name}/static/lib/js/flot/excanvas.min.js
194 %{py_sitescriptdir}/%{name}/static/lib/js/flot/jquery.flot.min.js
195 %{py_sitescriptdir}/%{name}/static/lib/js/flot/jquery.flot.pie.js
196 %{py_sitescriptdir}/%{name}/static/lib/js/flot/jquery.flot.pie.min.js
197 %{py_sitescriptdir}/%{name}/static/lib/js/flot/jquery.flot.selection.js
198 %{py_sitescriptdir}/%{name}/static/lib/js/flot/jquery.flot.selection.min.js
199 %{py_sitescriptdir}/%{name}/static/lib/js/jasmine-1.3.1.js
200 %{py_sitescriptdir}/%{name}/static/lib/js/jasmine-html-1.3.1.js
201 %{py_sitescriptdir}/%{name}/static/lib/js/jquery-1.8.2.min.js
202 %{py_sitescriptdir}/%{name}/static/lib/js/jquery-ui-1.8.24.custom.min.js
203 %{py_sitescriptdir}/%{name}/static/lib/js/jquery.form.js
204 %{py_sitescriptdir}/%{name}/static/lib/js/jquery.masonry.js
205 %{py_sitescriptdir}/%{name}/static/lib/js/jquery.timesince.js
206 %{py_sitescriptdir}/%{name}/static/lib/js/less-1.3.1.min.js
207 %{py_sitescriptdir}/%{name}/static/lib/js/pngfix.htc
208 %{py_sitescriptdir}/%{name}/static/lib/js/ui.autocomplete.js
209 %{py_sitescriptdir}/%{name}/static/lib/js/ui.autocomplete.min.js
210 %{py_sitescriptdir}/%{name}/static/lib/js/underscore-1.3.3.min.js
211 %dir %{py_sitescriptdir}/%{name}/static/rb
212 %dir %{py_sitescriptdir}/%{name}/static/rb/css
213 %{py_sitescriptdir}/%{name}/static/rb/css/*.css
214 %{py_sitescriptdir}/%{name}/static/rb/css/*.less
215 %{py_sitescriptdir}/%{name}/static/rb/images
216 %dir %{py_sitescriptdir}/%{name}/static/rb/js
217 %{py_sitescriptdir}/%{name}/static/rb/js/*.js
218 %{py_sitescriptdir}/%{name}/static/rb/js/models
219 %{py_sitescriptdir}/%{name}/static/rb/js/utils
220 %{py_sitescriptdir}/%{name}/static/rb/js/views