diff --git a/.gitignore b/.gitignore index 537c0fae2972f19d68fc784575ad16401fe61c59..67221f5e4f8e8261f956b3cafc4c3153143a7053 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .DS_Store .idea .rvmrc +.stgit* *.swap *.swo *.swp @@ -19,4 +20,4 @@ gpg/*/random_seed public/uploads/* public/source.tar tmp/**/* -capybara-*.html \ No newline at end of file +capybara-*.html diff --git a/app/controllers/albums_controller.rb b/app/controllers/albums_controller.rb index 5cfbe4c8533d2de72d3c24025ecf0b37e760932c..a7ce4b5e37667a5c06a78f55c8369ec45a749de0 100644 --- a/app/controllers/albums_controller.rb +++ b/app/controllers/albums_controller.rb @@ -10,7 +10,6 @@ class AlbumsController < ApplicationController def index @albums = current_user.albums_by_aspect(@aspect).paginate :page => params[:page], :per_page => 9, :order => 'created_at DESC' - @aspect = :all respond_with @albums, :aspect => @aspect end diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index 0e99d32ed29bc077587aa39e23a88bc4a4f918d1..c9c96462335278526d1e70fc20622a556fdc6b75 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -12,6 +12,8 @@ class PublicsController < ApplicationController @person = Person.find_by_id params[:id] unless @person.nil? || @person.owner.nil? render 'hcard' + else + render :nothing => true, :status => 404 end end @@ -24,7 +26,7 @@ class PublicsController < ApplicationController unless @person.nil? || @person.owner.nil? render 'webfinger', :content_type => 'application/xrd+xml' else - render :nothing => true + render :nothing => true, :status => 404 end end diff --git a/config/initializers/git_info.rb b/config/initializers/git_info.rb index e7aaffdda9f0a0a7755c162aa14caf83adf725a6..09b5407030d81f51bfc95569927a093241f2b44e 100644 --- a/config/initializers/git_info.rb +++ b/config/initializers/git_info.rb @@ -2,4 +2,22 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -GIT_INFO = `git show --name-only` +s = `git show --name-only 2>/dev/null || :` +if (s.nil? or s.empty?) + path = File.expand_path("config/gitversion") + begin + if (File.exists?( path)) + s = '' + f = File.open( path) + f.each_line do |line| + s += line + end + f.close + end + rescue + s = "" + end +end +GIT_INFO = s +# What's the scope of this s? Leave to GC just in case... +s = nil diff --git a/pkg/fedora/.gitignore b/pkg/fedora/.gitignore index 3fab5f9c0c103daffdd4bf69169f700c309645da..bedbdc76076f5c4c63f61dd26aa4f50f56099a07 100644 --- a/pkg/fedora/.gitignore +++ b/pkg/fedora/.gitignore @@ -1,2 +1,3 @@ TODO dist +.stgit* diff --git a/pkg/fedora/README.md b/pkg/fedora/README.md index 96c9c47d9560c2adb334ca058606b0fd885c4bc7..c0b29d3d2cbf9d0d981a8168919266d4cf8a3546 100644 --- a/pkg/fedora/README.md +++ b/pkg/fedora/README.md @@ -1,24 +1,25 @@ ## Diaspora RPM tools -Creates RPM packages from diaspora git repository. +Creates diaspora source tarballs and RPM packages -An alternative to the capistrano system, providing classic, binary RPM -packages for deployment on Fedora 13. +An alternative to the capistrano system, providing classic, binary RPM +packages for deployment on Fedora 13 and OS-independent source tarballs +aimed for packaging purposes. -#### Synopsis: +#### Fedora RPM synopsis *Prerequisites*: ruby-1.8, rubygem and other packages as described in http://github.com/diaspora/diaspora/wiki/Rpm-installation-on-fedora or http://github.com/diaspora/diaspora/wiki/Installing-on-CentOS-Fedora -Create source tarballs like dist/diaspora-0.0-1010041233_fade4231.tar.gz +Create source tarballs like dist/diaspora-0.0-1010041233_fade4231.tar.gz and dist/diaspora-bundle-0.0-1010041233_fade4231.tar.gz: % ./make-dist.sh source % ./make-dist.sh bundle -Setup links to tarballs from RPM source directory: - % ./make-dist.sh links +Setup links to tarballs from RPM source directory and create spec files: + % ./make-dist.sh prepare Build rpms: rpmbuild -ba dist/diaspora.spec @@ -28,7 +29,7 @@ Install (as root): rpm -U ~/rmpbuild/rpms/i686/diaspora-bundle-0.0-1.1010042345_4343fade43.fc13.i686 rpm -U ~/rmpbuild/rpms/noarch/diaspora-0.0-1.1010042345_4343fade43.fc13.noarch -Initiate (as root). +Initiate (as root). /usr/share/diaspora/diaspora-setup Start development server: @@ -37,48 +38,75 @@ Start development server: cd /usr/share/diaspora/master ./script/server -See http://github.com/diaspora/diaspora/wiki/Using-apache for +See http://github.com/diaspora/diaspora/wiki/Using-apache for apache/passenger setup. After configuration, start with: - /sbin/service diaspora-ws start + /sbin/service diaspora-wsd start /sbin/service httpd restart +#### Generic source synopsis + +Generate source tarball: + % ./make-dist.sh source + Using repo: http://github.com/diaspora/diaspora.git + Commit id: 1010092232_b313272 + Source: dist/diaspora-0.0-1010092232_b313272.tar.gz + Required bundle: 1010081636_d1a4ee0 + % + +The source tarball could be used as-is, by unpacking add making a +*bundle install*. An alternative is to generate a canned bundle like: + % ./make-dist.sh bundle + [ lot's of output...] + Bundle: dist/diaspora-bundle-0.0-1010081636_d1a4ee0.tar.gz + % + +This file can be installed anywhere. To use it, add a symlink from vendor/bundle +to the bundle's master directory. Reasonable defaults are to install +diaspora in /var/diaspora and bundle in /usr/lib/diaspora-bundle. With these, +the link is + % rm -rf /var/diaspora/master/vendor/bundle + % ln -sf /usr/lib/diaspora-bundle/master/bundle \ + > /var/diaspora/master/vendor + % + +The directories tmp, log, and public/uploads needs to be writable. If using +apache passenger, read the docs on uid used and file ownership. + +Note that the bundle version required is printed each time a new source +is generated. #### Notes +The source tarball is as retrieved from diaspora with following differences: + + - The .git directories are removed (freeing more than 50% of the size). + - A new file /master/config/gitversion is created. + - The file public/source.tar is generated. + - The file .bundle/config is patched. Remove before doing + *bundle install* + Routines uses last available version from master branch at github. The -version contains a time stamp and an abbreviated git commit id. If listed -in filename order, like ls does, latest version will be the last one. +version contains a time stamp and an abbreviated git commit id. Using -c, a specific commit can be used for source build. -*make-dist links* creates links also for all files listed in SOURCES. +*make-dist prepare* creates links also for all files listed in SOURCES. Typically, this is secondary sources. *make-dist.sh sources* applies all patches named *.patch in this directory after checking out source from git. -The spec-files in dist/ are patched by ./make-dist.sh source to reference +The spec-files in dist/ are patched by *./make-dist.sh prepare* to reference correct versions of diaspora and diaspora-bundle. The diaspora-bundle -is only updated if Gemfile is updated, upgrading diaspora doesn't +is only updated if Gemfile is updated, upgrading diaspora doesn't always require a new diaspora-bundle. Editing spec files should be done -in this directory, changes in dist/ are lost when doing ./make-dist source. +in this directory, changes in dist/ are lost when doing *./make-dist prepare*. The topmost comment's version is patched to reflect the complete version -of current specfile by 'make-dist source'. WRite the comment in this +of current specfile by *make-dist source*. Write the comment in this directory, copy-paste previous version nr. It will be updated. -rpmlint shows many errors, most of which related to that the server -won't start if the .git directories are not included. Needs investigation. - -This has been confirmed to start up and provide basic functionality both using -the thin webserver and apache passenger, and on 32/64 bit systems. - -#### Bugs - -As of now, diaspora fails if it not owns all file under /usr/share/diaspora. -I guess this means diaspora writes some stuff somewhere. In the long run, -this should be located and symlinked to /var,leaving the rest of the files -owned by root. FTM, all files in /usr/share/diaspore are owned by -diaspora - +This has been confirmed to start up and provide basic functionality both using +the thin webserver and apache passenger, on 32/64 bit systems and in the +mock build environment. #### Implementation @@ -86,22 +114,23 @@ diaspora dist/diaspora directory. This content is, after some patches, the diaspora package. 'make-dir.sh bundle' makes a 'bundle install --deployment' in the diaspora dir. -The resulting bundle is stored in vendor/bundle. This is, after some more +The resulting bundle is stored in vendor/bundle. This is, after some more patches, the content of diaspora-bundle. -Here is also support for running the diaspora websocket service as a system +Here is also support for running the diaspora websocket service as a system service through /sbin/service and some install scripts. - -Diaspora files are stored in /usr/share/diaspora, and owned by diaspora. The + +Diaspora files are stored in /usr/share/diaspora, and owned by root. The bundle, containing some C extensions, is architecture-dependent and lives in /usr/lib[64]/diaspora. Log files are in /var/log/diaspora. Symlinks in -/usr/share diaspora makes log and bundle available as expected by diaspora app. -This is more or less as mandated by LSB and Fedora packaging rules. - - find /usr/share/diaspora/ -type l -exec ls -l {} \; | awk '{print $9, $10, $11}' - /usr/share/diaspora/master/public/uploads -> /var/lib/diaspora/uploads - /usr/share/diaspora/master/log -> /var/log/diaspora - /usr/share/diaspora/master/vendor/bundle -> /usr/lib/diaspora-bundle/master/vendor/bundle +/usr/share diaspora makes log, bundle and tmp dir available as expected by +diaspora app. This is more or less as mandated by LSB and Fedora packaging rules. + + find . -type l -exec ls -l {} \; | awk '{print $9, $10, $11}' + ./public/uploads -> /var/lib/diaspora/uploads + ./log -> /var/log/diaspora + ./tmp -> /var/lib/diaspora/tmp + ./vendor/bundle -> /usr/lib/diaspora-bundle/master/vendor/bundle #### Discussion @@ -119,11 +148,11 @@ original README.md: not 777. - Splitting in two packages makes sense IMHO. The bundle is not changed that often, - but is quite bug: ~18M without test packages (the default) or ~55M with test - packages. The application is just ~7.5M, and is fast to deploy even with these + but is quite big: ~30M without test packages (the default) or ~55M with test + packages. The application is just ~3M, and is fast to deploy even with these tools (yes, I know, capistrano is much faster...) - Many, roughly 50% of the packages in the bundle are already packaged for Fedora i. e., they could be removed from the bundle and added as dependencies instead. - This is likely to make things more stable in the long run. + This is likely to make things more stable in the long run. diaspora.spec has a list. diff --git a/pkg/fedora/SOURCES b/pkg/fedora/SOURCES index 4f85fc9c70bd8f93bfd14e09826fe5b9a4187f54..eb326e9f641e162a09b60a01757cf89695276510 100644 --- a/pkg/fedora/SOURCES +++ b/pkg/fedora/SOURCES @@ -1,3 +1,5 @@ # These files will be linked to %_sourcedir by 'make-dist links' diaspora-setup -diaspora-ws +diaspora-wsd +diaspora.logconf +make_rel_symlink.py diff --git a/pkg/fedora/add-bundle.patch b/pkg/fedora/add-bundle.diff similarity index 100% rename from pkg/fedora/add-bundle.patch rename to pkg/fedora/add-bundle.diff diff --git a/pkg/fedora/diaspora-bundle.spec b/pkg/fedora/diaspora-bundle.spec index 49d1e714f886439a2a03a90f4d75748fcf3fc5b3..6f04cff2f51953317a60bf76ebb0c36a28d64947 100644 --- a/pkg/fedora/diaspora-bundle.spec +++ b/pkg/fedora/diaspora-bundle.spec @@ -4,22 +4,22 @@ %define __jar_repack %{nil} # Turn off the brp-python-bytecompile script, *pyc/pyo causes problems -%global __os_install_post %(echo '%{__os_install_post}' | +%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') Summary: Rubygem bundle for diaspora Name: diaspora-bundle Version: 0.0 Release: 1.%{git_release}%{?dist} -License: AGPLv3 +License: AGPLv3 Group: Applications/Communications URL: http://www.joindiaspora.com/ Vendor: joindiaspora.com Source: %{name}-%{version}-%{git_release}.tar.gz Prefix: %{_prefix} +BuildRoot: %{_rmpdir}/not-used-in-fedora/ Requires(pre): shadow-utils -BuildRequires: git Requires: ruby(abi) = 1.8 %description @@ -37,6 +37,8 @@ Source file usede to compile native libraries in diaspora-bundle. %prep %setup -q -n %{name}-%{version}-%{git_release} +find . -name .git* -print | xargs rm -rf + pushd bundle/ruby/1.8/ find . -name \*.css -exec chmod 644 {} \; find . -name \*.js -exec chmod 644 {} \; @@ -64,12 +66,12 @@ pushd bundle/ruby/1.8/ sed -i -e '/^#!/d' $f chmod 0644 $f done > /dev/null 2>&1 - find . -perm /u+x -type f -print0 | + find . -perm /u+x -type f -print0 | xargs --null sed -i 's|^#!/usr/local/bin/ruby|#!/usr/bin/ruby|' chmod 755 gems/thin-1.2.7/example/async_chat.ru chmod 755 gems/thin-1.2.7/example/async_tailer.ru - chmod 644 gems/i18n-0.4.1/MIT-LICENSE + chmod 644 gems/i18n-0.4.1/MIT-LICENSE chmod 755 gems/abstract-1.0.0/abstract.gemspec chmod 644 gems/mini_magick-2.1/MIT-LICENSE chmod 755 gems/thin-1.2.7/lib/thin/controllers/service.sh.erb @@ -82,7 +84,7 @@ pushd bundle/ruby/1.8/ # In repo (2.2.4) test -d gems/gherkin-*/ext && { pushd gems/gherkin-*/ext - # Recompile all shared libraries using -O2 optimalization flagcd + # Recompile all shared libraries using -O2 flag for lexer_dir in */ ; do pushd $lexer_dir sed -i 's/ -O0 / -O2 /' extconf.rb @@ -118,7 +120,7 @@ pushd bundle/ruby/1.8/ ln -s ../cbson/cbson.so . popd - # In repo (0.10.4) + # In repo (0.10.4) pushd gems/ruby-debug-base-0.10.3/lib rm ruby_debug.so ln -s ../ext/ruby_debug.so . @@ -144,6 +146,7 @@ pushd bundle/ruby/1.8/ ln -sf ../../ext/nokogiri/nokogiri.so . popd + # in repo (rawhide) pushd gems/json-1.4.6/ext/json/ext/json/ext rm generator.so ln -s ../../generator/generator.so @@ -199,18 +202,18 @@ popd } mkdir -p $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor - cp -ar bundle $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor + find %{buildroot}/%{_libdir}/diaspora-bundle \ -type d -fprintf dirs '%%%dir "%%p"\n' find -L %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \ - -type f -not -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \ + -type f -not -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \ -fprintf files '"%%p"\n' -find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \ - -type f -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \ - -fprintf dev-files '"%%p"\n' +find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \ + -type f -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \ + -fprintf dev-files '"%%p"\n' sed -i -e 's|%{buildroot}||' -e 's|//|/|' files dev-files dirs -cat files >> dirs && cp dirs files +cat files >> dirs && cp dirs files %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT @@ -224,5 +227,5 @@ cat files >> dirs && cp dirs files %doc COPYRIGHT AUTHORS GNU-AGPL-3.0 %changelog -* Sat Oct 02 2010 Alec Leamas <leamas.alec@gmail.com> 1.1009271539_08b9aa8 +* Sat Oct 02 2010 Alec Leamas <leamas.alec@gmail.com> 0.0-1.1009271539_08b9aa8 - Initial attempt to create a spec file diff --git a/pkg/fedora/diaspora-reset b/pkg/fedora/diaspora-reset index 5557a645c4dbb9ea6c009205aab83d565cbdc460..33c49e893f81a6851ce7259efc33fc3475e9d50b 100755 --- a/pkg/fedora/diaspora-reset +++ b/pkg/fedora/diaspora-reset @@ -1,14 +1,13 @@ #!/bin/sh # -# Try to revert to pristine state, deleting all users and -# configuration +# Try to revert to pristine state, deleting all users and +# configuration +# set -x service mongod stop -service diaspora-ws stop +service diaspora-wsd stop rm -rf /var/lib/mongodb/* cp /usr/share/diaspora/master/config/app_config.yml.example \ /usr/share/diaspora/master/config/app_config.yml service mongod start - - diff --git a/pkg/fedora/diaspora-setup b/pkg/fedora/diaspora-setup index 23eb420d5e16ea6da320c0b662820e44817155a4..eaa9192c06d7a2fbf2b7953031a61050358f0085 100755 --- a/pkg/fedora/diaspora-setup +++ b/pkg/fedora/diaspora-setup @@ -1,21 +1,23 @@ #!/bin/bash # -# Do what's needed to initiate diaspora. +# Do what's needed to initiate diaspora. # -# See http://github.com/diaspora/diaspora/issues/issue/395 -# -# Note: This is really sort of prototyping. This should be done in ruby, -# on a web page. test $UID = "0" || { echo "You need to be root to do this, giving up" exit 2 } -cd /usr/share/diaspora/master +services=$( netstat -nl | grep '[^:]:3000[ \t]') +test -n "$services" && { + echo "Warning: something is already using port 3000" + echo " $services" +} /sbin/service mongod start || : +cd /usr/share/diaspora/master + test -e config/app_config.yml || cp config/app_config.yml.example config/app_config.yml @@ -49,4 +51,3 @@ while : ; do break } done - diff --git a/pkg/fedora/diaspora-ws b/pkg/fedora/diaspora-wsd similarity index 81% rename from pkg/fedora/diaspora-ws rename to pkg/fedora/diaspora-wsd index 90dc28f8fe4b69c740e8d96d2b5d053d03161d14..6f0c7593f6daaa60e7c5554b25e84dbd751eb0ba 100755 --- a/pkg/fedora/diaspora-ws +++ b/pkg/fedora/diaspora-wsd @@ -1,30 +1,30 @@ #!/bin/bash # -# /etc/rc.d/init.d/diaspora-ws +# /etc/rc.d/init.d/diaspora-wsd # -# Starts the diaspora websocket server +# Starts the diaspora websocket daemon # # chkconfig: - 80 80 -# description: Diaspora websocket server +# description: Diaspora websocket daemon ### BEGIN INIT INFO -# Provides: diaspora-ws +# Provides: diaspora-wsd # Required-Start: $local_fs $network # Required-Stop: $local_fs $network # Should-Start: $remote_fs # Should-Stop: $remote_fs -# Default-Start: +# Default-Start: # Default-Stop: 0 1 2 3 4 5 6 # Short-Description: start and stop Diaspora websocket server # Description: The websocket server provides websocket services for -# diaspora. +# diaspora. ### END INIT INFO # Source function library. . /etc/init.d/functions -if [ -f /etc/sysconfig/diaspora-ws -a $UID -eq 0 ]; then - . /etc/sysconfig/diaspora-ws +if [ -f /etc/sysconfig/diaspora-wsd -a $UID -eq 0 ]; then + . /etc/sysconfig/diaspora-wsd fi # Note: this line is patched by installation scripts. @@ -33,9 +33,9 @@ cd /usr/share/diaspora RETVAL=0 prog="Diaspora websocket server" exec="script/websocket_server.rb" -pidfile="/var/run/diaspora-ws" -lockfile="/var/lock/subsys/diaspora-ws" -logfile=/var/log/diaspora-ws.log +pidfile="/var/run/diaspora-wsd" +lockfile="/var/lock/subsys/diaspora-wsd" +logfile=/var/log/diaspora-wsd.log [ -n "$OPTIONS" ] && OPTIONS=" $OPTIONS" ruby_cmd="ruby -C $PWD $exec$OPTIONS" diff --git a/pkg/fedora/diaspora.logconf b/pkg/fedora/diaspora.logconf index 767c2d7a26b2e5ff2bb4c509a852583d475adf17..bc8b078d1b4bc0988729dd56fefcc219a11b9439 100644 --- a/pkg/fedora/diaspora.logconf +++ b/pkg/fedora/diaspora.logconf @@ -8,6 +8,6 @@ notifempty missingok postrotate - ( /sbin/service diaspora-ws condrestart ) >/dev/null 2>&1 + ( /sbin/service diaspora-wsd condrestart ) >/dev/null 2>&1 endscript } diff --git a/pkg/fedora/diaspora.spec b/pkg/fedora/diaspora.spec index 533f170d31705e68dd69272a71a6d02ec6c4d25c..0d07ddb432d0e57a03ba42bfdf2b79bfacad6c75 100644 --- a/pkg/fedora/diaspora.spec +++ b/pkg/fedora/diaspora.spec @@ -1,18 +1,21 @@ -%global debug_package %{nil} +%global debug_package %{nil} %define git_release HEAD Summary: A social network server Name: diaspora Version: 0.0.1 Release: 1.%{git_release}%{?dist} -License: AGPLv3 +License: AGPLv3 Group: Applications/Communications URL: http://www.joindiaspora.com/ Vendor: joindiaspora.com Source: %{name}-%{version}-%{git_release}.tar.gz -Source1: diaspora-ws +Source1: diaspora-wsd Source2: diaspora-setup +Source3: diaspora.logconf +Source4: make_rel_symlink.py BuildArch: noarch +BuildRoot: %{_rmpdir}/not-used-in-fedora/ Requires: mongodb-server Requires: ruby(abi) = 1.8 @@ -26,36 +29,49 @@ open source social network server. %prep %setup -q -n %{name}-%{version}-%{git_release} -find . -perm /u+x -type f -exec \ +find . -perm /u+x -type f -exec \ sed -i 's|^#!/usr/local/bin/ruby|#!/usr/bin/ruby|' {} \; > /dev/null %build rm -rf master/vendor/bundle -mkdir master/tmp || : -pushd master - tar cf public/source.tar --exclude='source.tar' -X .gitignore * -popd %install -[ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/%{_datadir}/diaspora -cp master/README.md . -mv master/GNU-AGPL-3.0 . +rm -fr $RPM_BUILD_ROOT + +sed -i \ + '/BUNDLE_PATH/s|:.*|: %{_libdir}/diaspora-bundle/master/vendor/bundle|' \ + master/.bundle/config + +cp master/GNU-AGPL-3.0 master/COPYRIGHT master/README.md master/AUTHORS . +cp master/pkg/fedora/README.md README-Fedora.md -mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/log/diaspora mkdir -p $RPM_BUILD_ROOT/etc/init.d -sed -i '/^cd /s|.*|cd %{_datadir}/diaspora/master|' diaspora-ws -cp diaspora-ws $RPM_BUILD_ROOT/etc/init.d -mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d -cp diaspora.logconf $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/diaspora +cp %SOURCE1 $RPM_BUILD_ROOT/etc/init.d +sed -i '/^cd /s|.*|cd %{_datadir}/diaspora/master|' \ + $RPM_BUILD_ROOT/etc/init.d/diaspora-wsd + +mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d +cp %SOURCE3 $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/diaspora + mkdir -p $RPM_BUILD_ROOT/%{_datadir}/diaspora cp -ar master $RPM_BUILD_ROOT/%{_datadir}/diaspora -cp -ar master/.gitignore master/.bundle $RPM_BUILD_ROOT/%{_datadir}/diaspora/master -cp diaspora-setup $RPM_BUILD_ROOT/%{_datadir}/diaspora -mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads +cp %SOURCE2 $RPM_BUILD_ROOT/%{_datadir}/diaspora -find $RPM_BUILD_ROOT/%{_datadir}/diaspora -type d -fprintf dirs '%%%dir "%%p"\n' -find -L $RPM_BUILD_ROOT/%{_datadir}/diaspora -type f -fprintf files '"%%p"\n' +mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/log/diaspora +mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads +mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp + +%{SOURCE4} $RPM_BUILD_ROOT/%{_localstatedir}/log/diaspora \ + $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/log +%{SOURCE4} $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads \ + $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/public/uploads +%{SOURCE4} $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp \ + $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/tmp + +find $RPM_BUILD_ROOT/%{_datadir}/diaspora -type d \ + -fprintf dirs '%%%dir "%%p"\n' +find -L $RPM_BUILD_ROOT/%{_datadir}/diaspora -type f \ + -fprintf files '"%%p"\n' cat files >> dirs && mv -f dirs files sed -i -e '\|.*/master/config.ru"$|d' \ -e '\|.*/master/config/environment.rb"$|d' \ @@ -64,36 +80,33 @@ sed -i -e '\|.*/master/config.ru"$|d' \ %post -rm -f %{_datadir}/diaspora/master/vendor/bundle -rm -f %{_datadir}/diaspora/master/log -rm -f %{_datadir}/diaspora/master/public/uploads - -ln -s %{_localstatedir}/log/diaspora \ - %{_datadir}/diaspora/master/log || : -ln -s %{_libdir}/diaspora-bundle/master/vendor/bundle \ - %{_datadir}/diaspora/master/vendor || : -ln -s %{_localstatedir}/lib/diaspora/uploads \ - %{_datadir}/diaspora/master/public/uploads || : -/sbin/chkconfig --add diaspora-ws || : +/sbin/chkconfig --add diaspora-wsd + %preun if [ $1 -eq 0 ] ; then - service diaspora-ws stop >/dev/null 2>&1 || : - /sbin/chkconfig --del diaspora-ws + service diaspora-wsd stop &>/dev/null || : + /sbin/chkconfig --del diaspora-wsd fi + %clean -[ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT +rm -fr $RPM_BUILD_ROOT + %files -f files -%defattr(-, diaspora, diaspora, 0755) -%doc README.md GNU-AGPL-3.0 +%defattr(-, root, root, 0755) +%doc AUTHORS README.md GNU-AGPL-3.0 COPYRIGHT README-Fedora.md %attr(-, diaspora, diaspora) %{_datadir}/diaspora/master/config.ru %attr(-, diaspora, diaspora) %{_datadir}/diaspora/master/config/environment.rb %attr(-, diaspora, diaspora) %{_localstatedir}/log/diaspora %attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/uploads +%attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/tmp +%{_datadir}/diaspora/master/tmp +%{_datadir}/diaspora/master/public/uploads +%{_datadir}/diaspora/master/log %config(noreplace) %{_sysconfdir}/logrotate.d/diaspora -%{_sysconfdir}/init.d/diaspora-ws +%{_sysconfdir}/init.d/diaspora-wsd %changelog * Fri Sep 24 2010 Alec Leamas <leamas.alec@gmail.com> 0.0-1.1009280542_859ec2d diff --git a/pkg/fedora/make-dist.sh b/pkg/fedora/make-dist.sh index d8407ab9d96ad576cf79db0d792ce01368dc56ba..3a24635edbdb27f30bc90811fd6349a51d68d097 100755 --- a/pkg/fedora/make-dist.sh +++ b/pkg/fedora/make-dist.sh @@ -6,6 +6,8 @@ # GIT_REPO='http://github.com/diaspora/diaspora.git' VERSION='0.0' +RELEASE='1' + function git_id # @@ -14,63 +16,65 @@ function git_id # Usage: git_id [-n] [file or directory] # { - nl="\n" - file_or_dir="$PWD" + local nl="\n" + local file_or_dir="$PWD" test "$1" = '-n' && { nl=""; shift; } test -n "$1" && file_or_dir="$1" if [ -d $file_or_dir ]; then - file="" - dir=$file_or_dir + local file="" + local dir=$file_or_dir else - file=$(basename $file_or_dir) - dir=$(dirname $file_or_dir) - fi + local file=$(basename $file_or_dir) + local dir=$(dirname $file_or_dir) + fi - export LANG=C ( cd $dir git log -1 --abbrev-commit --date=iso $file | - awk -v nl="$nl" \ - ' BEGIN { commit = "" } - /^commit/ { if ( commit == "") commit = $2 } - /^Date:/ { split( $2, d, "-") - split( $3, t, ":") - } - END { printf( "%s%s%s%s%s_%s%s", - substr( d[1],3), d[2], d[3], - t[1], t[2], - commit, nl) - }' + awk -v nl="$nl" \ + ' BEGIN { commit = ""; d[1] = "" } + /^commit/ { if ( commit == "") commit = $2 } + /^Date:/ { if (d[1] == "") { + split( $2, d, "-") + split( $3, t, ":") + } + } + END { printf( "%s%s%s%s%s_%s%s", + substr( d[1],3), d[2], d[3], + t[1], t[2], + commit, nl) + }' ) } function fix_alphatag() # Patch version on top comment first id line: -# Usage: fix_alphatag <file> <version> <commit_id> +# Usage: fix_alphatag <file> <version> <commit_id> <release> # Patches:\ # * Fri Sep 24 2010 name surname <email@com> 1.20100925_faf23207 { - dist=$(rpm --eval %dist) - awk -v dist="$dist" -v version="$2" -v release="$3" \ - ' BEGIN { done = 0 } - /^[*]/ { if (done) - print - else - { - gsub( "1[.].*", "") - printf( "%s%s-1.%s%s\n", - $0, version, release,dist) - done = 1 - } - next - } - { print }' \ - < $1 > $1.tmp && mv -f $1.tmp $1 + local dist=$(rpm --eval %dist) + awk -v dist="$dist" -v version="$2" -v commit="$3" -v release="$4" \ + ' BEGIN { done = 0 } + /^[*]/ { if (done) + print + else + { + s = sprintf( "-%s.%s%s\n", release, commit, dist) + gsub( "-[0-9][.][^ ]*$", s) + done = 1 + # add new gsub for version... + print + } + next + } + { print }' < $1 > $1.tmp && mv -f $1.tmp $1 } + function fix_bundle_deps -# usage: fix_bundle_deps <specfile> <version> <release> +# usage: fix_bundle_deps <specfile> <version> <commit> # Patches: Requires: diaspora-bundle = 0.0-20101021-aefsf323148 { awk -v vers="$2-$3" \ @@ -79,101 +83,112 @@ function fix_bundle_deps else print next - } - { print}' \ - < $1 > $1.tmp && mv -f $1.tmp $1 + } + { print}' \ + < $1 > $1.tmp && mv -f $1.tmp $1 } + function patch() # Patch spec-files with current version-release -# Usage: patch VERSION RELEASE +# Usage: patch <version> <commit> <release> { sed -e "/^%define/s|HEAD|$2|" \ -e '/^Version:/s|.*|Version: '$1'|' \ - <diaspora.spec >dist/diaspora.spec - fix_alphatag dist/diaspora.spec $1 $2 - bundle_id=$(git_id dist/diaspora/Gemfile) - dist_tag=$(rpm --eval %dist) - fix_bundle_deps dist/diaspora.spec $1 "1.${bundle_id}$dist_tag" + <diaspora.spec >dist/diaspora.spec + fix_alphatag dist/diaspora.spec $1 $2 $3 + local bundle_id=$(git_id dist/diaspora/Gemfile) + local dist_tag=$(rpm --eval %dist) + fix_bundle_deps dist/diaspora.spec $1 "$RELEASE.${bundle_id}$dist_tag" sed -e "/^%define/s|HEAD|$bundle_id|" \ -e '/^Version:/s|.*|Version: '$1'|' \ < diaspora-bundle.spec > dist/diaspora-bundle.spec - + cp dist/diaspora.spec dist/diaspora/diaspora.spec } + function checkout() # Checkout last version of diaspora unless it's already there. # Usage: checkout [commit id, defaults to HEAD] # Returns: commit for current branch's HEAD. -{ - mkdir dist >/dev/null 2>&1 || : +{ + mkdir dist &>/dev/null || : ( - cd dist + local last_repo='' + cd dist + + test -e '.last-repo' && + last_repo=$( cat '.last-repo') + test "$last_repo" != $GIT_REPO && + rm -rf diaspora test -d diaspora || { - git clone --quiet $GIT_REPO; - ( - cd diaspora; - git remote add upstream \ - git://github.com/diaspora/diaspora.git - for p in ../../*.patch; do - git apply --whitespace=fix $p > /dev/null - done - ) + git clone --quiet $GIT_REPO; + ( + cd diaspora; + git remote add upstream \ + git://github.com/diaspora/diaspora.git + for p in ../../*.patch; do + git apply --whitespace=fix $p > /dev/null + done &> /dev/null || : + ) } - cd diaspora; - git fetch --quiet upstream + echo -n "$GIT_REPO" > '.last-repo' + + cd diaspora; + git fetch --quiet upstream git merge --quiet upstream/master git checkout --quiet ${1:-'HEAD'} - git_id -n + git_id -n ) } -function make_dist +function make_src # Create a distribution tarball -# Usage: make dist [ commit, defaults to HEAD] +# Usage: make src <commit> { + echo "Using repo: $GIT_REPO" + commit=$(checkout ${1:-'HEAD'}) - echo "Creating source tarball for $commit" - patch $VERSION $commit + echo "Commit id: $commit" RELEASE_DIR="diaspora-$VERSION-$commit" - rm -rf dist/${RELEASE_DIR} + rm -rf dist/${RELEASE_DIR} mkdir dist/${RELEASE_DIR} - cp diaspora-ws diaspora-setup diaspora.logconf dist/${RELEASE_DIR} cd dist mkdir ${RELEASE_DIR}/master cp -ar diaspora/* diaspora/.git* ${RELEASE_DIR}/master mv ${RELEASE_DIR}/master/diaspora.spec ${RELEASE_DIR} ( - cd ${RELEASE_DIR}; - find . -name .gitkeep -delete - cd master + cd ${RELEASE_DIR}/master + git show --name-only > config/gitversion + tar cf public/source.tar \ + --exclude='source.tar' -X .gitignore * + find $PWD -name .git\* | xargs rm -rf rm -rf .bundle - git apply ../../../add-bundle.patch + /usr/bin/patch -p1 -s <../../../add-bundle.diff ) tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && \ rm -rf ${RELEASE_DIR} cd .. - echo "Source: dist/${RELEASE_DIR}.tar.gz" - echo "Required bundle: $(git_id dist/diaspora/Gemfile)" - echo "Source specfile: dist/diaspora.spec" - echo "Bundle specfile: dist/diaspora-bundle.spec" + echo "Source: dist/${RELEASE_DIR}.tar.gz" + echo "Required bundle: $(git_id dist/diaspora/Gemfile)" } + function make_bundle() # Create the bundle tarball # Usage: make_bundle [ commit, defaults to HEAD] # { checkout ${1:-'HEAD'} >/dev/null - bundle_id=$(git_id dist/diaspora/Gemfile) + bundle_id=$( git_id dist/diaspora/Gemfile) bundle_name="diaspora-bundle-$VERSION-$bundle_id" test -e "dist/$bundle_name.tar.gz" || { echo "Creating bundle $bundle_name" cd dist - rm -rf $bundle_name + rm -rf $bundle_name mkdir -p $bundle_name/bundle pushd diaspora > /dev/null bundle install --deployment \ @@ -184,89 +199,126 @@ function make_bundle() "../$bundle_name" popd > /dev/null tar czf $bundle_name.tar.gz $bundle_name + rm -rf $bundle_name cd .. } - echo + echo echo "Bundle: dist/$bundle_name.tar.gz" } -function make_links() -# Usage: make_links [source commit] + +function prepare_rpm() +# Usage: prepare_rpm < commit> { - dest=$(rpm --eval %_sourcedir) + local dest=$(rpm --eval %_sourcedir) test -z "$dest" && { echo "Can't find RPM source directory, giving up." exit 2 } - echo "Linking sources to $dest" - src_commit="${1:-$( checkout)}" - - src="dist/diaspora-$VERSION-$src_commit.tar.gz" + local commit=$( checkout $1) + echo "Release: $RELEASE.$commit" + echo "Rpm source dir: $dest" + + patch $VERSION $commit $RELEASE + + local src="dist/diaspora-$VERSION-$commit.tar.gz" + test -e $src || + cat <<- EOF + Warning: $src does not exist + (last version not built?) + EOF ln -sf $PWD/$src $dest - bundle_commit=$(git_id dist/diaspora/Gemfile) - bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz" + local bundle_commit=$( git_id dist/diaspora/Gemfile) + local bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz" + test -e $bundle || + cat <<- EOF + Warning: $bundle does not exist + (last version not built?) + EOF ln -sf $PWD/$bundle $dest + local file for file in $( grep -v '^#' SOURCES); do - ln -sf $PWD/$file $dest/$file + if [ -e "$file" ]; then + ln -sf $PWD/$file $dest/$file + else + echo "Warning: $file (listed in SOURCES) does not exist" + fi done - cd $dest - find . -type l -not -readable -exec rm {} \; + ( cd $dest; find . -type l -not -readable -exec rm {} \;) + echo "Source specfile: dist/diaspora.spec" + echo "Bundle specfile: dist/diaspora-bundle.spec" } + function usage() { cat <<- EOF - Usage: make-dist [-c commit] <dist|bundle|links> + Usage: make-dist [options] <dist|bundle|prepare> + + Options: + + -h Print this message. + -c commit Use a given commit, defaults to last checked in. + -r release Mark with specified release, defaults to 1. + -u uri Git repository URI, defaults to + $GIT_REPO. - -c Use a given commit, defaults to last checked in. - dist Build a diaspora application tarball. + source Build a diaspora application tarball. bundle Build a bundler(1) bundle for diaspora. - links Symlink bundle and source tarballs to rpm source dir. - + prepare Symlink bundle and source tarballs to rpm source dir, + create patched rpm spec files. + All results are stored in dist/ + EOF } -test "$1" = "-h" -o $# = 0 && { +commit='HEAD' +while getopts ":r:c:h" opt +do + case $opt in + u) GIT_REPO="$OPTARG" + ;; + c) commit="${OPTARG:0:7}" + ;; + r) RELEASE="$OPTARG:" + ;; + h) usage + exit 0 + ;; + *) usage + exit 2 + ;; + esac +done +shift $(($OPTIND - 1)) + +typeset -r GIT_REPO RELEASE +export LANG=C + +test $# -gt 1 -o $# -eq 0 && { usage; - exit 0 + exit 2; } -test "$1" = "-c" && { - test -z "$2" && { - usage; - exit 1 - } - commit="$2" - shift; shift -} - - case $1 in - + "bundle") make_bundle $commit ;; - - 'source') make_dist $commit + 'source') make_src $commit ;; - - 'links') make_links $commit + 'prepare') prepare_rpm $commit $release ;; - - "fix_gemfile") - fix_gemfile - ;; - *) usage exit 1 ;; esac - - + + diff --git a/pkg/fedora/make_rel_symlink.py b/pkg/fedora/make_rel_symlink.py new file mode 100755 index 0000000000000000000000000000000000000000..5c893056f3797ac7ffa2d2ce447cb3136e7325dd --- /dev/null +++ b/pkg/fedora/make_rel_symlink.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +import os +import os.path +import sys +import pdb +import shutil + +def relative_ln_s( from_, to_ ): + """ + + This is just so dirty & boring: create a relative symlink, making the + to_ path relative to from_. No errorchecks. Both arguments must be + files, a destination directory doesn't work (I think). An existing + file in to_ will be removed. + + """ + prefix = os.path.commonprefix( [ to_, from_ ] ) + if prefix == '': + prefix = '/' + source = from_.split( prefix )[ 1 ] + dest = to_.split( prefix )[ 1 ] + level = len( dest.split( '/' ) ) - 1 + path = ( '../' * level ) + source + return path + +USAGE = 'Usage: make_rel_symlink [-p] <sourcefile> <destfile>' + +just_print = False; +if sys.argv[1] == "-p": + just_print = True; + sys.argv = sys.argv[ 1:] + +if len( sys.argv ) != 3: + print USAGE + sys.exit( 1 ) + +if os.path.isdir( sys.argv[2] ): + print "Removing link target dir:" + sys.argv[2] + shutil.rmtree( sys.argv[2]) + +link_path = relative_ln_s( sys.argv[1], sys.argv[2] ) +if just_print: + print link_path +else: + os.chdir( os.path.dirname( sys.argv[2])) + target = os.path.basename( sys.argv[2]) + if os.path.exists( target ): + os.unlink( target) + os.symlink( link_path, target) + + diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb index 19c95a70559598f87cd514c4d09fac0240733531..a7d745985e0d009c169b5d965d74bd6e3dfbbc1c 100644 --- a/spec/controllers/publics_controller_spec.rb +++ b/spec/controllers/publics_controller_spec.rb @@ -34,6 +34,20 @@ describe PublicsController do end end + describe '#hcard' do + it 'queries by person id' do + post :hcard, :id => user.person.id + assigns[:person].should == user.person + response.code.should == '200' + end + + it 'does not query by user id' do + post :hcard, :id => user.id + assigns[:person].should be_nil + response.code.should == '404' + end + end + describe 'webfinger' do it 'should not try to webfinger out on a request to webfinger' do Redfinger.should_not_receive :finger diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index defa9f866f35798ca1808ae430e853ac776addde..da535bfe343e4981fdd4e42418d73e6646e31bd3 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -115,7 +115,7 @@ describe Person do end end - describe 'searching' do + describe '::search' do before do @friend_one = Factory.create(:person) @friend_two = Factory.create(:person) @@ -159,6 +159,12 @@ describe Person do people.include?(@friend_three).should == false end + it 'should yield results on full names' do + pending "Not yet implemented." + people = Person.search("Casey Grippi") + people.should == [@friend_four] + end + it 'should search by diaspora_handle exactly' do stub_success("tom@tom.joindiaspora.com") Person.by_webfinger(@friend_one.diaspora_handle).should == @friend_one diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb index 338e89933f8d549a7298a0f73cf4af4c502ef2ae..a239ec1c45b276c3b51eac40b7c843bbf4c9b675 100644 --- a/spec/models/photo_spec.rb +++ b/spec/models/photo_spec.rb @@ -85,25 +85,6 @@ describe Photo do end - describe 'with encryption' do - - before do - unstub_mocha_stubs - end - - after do - stub_signature_verification - end - - it 'should save a signed photo' do - pending "Figure out how to make the photo posting api work in specs, it needs a file type" - photo = @user.post(:photo, :album_id => @album.id, :user_file => [File.open(@fixture_name)]) - photo.save.should == true - photo.signature_valid?.should be true - end - - end - describe 'remote photos' do it 'should write the url on serialization' do @photo.image = File.open(@fixture_name) diff --git a/tmp/.gitkeep b/tmp/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391