Newbie Guide for Windows People Working on Minor Bugs
Contents
- 1 What do you need and why?
- 2 Set things up
- 3 Make sure things are up-to-date
- 4 Make changes to the code
- 5 Test your changes on your Dreamhack
- 6 Request your changes to be pulled into Dreamwidth
- 7 More: checking things
- 8 More: stashing your changes before updates
- 9 More: renaming and deleting branches
- 10 More: troubleshooting tips
- 11 References
What do you need and why?
Because you're on Windows, you have to use quite a number of tools to access and manage things so this part might seem a little daunting. The good news is that 1) you're used to being flexible and resourceful, right? 2) once you've got everything set up things will be much simpler and intuitive.
So what do you need?
- You need a Github account to be able to fetch the Dreamwith code, create your own copies of it, and upload your own changes. This is both where all the Dreamwidth code comes from and where your own code will end on but it's only a gateway: you can't do much on github.com itself.
- You need a Dreamhack to see what your changes will do on the site for real. Think of a Dreamhack as an online mirror of the Dreamwidth site which you get to play with and modify.
- You need PuTTY to connect GitHub to your Dreamhack, to connect your Dreamhack to GitHub, and access and manage everything. In short, PuTTY is your true command center.
- You need WinSCP to visualize your Dreamhack files and be able to open them in a text editor. It's pretty much like Explorer for your Dreamhack.
- You need a text editor to edit your files.
- You need a Bugzilla account to find bugs, files bugs and upload patches.
Create an account on GitHub
Go to GitHub, click on 'sign up and pricing' and create a free account. I suggest you pick a username people are familiar with and the same username you'll have on your Bugzilla account.
Get a Dreamhack
Apply for a Dreamhack by filling this form. The two important fields are 'your desired username' and 'your email address'. Your username is used to manage your Dreamhack and to create the URL where your Dreamhack will be located at so you can pick anything. Your email address is used to send you a welcome e-mail which contains important information as well as various alerts. You can pick any of your existing email addresses or choose to create an email account entirely devoted to your development work.
Once you're done, you should get an e-mail with your login username and a password. Don't lose it.
Install PuTTY
- Download 'Windows installer for everything except PuTTYtel' .exe file at PuTTY and install it.
- Run PuTTY. In the configuration window, enter "hack.dreamwidth.net" for the host name. Go to Connection/Data and enter the username/login given to you in the welcome e-mail. It should be something like dh-username.
- Click on Open. If you get a pop-up message about a key, click Yes.
- Enter the password given to you in the welcome e-mail when asked. Note that no characters are displayed and the cursor won't move. It's normal.
- Change your password by typing:
passwd
- Your default Dreamhack account is called system. Type this to set its password:
$LJHOME/bin/upgrading/make_system.pl
Install WinSCP
- Install WinSCP. During the installation, you may be asked about the mode you prefer: Commander and Explorer. Commander works like an FTP client: a partitioned window with your computer files on one side and the Dreamhack files on the other. Explorer will only display your Dreamhack files and works like Windows's Explorer. I prefer this mode because I rarely need to access my computer files but choose what's easiest for you.
- Use "hack.dreamwidth.net" for the host name. Enter your username and the password you typed when you did
passwd
on PuTTY. Click on Save then on Login.
Get a good text editor
While you can use Notepad, I recommend Notepad++ instead. It's free, simple and will make editing much easier.
Create a Bugzilla account
Simply click here.
- N.B. As mark explained here, go to Name and Password and enter your name following this format:
Name [:username]
. 'Name' can be your real name, a nickname, your username again, etc. You don't have to give your real name if you don't want to.
Set things up
On your GitHub account
You need to fork the Dreamwidth code onto your own account. Forking is like cloning and branching. It will copy the code and also label your copy as being a branch (a fork) of the original Dreamwidth code so that we know the two are connected.
Dreamwidth is divided into two parts: a open-source part called 'dw-free', and a private part called 'dw-nonfree'. The private part is composed of elements which are specific to dreamwidth.org and can't be used on other sites (the logo for example) and external elements Dreamwidth is allowed to use on its own site but not redistribute to other sites.
- To fork the free part go to https://github.com/dreamwidth/dw-free and click on Fork on the upper right corner.
- To fork the nonfree part go to to https://github.com/dreamwidth/dw-nonfree and do the same.
On your Dreamhack
Now you need to 'import' both of these onto your Dreamhack and link them to the original Dreamwidth repositories on GitHub so you can easily fetch updates.
To do so, follow all the steps from this point on until you start your server again (but skip the 'non-dreamhack users' section, of course).
Further configuration steps
These are not mandatory but will make your life easier.
Change some git settings
On PuTTY, I suggest going through all the steps mentioned in this section.
Give special abilities to your system account
- Log in to your Dreamhack (http://www.USERNAME.hack.dreamwidth.net/) using system and your password.
- Go to http://www.USERNAME.hack.dreamwidth.net/admin/priv/. Click on 'payments' type 'system' in the User field then click on 'Make Changes'. The system account now has the ability (called 'privilege' or 'priv') to give paid time to any account.
- Go to http://www.USERNAME.hack.dreamwidth.net/admin/pay. Type 'system' in the Edit user field and click on Go. Make your account a seed one.
Get rid of invite codes
- In WinSCP, go to
/dw/ext/local/etc/
, and double-click onconfig.pl
. Find$USE_ACCT_CODES = 1;
and change 1 to0
. Save your file.
- In PuTTY, type this to make the changes go live on your Dreamhack:
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb $LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb $LJHOME/bin/upgrading/texttool.pl load
Customize PuTTY and Notepad++
See these articles for details: PuTTY, Notepad++.
Make sure things are up-to-date
Important: you can generally get explanations about any bash command using help COMMAND
(e.g. help cd
) and any git command using git COMMAND -h
(e.g git pull -h
) or git COMMAND --help
.
Update your code
Code is committed by developers all the time. You must always update your repositories before you do anything else.
- Use the
pull
command to fetch updates to each of the base branch:
cd $LJHOME git pull dreamwidth develop:develop git pull dreamwidth master:master
- Then use the
push
command to forward the changes on your GitHub fork:
git push origin develop git push origin master
- N.B. When you do this you be will asked for your password on GitHub. Again, the cursor won't move as you type it. This is normal.
- For the nonfree part of the code, the commands are exactly the same except the first one, as nonfree is in a different folder:
cd $LJHOME/ext/dw-nonfree
- You can also create a script to make this process simpler: see this article.
- N.B. To create a new file on WinSCP, right click into the correct folder (
/bin
here) then click on New/File.
Update your database
- We're already seen this once but here it is again:
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb $LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb $LJHOME/bin/upgrading/texttool.pl load
- You can also create a script to make this process simpler: see this article.
Make changes to the code
Find or file a bug
- To find: you can use predefined searches such as unassigned effort-minor.
- Some of these bugs won't appear to require 'minor' effort to you. It's normal. Try to find small bugs among them: minor modifications to be done on one of the site pages (text to be modified; elements to be added, removed or moved; elements to be hidden from some categories of users, etc.).
- To file: make sure it's not already been filed using simple search or advanced search then use this form to file a new bug. Fill and edit the fields as needed.
- To assign a bug to yourself, enter your Bugzilla e-mail address in Assign To and set the status to IN_PROGRESS.
- To make this easier, you can also use one of fu's Greasemonkey scripts: Dreamwidth Bug Grabber. Click on (grab!) next to Assign To and this will edit it and Status for you. Click on Save Changes of course.
Create a branch
You're going to create a new branch on your own copy of the Dreamwidth repository specifically dedicated to the bug you want to work on.
- You do this using the
branch
command. It's best if you use the bug number and a short description as your branch name:
git branch bug###/xxx
- To switch to this branch, use the
checkout
command and the name of your branch:
git checkout bug###/xxx
- You can also create and switch to a branch at the same time using:
git checkout -b bug###/xxx
- And that's it. Now you can start coding!
Edit files
- Use WinSCP to open the file(s) you need to edit.
- Remember that the free part of the code is in
~/dw/*
while the non-free part is in~/dw/ext/dw-nonfree/*
.
- If you're working on site pages, you're working on .bml files. These are in
~dw/htdocs/
or one of the subsequent folders. You'll see that their names correspond to the URLs of site pages. These files may use .pm modules/widgets which are in~dw/cgi-bin/DW/
or~dw/LJ/
.
- For text strings which are not in
~dw/htdocs/xxx.bml.text
files, see~dw/bin/upgrading/en.dat
.
- For more specific searches, you can use the grep command:
grep [option(s)] pattern [file(s)]
Interesting options:
-E: match using extended regular expressions -F: match using fixed strings -r: recursive -i: case insensitive -l: filename only -n: add relative line number
Examples:
grep -ri "find this text" * | more
- This will search for "find this text" in all files and display it page by page.
grep -ril "find this text" * | more
- This will search for "find this text" in all files but only display the relevant filenames and not any excerpts.
grep -rl print_entry $LJHOME/bin/upgrading/s2layers
- This will search for files containing "print_entry" in the /s2layers folder, and only display the filenames as results.
Test your changes on your Dreamhack
- In PuTTY, stop your Dreamhack:
stop-apache
- Update your database by typing this or
dwdb
:
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb $LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb $LJHOME/bin/upgrading/texttool.pl load
- Start your Dreamhack again:
start-apache
- Go to your Dreamhack and test. Edit the files again in WinSCP if more changes are needed. Go through these steps again to test your new changes.
Request your changes to be pulled into Dreamwidth
Commit your changes
- Use the
commit
command:
git commit
- This will also open the nano editor so that you can type a commit message. Mention the bug number again and explain (quite briefly) what your changes do.
- To exit the editor hit Ctrl+X then type Y to save your message.
FIXME: issues with the number pad?
- You can also type the commit message as you commit your changes:
git commit -m "commit message"
- If you've made a mistake you can change your commit message using
--amend
:
git commit --amend -m "new commit message"
Push the changes to your GitHub fork
- Use the
push
command and the branch name to push your changes to GitHub:
git push origin bug###/xxx
Request your changes to be pulled into the main code
- On your GitHub page, click on the correct repository (dw-free or dw-nonfree), select the correct branch in the branch drop-down menu (below 'Clone in Windows') then click on Pull Request (at the top).
FIXME: a link to the bug in Zilla might be a good idea.
Mention the pull request on Bugzilla
- Link to your pull request in a comment.
- Wait for someone to review and commit your patch. You're done. :)
More: checking things
- To check which branch you're on:
git branch
- N.B. The branch you're on is noted with an asterisk.
- To check which files you've edited on the branch you're on and whether these changes have been committed:
git status
- To see the changes you've made on the branch you're on:
git diff
More: stashing your changes before updates
- You can put away your changes if you need to using the
stash
command:
git stash
- Then bring them back with:
git stash pop
More: renaming and deleting branches
- To delete a branch locally:
git branch -d BRANCHNAME
- To rename a branch locally:
git branch -m OLDNAME NEWNAME
- N.B. This will work even if you've committed and pushed some changes already. However, if you have, it will not rename the branch on your GitHub fork but create a new identical one. You will need to delete the branch on GitHub.
- To delete a branch on your GitHub fork:
git push origin --delete BRANCHNAME
More: troubleshooting tips
Issues with text strings
- As denise explained here, you need to delete old text strings and create new ones when you edit .text files or en.dat instead of simply editing the text. If the change isn't critical - the string doesn't need to be renamed or the text change is minor - it's better to notify the site copy team so that text can be changed locally and the original file left alone.
- If text you've modified doesn't appear on the site after a code push, append
?uselang=debug
to the page URL to make sure it's using the right string. If it is and it still doesn't display after a while, comment on dw_maintenance.
Starting over
- If something's really wrong you can also rebuild you Dreamhack and start over.
- Delete your copies of the Dreamwidth repositories:
FIXME