Difference between revisions of "Newbie Guide: Getting Started on Windows"

From Dreamwidth Notes
Jump to: navigation, search
m
(minor updates and clarifications)
Line 5: Line 5:
 
= Contributor Licensing Agreement =
 
= Contributor Licensing Agreement =
  
The very first thing you need to do is [[Contributor_Licensing_Agreement|read and sign your CLA]] and mail it to Denise. If you don't agree with its terms Dreamwidth won't be able to accept your code; if you've submitted code but Denise doesn't have your CLA your code can't be added. So read it, think it over, sign it, mail it then wait until you're told it's been received. Now you can get started.
+
The very first thing you need to do is [[Contributor_Licensing_Agreement|read and sign a Contributor Licensing Agreement]] and mail it to Denise. If you don't agree with its terms Dreamwidth won't be able to accept your code; if you've submitted code but Denise doesn't have your CLA your code can't be used. So read it, think it over, sign it, mail it then wait until you're told it's been received. Now you can get started.
  
  
Line 14: Line 14:
 
So what do you need?
 
So what do you need?
  
# You need a github.com account to be able to fetch the Dreamwith code, copy it, browse and claim issues (i.e. bugs), and publish your patches so they can be integrated to the main code. This is both where all the Dreamwidth code comes from and where your own code will end up but it's mostly a gateway. You won't do much work on the site itself.
+
# You need a github.com account to be able to fetch and copy the Dreamwith code, find issues to work on, and publish your code so it can be integrated to Dreamwidth. This is both where all the Dreamwidth code comes from and where your own code will end up but you won't do much work on the site 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 can modify.
+
# 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 can whatever you want with.
 
# You need PuTTY to connect github.com to your Dreamhack, to connect your Dreamhack to github.com, and manage your work. Think of PuTTY as your command center.
 
# You need PuTTY to connect github.com to your Dreamhack, to connect your Dreamhack to github.com, and manage your work. Think of PuTTY as your command center.
 
# You need WinSCP to visualize your Dreamhack files and be able to open them in a text editor. Think of WinSCP as a Dreamhack Explorer.
 
# You need WinSCP to visualize your Dreamhack files and be able to open them in a text editor. Think of WinSCP as a Dreamhack Explorer.
 
# You need a text editor to edit your files.
 
# You need a text editor to edit your files.
 
Each section mentions where you need to do things so you won't get lost.
 
  
 
== Create an account on GitHub ==
 
== Create an account on GitHub ==
  
