Please post to the support forum if you have a suggestion for improving this document, thanks! And you might want to read this blog entry on the purpose of the support forum as well.
gem
list --remote some_gem_name ! How do I remove it entirely?Disconnecting: Corrupted check bytes on input when I try to commit.$ scp index.html tom@rubyforge.org:/var/www/gforge-projects/support/ index.html 100% |**********************************************************************| 25 00:00 $
Note that you can also use SFTP to do this.
You can use PSCP for Windows - download it from the Putty web site. Here's an example of PSCP:
C:\>pscp test.html tom@rubyforge.org:/var/www/gforge-projects/support/ test.html | 11 kB | 11.2 kB/s | ETA: 00:00:00 | 100% C:\>
RubyForge supports two SCM utilities - CVS and Subversion - and requires public key authentication. You can pick which one you want to use when you start your project. Also, if you want to convert an existing project from CVS to Subversion, just put in a support request. Some more details on the Subversion support are on Tom's blog.
If you already have a CVS or Svn repository in place, we can drop that into your SCM space at RubyForge so you can keep all your branches and history and such. If you want to do that, please put in a support request.
If you want a graphical tool to help with managing CVS or Svn, check out TortoiseCVS or TortoiseSVN.
* Subversion notes
To import some code to your Subversion repository, first make sure you have a Subversion client installed. Then do something like this - just plug in your user name in place of 'fred' and your project name in place of 'rubyinstaller':
svn import svn+ssh://fred@rubyforge.org//var/svn/rubyinstaller
Here are some notes - thanks to Nick Skriloff for putting these
together - about connecting to a RubyForge Subversion repository from
Windows using the cvillejam project as an example:
I will first explain how to get the command line option working. Then I will get TortiseSVN working. This is all on Windows XP.
c:\Program Files\putty.
c:\Program Files\putty) in the windows path and validate that you can run from a windows command line:
plink@rubyforge.org svnserve -t
Mine looked like
C:\>plink skriloffn@rubyforge.org svnserve -t ( success ( 1 2 ( ANONYMOUS EXTERNAL ) ( edit-pipeline ) ) )
public.ppk and private.ppk. I saved them in c:\Program Files\putty\. Note) Putty is going to use the private.ppk key and RubyForge is going to use the public.ppk.
Session--Host=rubyforge.org,protocol=ssh Session.Logging--Save a log file somewhere in case there are problems Connection.Data--auto-login username=(I used skriloffn) ssh--Preferred ssh protocol version=1 ssh.auth--private key file for authentication c:\Program Files\putty\private.ppk
Make sure you save this session. For my example I saved it as cvilleCodeJam.
plink @rubyforge.org svnserve -t with plink cvilleCodeJam svnserve -t. Mine looked like:
C:\temp\tempJam\cvillejam\ideas>plink cvilleCodeJam svnserve -t ( success ( 1 2 ( ANONYMOUS EXTERNAL ) ( edit-pipeline ) ) )
Hit enter and you will be back to a command prompt.
C:\Documents and Settings\\Application Data\Subversion\config File and change line 41 or so:
### Section for configuring tunnel agents. [tunnels] ssh=plink
svn checkout svn+ssh://cvilleCodeJam/var/svn/cvillejam
You should see the files checked out. FYI the url=svn+ssh://cvilleCodeJam/var/svn/cvillejam. You can now run svn help to see how to commit files.
TortiseSVN:
svn+ssh://cvilleCodeJam/var/svn/cvillejam. Because you have the putty session and putty is in your path, Tortise will find it.
If you're looking to get Subversion+TextMate+RubyForge working, check out this post by Aaron Smith.
If you're using SvnX, check out this post by Jacques Distler.
* CVS notes
You've probably got some code you want to import into the CVS repository. You can do that by setting your CVSROOT. Note that if you're running Windows, the CVS client from here may work better than the one from cvsnt.org. Note also that [myprojectname] is your "unix name" - i.e., no spaces or other "funny characters" - so for the "Mini Ruby Wiki" project, for example, the "unix name" is "minirubywiki":
$ CVSROOT=:ext:tom@rubyforge.org:/var/cvs/[myprojectname] && export CVSROOTand your CVS_RSH:
$ CVS_RSH=ssh && export CVS_RSHusing then the CVS import command. So, for example, if you were importing a "support" module, the import command would look like this:
$ cvs import -m "initial import" support tom start N support/test.txt No conflicts created by this import
Note that when doing a cvs import:
How do I get diff emails when I commit code?
$ CVSROOT=:ext:tom@rubyforge.org:/var/cvs/support && export CVSROOT $ cvs co CVSROOT cvs server: Updating CVSROOT U CVSROOT/checkoutlist U CVSROOT/commitinfo U CVSROOT/config U CVSROOT/cvswrappers U CVSROOT/editinfo U CVSROOT/loginfo U CVSROOT/modules U CVSROOT/notify U CVSROOT/passwd U CVSROOT/rcsinfo U CVSROOT/readers U CVSROOT/taginfo U CVSROOT/verifymsg [tom@hal tmp]$
Now edit your CVSROOT/loginfo file and put your email address (or a list address ) in there:
$ cat CVSROOT/loginfo | grep "@" DEFAULT /usr/local/bin/syncmail %s tom@infoether.com
And check it back in
$ cvs -q ci -m "Added commit email notification" CVSROOT/ Checking in CVSROOT/loginfo; /var/cvs/support/CVSROOT/loginfo,v <-- loginfo new revision: 1.5; previous revision: 1.4 done cvs server: Rebuilding administrative file database [tom@hal tmp]$
Try committing some code; you should get an email shortly containing a list of files modified.
Here are some notes from Vincent Fourmond on setting up commit emails for a Subversion project:
To turn on commit mails for project qtodo, write a file called post-commit with the following contents:
#!/bin/sh REPOS="$1" REV="$2" PATH=/usr/bin:/bin:/usr/local/bin PROJECT=/var/svn/qtodo svnnotify --repos-path "$REPOS" --revision "$REV" --svnlook /usr/local/bin/svnlook --to qtodo-commits@rubyforge.org --from nobody@rubyforge.org --with-diff --subject-cx --handler HTML::ColorDiff
I guess you'll find which bits to change to suit your needs ;-). Then, run sftp:
sftp devel@rubyforge.org:/var/svn/qtodo/hooksThen from sftp, run the following command:
put post-commit chmod 755 post-commit
That's it, run a dummy commit to check the emails are reaching you. To turn it off, log in again using sftp, and run:
rm post-commit
Note you can also do something like:
--to qtodo-commits@rubyforge.org --from `whoami`@rubyforge.org
This way, the "from" address corresponds to the rubyforge
developer's address. Chris Guidry notes that if you do this you'll need to
tweak the "accepted non-members" Mailman list setting to be ^.*\@rubyforge\.org.
What's all this trove stuff about?
The Trove is accessed in the website navigation
bar atop the RubyForge home page by clicking on the Project Tree tab. You'll
probably want to categorize your project in the Trove so that other
folks can find it more easily. To do this, log in, go to your project's
admin page, and click on the "Trove Categorization:: [Edit]" link in
the middle of the page.
Got any Wiki support?
You can
enable a Wiki for your project by clicking over to your project's
summary page, clicking the Admin tab, clicking the "Edit Public Info"
link, and selecting the 'Wiki' check box. Some notes on how to do Wiki
formatting are here.
Also, to link to an external site from your Wiki, use "HTTP", not
"http". This is an anti-spam technique, which seem to help reduce it a
bit, curse those spammers!
I deleted a gem from my file releases page, but it still shows up when I do a gem
list --remote some_gem_name ! How do I remove it entirely?
This means your gem is stuck in the gemserver mirror rotation. If this happens
and you're sure you want to get rid of it, you can file a
support
request.
Just include something like 'please remove my_gem_name from the gem
server' as your
summary. Once I remove them from the gems directory it will take a day or two for them to go away completely since this depends on a full gem index rebuild happening.
Note that this tedious procedure will probably go away as we transition to gemcutter; no doubt there will be a user interface around this so's you can manage your own gems.
generic_nonmember_action radiobuttons, and then select "discard". Right below that, select "no" beside the forward_auto_discards setting. Then click "Submit your changes". No more annoying emails!
max_days_to_hold setting as you see fit. Can I host a Rails plugin on RubyForge?
Thanks to Zak Mandhro for writing up these instructions!
If you are using Subversion as your SCM, all you need to do is create a folder structure for the plugin within your SVN tree and provide your users with a link to web-svn. If you are using CVS, you'd want to keep reading.
Simply putting your plugin source files in your project web folder will not work because RubyForge web server's auto-generated index page is not compatible with Rails plugin HTTP fetcher. I've created a Rake extension that will generate the index files and structure for publishing your plugin. You can get it from here.
full_name
differs notably from the gem file name, it won't be deployed to the gem
index. This is to prevent someone from deploying a gem with a file name
of mygem-0.1.gem and a full_name of rails-4.2.gem
and hijacking the Rails gem's spot in the index. You may well
experience this if you give a gem a platform-specific name that differs
greatly from the filename; I'm still not sure of the best way of making
this work.Some projects want to have only one 'main directory' in their repository, so that it would look like
svn://rubyforge.org/var/svn/some_project/trunk svn://rubyforge.org/var/svn/some_project/branches svn://rubyforge.org/var/svn/some_project/tags
You can create this structure as a project admin by running these commands:
svn mkdir svn+ssh://developername@rubyforge.org/var/svn/project/trunk svn mkdir svn+ssh://developername@rubyforge.org/var/svn/project/tags svn mkdir svn+ssh://developername@rubyforge.org/var/svn/project/branches
Another way is to do subprojects:
svn://rubyforge.org/var/svn/some_project/subproject_1/trunk svn://rubyforge.org/var/svn/some_project/subproject_1/branches svn://rubyforge.org/var/svn/some_project/subproject_1/tags
and so on for other subprojects. Finally, I would say that usually, you check out a svn repository with the following command:
svn co svn+ssh://deve@rubyforge.org/var/svn/some_project/trunk some_project
This way, the trunk directory is mapped as a some_project directory on your local copy: it is much easier to work on.
The files in my virtual host aren't group-writeable!
If you have several people uploading files to your virtual host, the permissions maybe get messed up - for example, the files might not be group-writeable. As the project admin, you can fix this by logging in, clicking on the "admin" tab of the project, and then clicking the "Schedule a reset of virtual host permissions to be group-writeable" button on the left side of the page. This will cause the permissions to be reset next time the appropriate cronjob runs - which happens once a minute.
Anonymous cvs/svn checkouts and exports keep failing
Sometimes you'll see a svn: Connection closed unexpectedly error message when you try to export or check out a Subversion repository using anonymous Subversion - e.g., svn co svn://rubyforge.org/var/svn/rspec/trunk/rspec rspec. Or with CVS, the message will be something like cvs [checkout aborted]: end of file from server (consult above messages if any). This is probably happening because we throttle anonymous connections based on server load (using xinetd). You may instead want to use HTTP for anonymous Subversion checkouts instead -e.g., svn co http://rspec.rubyforge.org/svn/trunk/rspec rspec.
I can't push to my project's Git repository!
RubyForge Git repositories are managed via gitosis; gitosis does authentication via public keys. This means that in order to push to a RubyForge Git repository you'll need to upload a public key to your account - see notes on that here. Additionally, you need to ensure that your public key has a comment on the end, as gitosis uses that as the key file name. You can generate a public key with a comment on the end by using ssh-keygen -t dsa -C "your_user_name@some_host".
Generally, Git support is something we've just introduced, so feedback about it on the forums would be quite welcome.
How do I start my Git repository?
If you have code in an existing Subversion repository, you'll probably want to copy over that code with all the history. To do this, use git svn clone. For example, if your project was named ai-app-prog, you would clone the repository:
$ git svn clone -s http://ai-app-prog.rubyforge.org/svn/ ai-app-prog Initialized empty Git repository in /Users/tom/rubyforge.org/ai-app-prog/.git/ r1 = e696a12eafd7b8285b7277e8afd5fa5561275690 (trunk) A CVSROOT/readers [ ... etc ... ] r333 = d92f63303603ec14bc094efc4d285f1053ae728f (trunk) Checked out HEAD: http://ai-app-prog.rubyforge.org/svn/trunk r333
You'll probably want to run a git repack right away; this can reduce the disk usage of your project by an order of magnitude. I used to recommend git gc --aggressive here, but apparently repack is just as good if not better. Continuing with the ai-app-prog project example:
$ cd ai-app-prog $ git repack -ad --depth=250 --window=250 Counting objects: 184, done. Delta compression using up to 2 threads. Compressing objects: 100% (96/96), done. Writing objects: 100% (184/184), done. Total 184 (delta 77), reused 184 (delta 77)
Now file a "convert my project from svn to git" support request. Once someone posts a note to it saying 'you're all set', then delete the remote branches in your repository. You can list them with git branch -r and delete them with git branch -r -d trunk_or_some_other_tag_name. If there's a more straightforward way to accomplish this, please let me know, thanks!
Once all that's done, add the remote repository and push to it:
$ git remote add origin gitosis@rubyforge.org:ai-app-prog.git $ git push origin master:refs/heads/master Initialized empty Git repository in ./ Counting objects: 1954, done. Delta compression using up to 2 threads. Compressing objects: 100% (1096/1096), done. Writing objects: 100% (1954/1954), 336.65 KiB | 23 KiB/s, done. Total 1954 (delta 655), reused 1954 (delta 655) refs/heads/master: 0000000000000000000000000000000000000000 -> d92f63303603ec14bc094efc4d285f1053ae728f To gitosis@rubyforge.org:ai-app-prog.git * [new branch] master -> master
Now you can browse around your project, e.g., http://ai-app-prog.rubyforge.org/git?p=ai-app-prog.git;a=tree
Alternatively, if this is a new project and you have no history to import, you can just file your project request and once it's approved initialize a repository and push it up, e.g.:
mkdir my_project cd my_project git init git remote add origin gitosis@rubyforge.org:my_project.git echo "Initial push for my_project" > README git add README git commit -a -m "Added a README file" git push origin master:refs/heads/master
Dr. Nic Williams wrote up some excellent suggestions for working with RubyForge's Git repos.
Some folks have reported very slow downloads. This may be some network congestion problem between your computer and the Bytemark file server. If you observe this, you can download a file directly from RubyForge by tacking /noredirect onto the end of the URL. For example, if you were downloading the Ruby Windows installer at http://rubyforge.org/frs/download.php/69035/rubyinstaller-1.9.1-p378-rc2.exe, you could download it directly from RubyForge by hitting http://rubyforge.org/frs/download.php/69035/rubyinstaller-1.9.1-p378-rc2.exe/noredirect.
Generally we prefer folks to use the usual links that hit the file mirror - this lightens the RubyForge network load. But this workaround is provided just to cover the bases.