update to use efl svn
[maemo-efl] / trunk / scripts / repository-functions.sh
index 358fe6e..cbb0f1d 100644 (file)
@@ -7,14 +7,14 @@
 # Note: helper-functions.sh and var-definitions.sh needed.
 ###########################################################
 
-function clone_repository() {
+git_clone_repository() {
     local repo
     repo=$1
     $__git_clone $repo.git >> $__output_file 2>&1
     return $?
 }
 
-function update_repository() {
+git_update_repository() {
     local repo
     repo=$1
 
@@ -29,7 +29,7 @@ function update_repository() {
     return 0
 }
 
-function clean_repository() {
+git_clean_repository() {
     local repo
     repo=$1
 
@@ -45,9 +45,53 @@ function clean_repository() {
     return 0
 }
 
-function get_sources() {
+svn_checkout_repository() {
+    local repo
+    local rev
+    repo=$1
+    rev=$2
+
+    if [ -n "$rev" ]; then
+        rev="-r $rev"
+    fi
+    $__svn_checkout $repo $rev >> $__output_file 2>&1
+    return $?
+}
+
+svn_update_repository() {
+    local repo
+    local rev
+    repo=$1
+    rev=$2
+
+    if [ -n "$rev" ]; then
+        rev="-r $rev"
+    fi
+
+    if [ ! -d $repo ]; then
+        error "  Trying to update invalid repository"
+    fi
+
+    cd $repo
+    $__svn_update $repo $rev>> $__output_file 2>&1 || return 1
+    cd - > /dev/null 2>&1
+
+    return 0
+}
+
+svn_latest_rev() {
+    __svn_latest_rev=`$__svn info $__svn_repo | $__grep "Last Changed Rev:" | cut -d" " -f4`
+}
+
+get_sources() {
     local modules
     local repo
+    local git
+    local pkg_version
+    local svn_rev
+    local rep_rev
+    local svn_rev_str
+
     modules=`echo $1|$__sed -e 's/:/ /g'`
     repo=$2
 
@@ -59,28 +103,107 @@ function get_sources() {
 
         cd $module
 
-        if [ -d $module/.git ]; then
-            if [ ! $__update_repositories -eq 0 ]; then
-                log_to_file "Updating existing repository at $PWD/$module"
+        pkg_version=`$__dpkg_parsechangelog | $__grep Version: | cut -d" " -f2`
+        svn_rev=`echo $pkg_version | $__sed -nr 's/.*svn([0-9]+).*/\1/p'`
+        git=`echo $repo|$__grep "git://"`
+
+        if [ -n "$svn_rev" ]; then
+                svn_rev_str="(rev: $svn_rev)"
+        else
+                svn_rev_str=
+        fi
+
+        if [ $__force_remove -eq 1 ]; then
+                if [ -d $module ]; then
+                    rm -rf $module
+                fi
+        fi
+
+        if [ -n "$git" ]; then
+            if [ -d $module/.git ]; then
+                if [ ! $__update_repositories -eq 0 ]; then
+                    log_to_file "Updating existing repository at $PWD/$module"
+
+                    msg_begin "  Updating $module repository"
+                    git_update_repository $module
+                    msg_end $?
+                else
+                    log_to_file "Skipping update of $module repository"
+                fi
+            elif [ -d $module ]; then
+                log_to_file "Removing invalid repository at $PWD/$module"
+                rm -rf $module
+            fi
 
-                msg_begin "  Updating $module repository"
-                update_repository $module
+            if [ ! -d $module ]; then
+                msg_begin "  Cloning $repo/$module.git"
+                git_clone_repository $repo/$module
                 msg_end $?
-            else
-                log_to_file "Skipping update of $module repository"
             fi
-        elif [ -d $module ]; then
-            log_to_file "Removing invalid repository at $PWD/$module"
-            rm -rf $module
-        fi
+        else
+            if [ -d $module/.svn ]; then
+                rep_rev=`$__svn info $module | $__sed -nr 's/Revision: ([0-9]*)/\1/p'`
+                if [ ! $__update_repositories -eq 0 -a "x$rep_rev" != "x$svn_rev" ]; then
+                    log_to_file "Updating existing repository at $PWD/$module"
+                    msg_begin "  Updating $module repository $svn_rev_str"
+                    svn_update_repository $module $svn_rev
+                    msg_end 0
+                    rep_rev=`$__svn info $module | $__sed -nr 's/Revision: ([0-9]*)/\1/p'`
+                    if [ "x$rep_rev" != "x$svn_rev" ]; then
+                        warn "Unable to update the repository to rev. $svn_rev"
+                    fi
+                else
+                    log_to_file "Skipping update of $module repository"
+                fi
+            elif [ -d $module ]; then
+                 log_to_file "Removing invalid repository at $PWD/$module"
+                 rm -rf $module
+            fi
+
+            if [ ! -d $module ]; then
+                 msg_begin "  Checking out $repo$module $svn_rev_str"
+                 svn_checkout_repository $repo$module $svn_rev
+                 if [ $? -ne 0 ]; then
+                      warn "Unable to checkput the repository to rev. $svn_rev"
+                 else
+                     msg_end 0
+                 fi
+            fi
 
-        if [ ! -d $module ]; then
-            msg_begin "  Cloning $repo/$module.git"
-            clone_repository $repo/$module
-            msg_end $?
         fi
 
         cd ..
     done
 }
 
+download_modules() {
+    # Download e17 modules
+    if [ ! -z $__lib_modules ];then
+        msg "Downloading e17 modules"
+        get_sources $__lib_modules $__svn_repo
+    fi
+
+    # Download python modules under proto/python/efl
+    if [ ! -z $__python_modules ];then
+        msg "Downloading python modules"
+        get_sources $__python_modules $__svn_repo$__e17_python_efl
+    fi
+
+    # Download python-efl-utils module$
+    if [ ! -z $__python_efl_utils_module ];then
+        get_sources $__python_efl_utils_module $__git_repo$__e17_python_efl_utils
+    fi
+
+    # Download python-dispatcher module
+    #get_sources $__python_dispatcher_module $__git_repo$__e17_python_dispatcher
+}
+
+clean_modules() {
+    msg_begin "Cleaning up modules directories"
+    for module in `echo $__all_modules|$__sed -e 's/:/ /g'`; do
+        if [ -d $module/$module ]; then
+            rm -rf $module/$module
+        fi
+    done
+    msg_end $?
+}