Difference between revisions of "Dev Maintenance"

From Dreamwidth Notes
Jump to: navigation, search
m (Updated reference to omnibus script)
(dwu - Updating the repos: Fix --ff to --ff-only, and add position saving/restoring)
Line 157: Line 157:
  
 
git fetch dreamwidth
 
git fetch dreamwidth
 +
 +
# save our position
 +
OLDDWPOS=$(git rev-parse --abbrev-ref HEAD)
 +
if [[ "$OLDDWPOS" == "HEAD" ]]; then
 +
  OLDDWPOS=$(git rev-parse HEAD)
 +
fi
  
 
# pull changes from dreamwidth
 
# pull changes from dreamwidth
Line 167: Line 173:
 
git push origin develop
 
git push origin develop
 
git push origin master
 
git push origin master
 +
 +
# restore our old position
 +
git checkout "$OLDDWPOS"
 
</source>
 
</source>
  
Line 177: Line 186:
  
 
git fetch dreamwidth
 
git fetch dreamwidth
 +
 +
# save our position
 +
OLDDWPOS=$(git rev-parse --abbrev-ref HEAD)
 +
if [[ "$OLDDWPOS" == "HEAD" ]]; then
 +
  OLDDWPOS=$(git rev-parse HEAD)
 +
fi
  
 
# pull changes from dreamwidth
 
# pull changes from dreamwidth
 
git checkout develop
 
git checkout develop
git pull --ff dreamwidth develop
+
git pull --ff-only dreamwidth develop
 
git checkout master
 
git checkout master
git pull --ff dreamwidth master
+
git pull --ff-only dreamwidth master
  
 
# push them to Github forks
 
# push them to Github forks
 
git push origin develop
 
git push origin develop
 
git push origin master
 
git push origin master
 +
 +
# restore our old position
 +
git checkout "$OLDDWPOS"
  
 
# change to dw-nonfree
 
# change to dw-nonfree
Line 192: Line 210:
  
 
git fetch dreamwidth
 
git fetch dreamwidth
 +
 +
# save our position
 +
OLDDWNFPOS=$(git rev-parse --abbrev-ref HEAD)
 +
if [[ "$OLDDWNFPOS" == "HEAD" ]]; then
 +
  OLDDWNFPOS=$(git rev-parse HEAD)
 +
fi
  
 
# pull changes from dw-nonfree
 
# pull changes from dw-nonfree
 
git checkout develop
 
git checkout develop
git pull --ff dreamwidth develop
+
git pull --ff-only dreamwidth develop
 
git checkout master
 
git checkout master
git pull --ff dreamwidth master
+
git pull --ff-only dreamwidth master
  
 
# push them to Github forks
 
# push them to Github forks
 
git push origin develop
 
git push origin develop
 
git push origin master
 
git push origin master
 +
 +
# restore our old position
 +
git checkout "$OLDDWNFPOS"
 
</source>
 
</source>
  

Revision as of 18:25, 16 May 2013

Note: "We're in the middle of moving over to a git workflow. If you haven't yet moved over to git, see the old instructions. If you're looking to move over, first make sure you've finished Moving your Dreamwidth installation to use Github"

Updating the Dreamwidth code on your Dreamhack

Shutting down apache

It is best to shut your Apache instance down before doing the update process, to make sure that everything, especially scripts in cgi-bin/ are reloaded properly:

stop-apache

Updating dw-free

Okay. Let's say you've been running your Dreamwidth install and you want to pull down the latest and greatest in fixes. This is pretty easy. First, if you are not somewhere in dw-free, get into that directory:

cd $LJHOME

If you have any uncommitted changes in your current branch (use git status to see), you can stash them to do this:

git stash

Then grab updates from the development and master branches of Dreamwidth's repository:

git fetch dreamwidth
git checkout develop && git pull --ff-only dreamwidth develop:develop
git checkout master && git pull --ff-only dreamwidth master:master

You will also want to push the Dreamwidth repository changes to your fork on Github:

git push origin develop
git push origin master

Note: if you are working on uncommitted changes in a branch, any automerge will be canceled. Example:

mw@memewidth:~/dw/src/jbackup$ git pull dreamwidth develop:develop
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 116 (delta 90), reused 88 (delta 62)
Receiving objects: 100% (116/116), 36.23 KiB, done.
Resolving deltas: 100% (90/90), completed with 41 local objects.
From https://github.com/dreamwidth/dw-free
   53294c1..19b8e73  develop    -> develop
error: Your local changes to 'src/jbackup/jbackup.pl' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.

After this, you can checkout the branch you were on previously and pop any work you stashed:

git checkout YOURBRANCH
git stash pop

We will get into merging in changes in the following section.

Pulling changes from Dreamwidth's develop branch your branch(es)

Warning: Pay special attention to stashing unsaved changes! You can lose work if you are not careful about this!

You should be doing your development in branches separate from the main Dreamwidth branches. You can check what branches you currently have in your repository with the command:

git branch