Go to [http://www.github.com/ GitHub], click on 'sign up and pricing' and create a free account. I suggest you pick a username people are familiar with. It is also best if your github username and your Bugzilla name match.
+
Go to [https://github.com/ GitHub] and create your account.
  
  
Line 31: Line 29:
 
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 everybody knows the two are connected.
 
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 everybody knows the two are connected.
  
Dreamwidth is divided into two parts: an 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 (e.g. the logo) and external elements Dreamwidth is allowed to use on its own site but not redistribute to other sites.  
+
Dreamwidth is divided into two parts: an 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 (e.g. the logo) and external elements Dreamwidth is allowed to use on its own site but can't 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 free part go to https://github.com/dreamwidth/dw-free and click on Fork on the upper right corner.
Line 40: Line 38:
 
== Get a Dreamhack ==
 
== Get a Dreamhack ==
  
Apply for a Dreamhack by [http://hack.dreamwidth.net/apply.shtml filling this form]. The two important fields are 'your desired username' and 'your email address'. Your username is used to manage your Dreamhack and create the URL where your Dreamhack will be located at so you can pick anything. Your email address is used to send you important information and various alerts.
+
Apply for a Dreamhack by [http://hack.dreamwidth.net/apply.shtml filling this form]. You can pick anything as your username as this will only be used to log in and in your Dreamhack URL. The email address you choose is used to send you important info and alerts.
: N.B. Some users like having a separate adress for their dev work but it's entirely up to you!
+
: N.B. Some users like having a separate address for their dev work but it's entirely up to you!
  
 
Once you're done, you should get an email with your login username and a password. Don't lose it.
 
Once you're done, you should get an email with your login username and a password. Don't lose it.
Line 48: Line 46:
 
== Install PuTTY ==
 
== Install PuTTY ==
  
* Download 'Windows installer for everything except PuTTYtel' .exe file at [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] and install it.
+
* Download it at [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html] 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.
 
* 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.
Line 66: Line 64:
 
== Install WinSCP ==
 
== Install WinSCP ==
  
* Install [http://winscp.net/eng/download.php 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. Either mode is fine. Pick what you're most used to.
+
* Install it at [http://winscp.net/eng/download.php]. 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 works like Windows Explorer and only display your Dreamhack files. Either mode is fine. Pick what you're most used to.
  
 
* Use "hack.dreamwidth.net" for the host name. Enter your username and the password you typed when you did <code>passwd</code> on PuTTY. Click on Save then on Login.
 
* Use "hack.dreamwidth.net" for the host name. Enter your username and the password you typed when you did <code>passwd</code> on PuTTY. Click on Save then on Login.
Line 123: Line 121:
 
= Make changes to your Dreamhack =
 
= Make changes to your Dreamhack =
  
== Find or file a bug ==
+
== Find and claim issues ==
  
 
<strong>--> on github.com</strong>
 
<strong>--> on github.com</strong>
  
* To find or file: https://github.com/dreamwidth/dw-free/issue or https://github.com/dreamwidth/dw-nonfree/issues.
+
Issues are listed at https://github.com/dreamwidth/dw-free/issue and https://github.com/dreamwidth/dw-nonfree/issues. You can use the labels on the right to browse them more easily or the search bar at the top for something more specific.
 
+
Once you've found something you like comment on the issue to 'claim' it.
* To assign an issue to yourself: PROCESS TO BE DETERMINED YET.
+
  
  
Line 146: Line 143:
 
<syntaxhighlight lang="bash">git checkout develop</syntaxhighlight>
 
<syntaxhighlight lang="bash">git checkout develop</syntaxhighlight>
  
* Now you can create a new branch specifically dedicated to the bug you want to work on:
+
* Now you can create a new branch specifically dedicated to the issue you want to work on:
  
 
<syntaxhighlight lang="bash">git branch BRANCH_NAME</syntaxhighlight>
 
<syntaxhighlight lang="bash">git branch BRANCH_NAME</syntaxhighlight>
  
: N.B. It is best if you use the bug number and a short description as your branch name: <code>bug####/short_description</code>
+
: N.B. Use the issue number and a short description as your branch name: <code>issue#xxx/short_description</code>
  
* To switch to this branch, use the <code>checkout</code> command again:
+
* Switch to your new branch:
  
 
<syntaxhighlight lang="bash">git checkout BRANCH_NAME</syntaxhighlight>
 
<syntaxhighlight lang="bash">git checkout BRANCH_NAME</syntaxhighlight>
Line 161: Line 158:
 
== Work, work, work ==
 
== Work, work, work ==
  
<strong>--> in WinSCP and your editor</strong>
+
<strong>--> in WinSCP and your text editor</strong>
  
 
* In WinSCP right click to edit the file you want to work on.
 
* In WinSCP right click to edit the file you want to work on.
Line 167: Line 164:
 
* Remember that the free part of the code is in <code>~/dw/*</code> while the non-free part is in <code>~/dw/ext/dw-nonfree/*</code>.
 
* Remember that the free part of the code is in <code>~/dw/*</code> while the non-free part is in <code>~/dw/ext/dw-nonfree/*</code>.
  
* Site pages are either [[BML|.bml]] or [[TT|.tt]] files. You can find them in <code>~dw/htdocs/</code> and <code>~dw/views/</code>. They may use .pm modules/widgets, found in <code>~dw/cgi-bin/LJ/</code> and <code>~dw/cgi-bin/DW/</code>.
+
* Site pages are either [[BML|.bml]] or [[TT|.tt]] files. You can find them in <code>~dw/htdocs/</code> and <code>~dw/views/</code>. They may use .pm modules and widgets, found in <code>~dw/cgi-bin/LJ/</code> and <code>~dw/cgi-bin/DW/</code>.
  
* Text strings which are not in <code>~dw/htdocs/xxx.bml.text</code> and <code>~dw/views/xxx.tt.text</code> are in <code>~dw/bin/upgrading/en.dat</code>.
+
* Text strings which are .text files (<code>~dw/htdocs/xxx.bml.text</code> and <code>~dw/views/xxx.tt.text</code>) or in <code>~dw/bin/upgrading/en.dat</code>.
  
 
* For more specific searches, see [[Dev_Finding_Things|this article]] on how to use <code>rgrep</code> and <code>find</code>.
 
* For more specific searches, see [[Dev_Finding_Things|this article]] on how to use <code>rgrep</code> and <code>find</code>.
Line 201: Line 198:
 
<syntaxhighlight lang="bash">git add .</syntaxhighlight>
 
<syntaxhighlight lang="bash">git add .</syntaxhighlight>
  
* If you realize you need to do some more work, edit files again and use <code>add</code> again when you're done. It's that simple.
+
* If you realize you need to do some more work, edit the files again and use <code>add</code> when you're done. It's that simple.
  
  
Line 216: Line 213:
 
* Here's an example of commit message:
 
* Here's an example of commit message:
  
<code>(Bug #123) Short subject
+
<code>(Issue #123) Short subject
  
 
Patch description
 
Patch description
Line 233: Line 230:
  
  
= Go from private to public =
+
= Publish your code =
  
== Push the changes to your github.com repository ==
+
== Push your code to your github.com repository ==
  
 
<strong>--> in PuTTY</strong>
 
<strong>--> in PuTTY</strong>
Line 244: Line 241:
  
  
== Request your changes to be pulled into the original Dreamwidth repository ==
+
== Request your code to be pulled into the original Dreamwidth repository ==
  
 
<strong>--> on github.com</strong>
 
<strong>--> on github.com</strong>
  
 
Go to your profile page on GitHub. Select the Public Activity tab. Spot the line where it says you've created a new branch. Click on the branch name then on Compare and Pull Request. Once you've checked things over, click on Send Pull Request on the right side.
 
Go to your profile page on GitHub. Select the Public Activity tab. Spot the line where it says you've created a new branch. Click on the branch name then on Compare and Pull Request. Once you've checked things over, click on Send Pull Request on the right side.
 +
Comment on the pull request to say it fixes issue #xxx.
  
 
: N.B. If there's an unusual delay between the moment you pushed your branch and the moment it appears on GitHub, [https://status.github.com/ check the status page].
 
: N.B. If there's an unusual delay between the moment you pushed your branch and the moment it appears on GitHub, [https://status.github.com/ check the status page].
Line 257: Line 255:
 
<strong>--> on github.com</strong>
 
<strong>--> on github.com</strong>
  
* You'll get an email once your pull request has been merged into the original develop branch, and the issue will be closed if no more work is needed.
+
* You'll get a notification once your pull request has been merged into the original develop branch, and the issue will be closed if no more work is needed.
  
 
* On your profile your request will be marked as merged.
 
* On your profile your request will be marked as merged.

Revision as of 11:45, 3 May 2014

Note: Feel free to correct, expand, do anything which could make this better and clearer. ^_^
Note: If you have a different OS you may still find this helpful. While you may not need to install and set up any software the rest is pretty much universal.

Contributor Licensing Agreement

The very first thing you need to do is read and sign a Contributor Licensing Agreement and mail it to Denise. If you don't agree with its terms Dreamwidth won't be able to accept your code; if you've submitted code but Denise doesn't have your CLA your code can't be used. So read it, think it over, sign it, mail it then wait until you're told it's been received. Now you can get started.


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?

  1. You need a github.com account to be able to fetch and copy the Dreamwith code, find issues to work on, and publish your code so it can be integrated to Dreamwidth. This is both where all the Dreamwidth code comes from and where your own code will end up but you won't do much work on the site itself.
  2. 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 can whatever you want with.
  3. You need PuTTY to connect github.com to your Dreamhack, to connect your Dreamhack to github.com, and manage your work. Think of PuTTY as your command center.
  4. You need WinSCP to visualize your Dreamhack files and be able to open them in a text editor. Think of WinSCP as a Dreamhack Explorer.
  5. You need a text editor to edit your files.

Create an account on GitHub

Go to GitHub and create your account.


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 everybody knows the two are connected.

Dreamwidth is divided into two parts: an 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 (e.g. the logo) and external elements Dreamwidth is allowed to use on its own site but can't redistribute to other sites.


Get a Dreamhack

Apply for a Dreamhack by filling this form. You can pick anything as your username as this will only be used to log in and in your Dreamhack URL. The email address you choose is used to send you important info and alerts.

N.B. Some users like having a separate address for their dev work but it's entirely up to you!

Once you're done, you should get an email with your login username and a password. Don't lose it.


Install PuTTY

  • Download it at [1] 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 email when asked. Note that characters aren't displayed and the cursor doesn't move. It's normal.
  • Change your password by typing:
passwd
  • Your default Dreamhack account is called 'system'. Set its password with this command:
$LJHOME/bin/upgrading/make_system.pl


Install WinSCP

  • Install it at [2]. 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 works like Windows Explorer and only display your Dreamhack files. Either mode is fine. Pick what you're most used to.
  • 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.


Set things up

Further configuration steps

These are not mandatory but will certainly make your life easier.

Change some git settings

In PuTTY, I suggest going through all the steps mentioned in this section.


Give special abilities to your system account


Get rid of invite codes

  • In WinSCP, go to /dw/ext/local/etc/, and double-click on config.pl. Find $USE_ACCT_CODES = 1; and change 1 to 0. Save your file.


Customize PuTTY and Notepad++

See these articles for details: PuTTY, Notepad++.


Update your code

--> in PuTTY

Code is committed by developers all the time. You must always update your repositories before you do anything else.

  • Make sure to check for updates as the script occasionally changes.
N.B. To create a new file open WinSCP, right click into the correct folder (/bin here) then click on New/File.


Make changes to your Dreamhack

Find and claim issues

--> on github.com

Issues are listed at https://github.com/dreamwidth/dw-free/issue and https://github.com/dreamwidth/dw-nonfree/issues. You can use the labels on the right to browse them more easily or the search bar at the top for something more specific. Once you've found something you like comment on the issue to 'claim' it.


Create a branch stemming from develop

Important: in PuTTY, you can get explanations about bash commands using help COMMAND (e.g. help cd) and any git commands using git COMMAND -h (e.g git pull -h).

--> in PuTTY

  • Pick the correct repository:
    • if you want to work in dw-free you need to be in ~/dw$. If you're not type cd $LJHOME.
    • if you want to work in dw-nonfree you need to be in ~/dw/ext/dw-nonfree$. If you're not type cd $LJHOME/ext/dw-nonfree
  • Then make sure you're in the develop branch using the checkout command:
git checkout develop
  • Now you can create a new branch specifically dedicated to the issue you want to work on:
git branch BRANCH_NAME
N.B. Use the issue number and a short description as your branch name: issue#xxx/short_description
  • Switch to your new branch:
git checkout BRANCH_NAME
  • And that's it. Now you can start coding!


Work, work, work

--> in WinSCP and your text editor

  • In WinSCP right click to edit the file you want to work on.
  • Remember that the free part of the code is in ~/dw/* while the non-free part is in ~/dw/ext/dw-nonfree/*.
  • Site pages are either .bml or .tt files. You can find them in ~dw/htdocs/ and ~dw/views/. They may use .pm modules and widgets, found in ~dw/cgi-bin/LJ/ and ~dw/cgi-bin/DW/.
  • Text strings which are .text files (~dw/htdocs/xxx.bml.text and ~dw/views/xxx.tt.text) or in ~dw/bin/upgrading/en.dat.
  • For more specific searches, see this article on how to use rgrep and find.


Test your changes

--> on your Dreamhack

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.

N.B. In some rare instances, your changes won't go live instantly on your hack and you may need to update your database first.


Mark your changes as ready to be committed

--> in PuTTY

Before being committed, work is moved to the index or staging area. Think of it as the "Ready? Steady?" before the "Go!". At this point nothing is definite and you can easily change things.

  • To add the changes you've made on a specific file:
git add FILE_NAME
  • To add all files which have been edited or deleted at once:
git add -u
  • To add all files which have been added, deleted or edited at once:
git add .
  • If you realize you need to do some more work, edit the files again and use add when you're done. It's that simple.


Commit your changes

--> in PuTTY

  • If you think you're done with your work at this point you can commit your changes:
git commit
  • This will open the nano editor so you can type a commit message. Unfortunately, nano isn't very easy to type into (you can't use the number pad for instance) so I advise you to type your commit message in your text editor then paste it in nano (right click in PuTTY to paste).
  • Here's an example of commit message:

(Issue #123) Short subject

Patch description

Description can go on several short lines.

  • Hit Ctrl+X, 'y' then Enter to save your message.
  • If you you need to do some more work later you can update your commit:
git commit --amend
N.B. You can also do this if you need to edit your commit message.
  • If you want to pace yourself or be easily able to go back to a certain point in your work you can do successive commits instead of one big final one.


Publish your code

Push your code to your github.com repository

--> in PuTTY

You should only push your changes to your develop branch on github.com once you're happy with your patch as things are a bit harder to change at this point. Once you've finished your work use the push command and the branch name:

git push origin BRANCH_NAME


Request your code to be pulled into the original Dreamwidth repository

--> on github.com

Go to your profile page on GitHub. Select the Public Activity tab. Spot the line where it says you've created a new branch. Click on the branch name then on Compare and Pull Request. Once you've checked things over, click on Send Pull Request on the right side. Comment on the pull request to say it fixes issue #xxx.

N.B. If there's an unusual delay between the moment you pushed your branch and the moment it appears on GitHub, check the status page.


What now?

--> on github.com

  • You'll get a notification once your pull request has been merged into the original develop branch, and the issue will be closed if no more work is needed.
  • On your profile your request will be marked as merged.
  • That's it! You're done. Congratulations!


Help!

If something's wrong you can always ask for help at [info]dw_dev_training or on the #dreamwidth-dev IRC channel.


Reading / References

To understand things better, I suggest reading the GitHub Workflow guide from github.com, relevant sections of Git - The Simple Guide, watching part of Git for Ages 4 and Up (Watch on YouTube or Download), and reading the first three chapters of Pro Git.

For lots of useful commands, see these how-tos.

Other useful references: