Version Control: Getting the Latest Version of the Source

Subversion is very easy to use and extremely powerfull. I recommend reading the FAQs and documentation at subversion's site if you have any questions on merging, commiting, or cleaning up the repository. You can get a number of very cute shell extensions and devtool add-ins at that same site. The rest of this document will tell you what you need to know to work on AW's site.

Checkout the Code

We have a public (GPL'd) repository located at American Whitewater's site under the directory /repos/wh2o/. This is a great place to start if you don't have developer access yet. There are two branches right now for website code, one is located under ./trunk the other under ./branches/testing. Testing is the latest (often buggy and incomplete) version, and probably recommended for new development. For fixes to the existing version of the site, use ./trunk. The difference is the way that the two are applied. ./trunk is immediately applied to allow the current site to function. Testing is constantly merged with trunk and also contains new development which runs under a variety of test environments before being committed to the working version of the site.

The command to checkout the code is (substitute the American Whitewater Website for host below):

$ svn co http://host/repos/wh2o/branches/test .

or

$ svn co 

in the virtual machine's /var/www directory. To switch to the current repository issue:

$ svn switch http://host/repos/wh2o/trunk

VM Update from Repository Instructions

Issue:

$ cd /var/www
$ svn update

You may have to reset your permissions:

$ chown apache.apache * -R

Updating the Code With Your Changes

Simply issue:

$ svn commit -m "Your update message here"

to update the repository with your changes. If you are adding new files or direcories make sure to issue:

$ svn add filename.ext
$ svn del filename.ext

for the files you add and delete.

Using Eclipse

Eclipse has a subversion plugin which is mostly is accessed by right clicking on the file and going to the team submenu. It works great with a samba share to the virtual machine and even keeps track of file deletes, has a visual merge, and will allow commits right from eclipse.

Join AW and support river stewardship nationwide!
7.4.3PHP Version547msRequest Duration6MBMemory UsageGET content/{url}Route
    • Booting (27.47ms)
    • Application (520ms)
    • 1 x Application (94.98%)
      520ms
      1 x Booting (5.02%)
      27.47ms
      14 templates were rendered
      • legacy.views.container-view (resources/views/legacy/views/container-view.blade.php)6blade
        Params
        0
        components
        1
        controls
        2
        id
        3
        class
        4
        title
        5
        formRenderService
      • legacy.views.container-view (resources/views/legacy/views/container-view.blade.php)6blade
        Params
        0
        components
        1
        controls
        2
        id
        3
        class
        4
        title
        5
        formRenderService
      • app::layout.gadget (resources/views/layout/gadget.blade.php)2blade
        Params
        0
        contents
        1
        formRenderService
      • layout.columnstyle.one (resources/views/layout/columnstyle/one.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout.columnstyle.componentstack (resources/views/layout/columnstyle/componentstack.blade.php)9blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        stack
        8
        component
      • layout.main (resources/views/layout/main.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout._headers (resources/views/layout/_headers.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout.header (resources/views/layout/header.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout._scripts (resources/views/layout/_scripts.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout.navigation (resources/views/layout/navigation.blade.php)8blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
      • includes.alert.membership (resources/views/includes/alert/membership.blade.php)17blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
        8
        searchurl
        9
        loginurl
        10
        logouturl
        11
        __currentLoopData
        12
        child
        13
        loop
        14
        otherchild
        15
        shouldNotifyUser
        16
        user
      • navigation.menu.static (resources/views/navigation/menu/static.blade.php)15blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
        8
        searchurl
        9
        loginurl
        10
        logouturl
        11
        __currentLoopData
        12
        child
        13
        loop
        14
        otherchild
      • includes.footer (resources/views/includes/footer.blade.php)8blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
      • layout.pagemap (resources/views/layout/pagemap.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      uri
      GET content/{url}
      middleware
      web
      controller
      App\Http\Controllers\Wh2oController@content
      namespace
      App\Http\Controllers
      where
      as
      generated::Os9R4mqMKRF5ktoI
      file
      app/Http/Controllers/Wh2oController.php:34-68
      4 statements were executed, 4 of which were duplicated, 0 unique10.15ms
      • select * from "articles" where ("id" = '-SecurityGadget-explain' or "short_name" = '-SecurityGadget-explain') and "articles"."deleted_at" is null and "articles"."is_final" = 'true' limit 1
        4.7ms/app/Legacy/Repositories/NewsInfo.php:61wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        • 1. -SecurityGadget-explain
        • 2. true
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:61
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where "short_name" = '-SecurityGadget-explain' limit 1
        4.69ms/app/Legacy/Repositories/NewsInfo.php:64wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:64
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where ("id" = '-SecurityGadget-explain' or "short_name" = '-SecurityGadget-explain') and "articles"."deleted_at" is null and "articles"."is_final" = 'true' limit 1
        420μs/app/Legacy/Repositories/NewsInfo.php:61wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        • 1. -SecurityGadget-explain
        • 2. true
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:61
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where "short_name" = '-SecurityGadget-explain' limit 1
        340μs/app/Legacy/Repositories/NewsInfo.php:64wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:64
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
          _token
          6x3rQEdKgSALZCtLGZrwZJRsOi2KzBOoyNMZFPBa
          page
          array:1 [ "count" => -1 ]
          PHPDEBUGBAR_STACK_DATA
          []
          path_info
          /content/Wiki/developer:checkout_the_latest_version
          status_code
          200
          
          status_text
          OK
          format
          html
          content_type
          text/html; charset=UTF-8
          request_query
          []
          
          request_request
          []
          
          request_headers
          0 of 0
          array:15 [ "priority" => array:1 [ 0 => "u=0, i" ] "accept-encoding" => array:1 [ 0 => "gzip, deflate, br, zstd" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "host" => array:1 [ 0 => "beta.americanwhitewater.org" ] ]
          request_server
          0 of 0
          array:42 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_PRIORITY" => "u=0, i" "HTTP_ACCEPT_ENCODING" => "gzip, deflate, br, zstd" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_HOST" => "beta.americanwhitewater.org" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "beta.americanwhitewater.org" "SERVER_PORT" => "443" "SERVER_ADDR" => "172.31.18.125" "REMOTE_PORT" => "33898" "REMOTE_ADDR" => "18.222.169.35" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => true "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/opt/americanwhitewater.org/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/content/Wiki/developer:checkout_the_latest_version" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "PHP_VALUE" => "post_max_size=20M" "SCRIPT_FILENAME" => "/opt/americanwhitewater.org/public/index.php" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1743848370.6515 "REQUEST_TIME" => 1743848370 ]
          request_cookies
          []
          
          response_headers
          0 of 0
          array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Sat, 05 Apr 2025 10:19:30 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IkpacDNmank1YVVRUWQ2N0JuWmVTNnc9PSIsInZhbHVlIjoiZ2RRcGwvWVEzc2x6RythRHViREhicXlPSWhtMzE5THlkSzhvQzB4Q1lTWVNTTjZsS3JtbTMvU3RXbXMrdldteHUwT3hRVkVMU1IzZUxpRnc0eFpNelBJWHV1N3FMRTZPbkN4UHQySnp1ZndLbDlQZitqZW1mZzQ1VTVzdnJ1K1MiLCJtYWMiOiI1MDhhMWIzZTY1ODdjZjEwNzIwNmFiOGUwOTdjOWQ0MjRmOGQwYTE5NmEzMWY5MDIwMGE2ZWM5MmY0MmM2ZDBkIn0%3D; expires=Sat, 05-Apr-2025 12:19:31 GMT; Max-Age=7200; path=/XSRF-TOKEN=eyJpdiI6IkpacDNmank1YVVRUWQ2N0JuWmVTNnc9PSIsInZhbHVlIjoiZ2RRcGwvWVEzc2x6RythRHViREhicXlPSWhtMzE5THlkSzhvQzB4Q1lTWVNTTjZsS3JtbTMvU3RXbXMrdldteHUwT3hRV" 1 => "DWa976077ab53ea1a0f12b663e732b73c0=eyJpdiI6ImYzZnpVSEdVUEZVY250ZCsxWDgvMkE9PSIsInZhbHVlIjoiZ0M3aGdIc0R6TU1rMkE2VW15M1pzRlFLcFEyYStZMTBFZVU0Q3BFTUw5VU5jb09qTGFGNmhUTmgvMm1WR1QyeSIsIm1hYyI6ImNkNGYwYzdhYjVkYmY3NzE2M2JhODYwMDMwZGZkYTM4OTM5NTM0ZDBiZmIyYjc3YWVhYjM4ZDU3YjBhNmEzZmQifQ%3D%3D; expires=Sat, 05-Apr-2025 10:18:30 GMT; Max-Age=0; path=/; httponlyDWa976077ab53ea1a0f12b663e732b73c0=eyJpdiI6ImYzZnpVSEdVUEZVY250ZCsxWDgvMkE9PSIsInZhbHVlIjoiZ0M3aGdIc0R6TU1rMkE2VW15M1pzRlFLcFEyYStZMTBFZVU0Q3BFTUw5VU5jb09qTGFGN" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IkpacDNmank1YVVRUWQ2N0JuWmVTNnc9PSIsInZhbHVlIjoiZ2RRcGwvWVEzc2x6RythRHViREhicXlPSWhtMzE5THlkSzhvQzB4Q1lTWVNTTjZsS3JtbTMvU3RXbXMrdldteHUwT3hRVkVMU1IzZUxpRnc0eFpNelBJWHV1N3FMRTZPbkN4UHQySnp1ZndLbDlQZitqZW1mZzQ1VTVzdnJ1K1MiLCJtYWMiOiI1MDhhMWIzZTY1ODdjZjEwNzIwNmFiOGUwOTdjOWQ0MjRmOGQwYTE5NmEzMWY5MDIwMGE2ZWM5MmY0MmM2ZDBkIn0%3D; expires=Sat, 05-Apr-2025 12:19:31 GMT; path=/XSRF-TOKEN=eyJpdiI6IkpacDNmank1YVVRUWQ2N0JuWmVTNnc9PSIsInZhbHVlIjoiZ2RRcGwvWVEzc2x6RythRHViREhicXlPSWhtMzE5THlkSzhvQzB4Q1lTWVNTTjZsS3JtbTMvU3RXbXMrdldteHUwT3hRV" 1 => "DWa976077ab53ea1a0f12b663e732b73c0=eyJpdiI6ImYzZnpVSEdVUEZVY250ZCsxWDgvMkE9PSIsInZhbHVlIjoiZ0M3aGdIc0R6TU1rMkE2VW15M1pzRlFLcFEyYStZMTBFZVU0Q3BFTUw5VU5jb09qTGFGNmhUTmgvMm1WR1QyeSIsIm1hYyI6ImNkNGYwYzdhYjVkYmY3NzE2M2JhODYwMDMwZGZkYTM4OTM5NTM0ZDBiZmIyYjc3YWVhYjM4ZDU3YjBhNmEzZmQifQ%3D%3D; expires=Sat, 05-Apr-2025 10:18:30 GMT; path=/; httponlyDWa976077ab53ea1a0f12b663e732b73c0=eyJpdiI6ImYzZnpVSEdVUEZVY250ZCsxWDgvMkE9PSIsInZhbHVlIjoiZ0M3aGdIc0R6TU1rMkE2VW15M1pzRlFLcFEyYStZMTBFZVU0Q3BFTUw5VU5jb09qTGFGN" ] ]
          session_attributes
          0 of 0
          array:3 [ "_token" => "6x3rQEdKgSALZCtLGZrwZJRsOi2KzBOoyNMZFPBa" "page" => array:1 [ "count" => -1 ] "PHPDEBUGBAR_STACK_DATA" => [] ]