The current branch will have an asterisk next to it. Here is an example:

yourhack@dreamhack.net:~/dw$ git branch
  develop
* feature/Mobile
  master

You can check to see if you have unsaved changes on your currently checked out branch with:

git status

To temporarily save these changes while you make your updates, use:

git stash

To have your branch pick up the changes made on Dreamwidth's development branch:

git pull --rebase --ff-only dreamwidth develop

And if you have saved changes using stash, you can recover them with:

git stash pop

You can change branches with git checkout BRANCH, example:

git checkout feature/Mobile

For those using DW non-free

Repeat for dw-nonfree:

cd $LJHOME/ext/dw-nonfree

git checkout develop && git pull --ff-only dreamwidth develop:develop
git checkout master && git pull --ff-only dreamwidth master:master
git push origin develop
git push origin master

If you have any branches on dw-nonfree, they will also need to be merged with the development branch of dw-nonfree as described in the above section:

git merge develop

Update your database

Now that your code has been updated, update the database:

# order of commands is important
$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

Remember that different branches might have different text strings you have added, and that you might need to update your database for different branches when you are working on them for those text strings to work. The same applies for any database changes made by different branches you are working on.

Restart the server

Now you can restart Apache:

start-apache

Of course, in a production environment, this whole process is not too recommended as you never know what kind of code you're going to get. But for the most part, it's fairly straightforward. (And if you're doing development, this is generally safe.)

Additional Information for Non-Dreamhack Users

This section is only for you if you're running your own installation.

Instead of using start-apache/stop-apache, which are Dreamhack-specific scripts, use these commands:

sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 stop 

You'll also want to update packages on your system at some point. On Ubuntu, this would be done using:

apt-get update
apt-get upgrade

Or, if you want an easy command to run on your dw account in one swoop:

sudo apt-get update && sudo apt-get upgrade

Scripting

Warning: "These scripts have not been throughly tested yet with the new system; they might not be updated entirely or right."

You can, of course, use scripts to make it easier for you to do some of this.

There is an epic "omnibus" script by [info]jeshyr available at http://dw-dev.dreamwidth.org/94822.html which incorporates all the individual scripts listed here and some other useful functions, and includes help information. It'll save you a heap of angst as a beginner!

Some simpler example scripts are given below.

dwu - Updating the repos

Put this code in a file called ~/bin/dwu and make it executable with chmod ugo+x ~/bin/dwu:

#!/bin/bash
 
# make sure we are in the right directory;
cd $LJHOME
 
git fetch dreamwidth
 
# save our position
OLDDWPOS=$(git rev-parse --abbrev-ref HEAD)
if [[ "$OLDDWPOS" == "HEAD" ]]; then
  OLDDWPOS=$(git rev-parse HEAD)
fi
 
# pull changes from dreamwidth
git checkout develop
git pull --ff-only dreamwidth develop
git checkout master
git pull --ff-only dreamwidth master
 
# push them to Github forks
git push origin develop
git push origin master
 
# restore our old position
git checkout "$OLDDWPOS"

Now, when you type 'dwu', this script will update dw-free. If you need to update dw-nonfree as well, then use this code:

#!/bin/bash
 
# make sure we are in the right directory;
cd $LJHOME
 
git fetch dreamwidth
 
# save our position
OLDDWPOS=$(git rev-parse --abbrev-ref HEAD)
if [[ "$OLDDWPOS" == "HEAD" ]]; then
  OLDDWPOS=$(git rev-parse HEAD)
fi
 
# pull changes from dreamwidth
git checkout develop
git pull --ff-only dreamwidth develop
git checkout master
git pull --ff-only dreamwidth master
 
# push them to Github forks
git push origin develop
git push origin master
 
# restore our old position
git checkout "$OLDDWPOS"
 
# change to dw-nonfree
cd $LJHOME/ext/dw-nonfree
 
git fetch dreamwidth
 
# save our position
OLDDWNFPOS=$(git rev-parse --abbrev-ref HEAD)
if [[ "$OLDDWNFPOS" == "HEAD" ]]; then
  OLDDWNFPOS=$(git rev-parse HEAD)
fi
 
# pull changes from dw-nonfree
git checkout develop
git pull --ff-only dreamwidth develop
git checkout master
git pull --ff-only dreamwidth master
 
# push them to Github forks
git push origin develop
git push origin master
 
# restore our old position
git checkout "$OLDDWNFPOS"

dwdb - Updating the database

Put this code in a file called ~/bin/dwdb and make it executable with chmod ugo+x ~/bin/dwdb:

#!/bin/bash
$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

This will update the database when you type 'dwdb'.

Cleaning up your directories

If you do any amount of work, you'll find that your directories get cluttered with .orig and .rej files everywhere. This script will clean those up:

git clean -f "*.rej" "*.orig"

You can run it from the command line, or put it in a file called ~/bin/tidy and make it executable with "chmod +x ~/bin/tidy". If you do that, you'll be able to just type "tidy" to clean house.