summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2013-03-27 13:11:25 +0100
committerDidier Raboud <odyx@debian.org>2013-03-27 13:11:25 +0100
commit4561d764ff2157cc39ccd16ff64f5206c6e814ed (patch)
tree387e0a6131de1ce060106a4f809b541d0d34bc0a
parenta4fb461029617860fb4dc5750f3a7f855fc9d382 (diff)
parentcef858bb4718cf76683a7381160e30ca46513c2f (diff)
downloadcolobot-4561d764ff2157cc39ccd16ff64f5206c6e814ed.tar.gz
colobot-4561d764ff2157cc39ccd16ff64f5206c6e814ed.tar.bz2
colobot-4561d764ff2157cc39ccd16ff64f5206c6e814ed.zip
New snapshot of dev branch (221-gcef858b)
-rw-r--r--CMakeLists.txt2
-rw-r--r--debian/changelog4
-rw-r--r--src/app/system.cpp10
-rw-r--r--src/app/system.h6
-rw-r--r--src/app/system_linux.cpp54
-rw-r--r--src/app/system_linux.h3
-rw-r--r--src/common/event.h1
-rw-r--r--src/common/profile.cpp6
-rw-r--r--src/common/restext.cpp1
-rw-r--r--src/object/brain.cpp93
-rw-r--r--src/object/brain.h1
-rw-r--r--src/object/robotmain.cpp4
-rw-r--r--src/ui/maindialog.cpp3
-rw-r--r--test/unit/common/CMakeLists.txt6
-rw-r--r--test/unit/common/profile_test.cpp1
-rw-r--r--test/unit/ui/CMakeLists.txt40
-rwxr-xr-xtools/git-submodule-status.sh90
17 files changed, 266 insertions, 59 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 628b700..f58b654 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,7 +55,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
set(CXX11_FLAGS "-std=gnu++11")
elseif (GCC_VERSION VERSION_GREATER 4.6 OR GCC_VERSION VERSION_EQUAL 4.6)
message(STATUS "Detected GCC version 4.6+")
- set(CXX11_FLAGS "-std=c++0x")
+ set(CXX11_FLAGS "-std=c++0x -Doverride=")
else()
message(FATAL_ERROR "${PROJECT_NAME} requires GCC 4.6 or greater.")
endif()
diff --git a/debian/changelog b/debian/changelog
index 43d1a4b..da44720 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,5 @@
-colobot (0.1.0~pre-alpha-git-dev~r211-gcd60d92-1~OdyX0) UNRELEASED; urgency=low
+colobot (0.1.0~pre-alpha-git-dev~r221-gcef858b-1~OdyX0) UNRELEASED; urgency=low
* Initial release. (Closes: #695829)
- -- Didier Raboud <odyx@debian.org> Mon, 25 Mar 2013 08:08:32 +0100
+ -- Didier Raboud <odyx@debian.org> Wed, 27 Mar 2013 13:11:24 +0100
diff --git a/src/app/system.cpp b/src/app/system.cpp
index 6927af8..743ed96 100644
--- a/src/app/system.cpp
+++ b/src/app/system.cpp
@@ -187,3 +187,13 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte
return result;
}
+
+std::string CSystemUtils::profileFileLocation()
+{
+ return std::string("colobot.ini");
+}
+
+std::string CSystemUtils::savegameDirectoryLocation()
+{
+ return std::string("savegame");
+}
diff --git a/src/app/system.h b/src/app/system.h
index 278a4bf..6ae05d6 100644
--- a/src/app/system.h
+++ b/src/app/system.h
@@ -129,6 +129,12 @@ public:
//! Returns the exact (in nanosecond units) difference between two timestamps
/** The difference is \a after - \a before. */
virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0;
+
+ //! Returns the profile (colobot.ini) file location
+ virtual std::string profileFileLocation();
+
+ //! Returns the savegame directory location
+ virtual std::string savegameDirectoryLocation();
};
//! Global function to get CSystemUtils instance
diff --git a/src/app/system_linux.cpp b/src/app/system_linux.cpp
index 619909d..01dd850 100644
--- a/src/app/system_linux.cpp
+++ b/src/app/system_linux.cpp
@@ -94,3 +94,57 @@ long long CSystemUtilsLinux::TimeStampExactDiff(SystemTimeStamp *before, SystemT
return (after->clockTime.tv_nsec - before->clockTime.tv_nsec) +
(after->clockTime.tv_sec - before->clockTime.tv_sec) * 1000000000ll;
}
+
+std::string CSystemUtilsLinux::profileFileLocation()
+{
+ std::string m_profileFile;
+
+ // Determine profileFile according to XDG Base Directory Specification
+ char* envXDG_CONFIG_HOME = getenv("XDG_CONFIG_HOME");
+ if (envXDG_CONFIG_HOME == NULL)
+ {
+ char *envHOME = getenv("HOME");
+ if (envHOME == NULL)
+ {
+ m_profileFile = "colobot.ini";
+ }
+ else
+ {
+ m_profileFile = std::string(envHOME) + "/.config/colobot.ini";
+ }
+ }
+ else
+ {
+ m_profileFile = std::string(envXDG_CONFIG_HOME) + "/colobot.ini";
+ }
+ GetLogger()->Trace("Profile configuration is %s\n", m_profileFile.c_str());
+
+ return m_profileFile;
+}
+
+std::string CSystemUtilsLinux::savegameDirectoryLocation()
+{
+ std::string m_savegameDir;
+
+ // Determine savegame dir according to XDG Base Directory Specification
+ char *envXDG_DATA_HOME = getenv("XDG_CONFIG_DATA");
+ if (envXDG_DATA_HOME == NULL)
+ {
+ char *envHOME = getenv("HOME");
+ if (envHOME == NULL)
+ {
+ m_savegameDir = "/tmp/colobot-savegame";
+ }
+ else
+ {
+ m_savegameDir = std::string(envHOME) + "/.local/share/colobot";
+ }
+ }
+ else
+ {
+ m_savegameDir = std::string(envXDG_DATA_HOME) + "/colobot";
+ }
+ GetLogger()->Trace("Saved game files are going to %s\n", m_savegameDir.c_str());
+
+ return m_savegameDir;
+}
diff --git a/src/app/system_linux.h b/src/app/system_linux.h
index ba0d8cd..a9a5a52 100644
--- a/src/app/system_linux.h
+++ b/src/app/system_linux.h
@@ -46,6 +46,9 @@ public:
virtual long long GetTimeStampExactResolution() override;
virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) override;
+ virtual std::string profileFileLocation() override;
+ virtual std::string savegameDirectoryLocation() override;
+
private:
bool m_zenityAvailable;
};
diff --git a/src/common/event.h b/src/common/event.h
index ad493e7..153b732 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -444,6 +444,7 @@ enum EventType
EVENT_OBJECT_TERRAFORM = 1201,
EVENT_OBJECT_FIRE = 1202,
EVENT_OBJECT_FIREANT = 1203,
+ EVENT_OBJECT_SPIDEREXPLO= 1204,
EVENT_OBJECT_RECOVER = 1220,
EVENT_OBJECT_BEGSHIELD = 1221,
EVENT_OBJECT_ENDSHIELD = 1222,
diff --git a/src/common/profile.cpp b/src/common/profile.cpp
index 2d11217..654648d 100644
--- a/src/common/profile.cpp
+++ b/src/common/profile.cpp
@@ -19,6 +19,8 @@
#include "common/logger.h"
+#include "app/system.h"
+
#include <utility>
#include <cstring>
#include <boost/property_tree/ini_parser.hpp>
@@ -41,7 +43,7 @@ CProfile::~CProfile()
{
try
{
- bp::ini_parser::write_ini("colobot.ini", m_propertyTree);
+ bp::ini_parser::write_ini(GetSystemUtils()->profileFileLocation(), m_propertyTree);
}
catch (std::exception & e)
{
@@ -55,7 +57,7 @@ bool CProfile::InitCurrentDirectory()
{
try
{
- bp::ini_parser::read_ini("colobot.ini", m_propertyTree);
+ bp::ini_parser::read_ini(GetSystemUtils()->profileFileLocation(), m_propertyTree);
}
catch (std::exception & e)
{
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index a6c33a3..729a883 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -352,6 +352,7 @@ void InitializeRestext()
stringsEvent[EVENT_OBJECT_SEARCH] = "Sniff (\\key action;)";
stringsEvent[EVENT_OBJECT_TERRAFORM] = "Thump (\\key action;)";
stringsEvent[EVENT_OBJECT_FIRE] = "Shoot (\\key action;)";
+ stringsEvent[EVENT_OBJECT_SPIDEREXPLO] = "Explode (\\key action;)";
stringsEvent[EVENT_OBJECT_RECOVER] = "Recycle (\\key action;)";
stringsEvent[EVENT_OBJECT_BEGSHIELD] = "Extend shield (\\key action;)";
stringsEvent[EVENT_OBJECT_ENDSHIELD] = "Withdraw shield (\\key action;)";
diff --git a/src/object/brain.cpp b/src/object/brain.cpp
index 53f77cf..2cd7170 100644
--- a/src/object/brain.cpp
+++ b/src/object/brain.cpp
@@ -602,6 +602,11 @@ bool CBrain::EventProcess(const Event &event)
//? err = StartTaskFireAnt();
}
+ if ( action == EVENT_OBJECT_SPIDEREXPLO && m_primaryTask == 0 )
+ {
+ err = StartTaskSpiderExplo();
+ }
+
if ( action == EVENT_OBJECT_PEN0 ) // up
{
err = StartTaskPen(false, m_object->GetTraceColor());
@@ -1077,6 +1082,24 @@ Error CBrain::StartTaskFire(float delay)
return err;
}
+// Explodes spider.
+
+Error CBrain::StartTaskSpiderExplo()
+{
+ Error err;
+
+ if ( m_primaryTask != 0 )
+ {
+ delete m_primaryTask; // stops the current task
+ m_primaryTask = 0;
+ }
+
+ m_primaryTask = new CTaskManager(m_object);
+ err = m_primaryTask->StartTaskSpiderExplo();
+ UpdateInterface();
+ return err;
+}
+
// Shoots to the ant.
Error CBrain::StartTaskFireAnt(Math::Vector impact)
@@ -1580,6 +1603,15 @@ bool CBrain::CreateInterface(bool bSelect)
//? pw->CreateButton(pos, dim, 41, EVENT_OBJECT_LIMIT);
}
+ if ( type == OBJECT_SPIDER )
+ {
+ pos.x = ox+sx*7.7f;
+ pos.y = oy+sy*0.5f;
+ pb = pw->CreateButton(pos, dim, 42, EVENT_OBJECT_SPIDEREXPLO);
+ pb->SetImmediat(true);
+ DefaultEnter(pw, EVENT_OBJECT_SPIDEREXPLO);
+ }
+
if ( type == OBJECT_MOBILEdr &&
m_object->GetManual() ) // scribbler in manual mode?
{
@@ -2136,37 +2168,38 @@ void CBrain::UpdateInterface()
bEnable = ( m_primaryTask == 0 && m_program == -1 );
- EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord));
- EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord);
- EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_UP, bEnable);
- EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable);
- EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable);
- EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable);
- EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable);
- EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_RESET, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord));
+ EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord);
+ EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_UP, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_SPIDEREXPLO, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_RESET, bEnable);
#if _TEEN
- EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable);
- EnableInterface(pw, EVENT_OBJECT_REC, bEnable);
- EnableInterface(pw, EVENT_OBJECT_STOP, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_REC, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_STOP, bEnable);
#endif
if ( type == OBJECT_HUMAN ) // builder?
diff --git a/src/object/brain.h b/src/object/brain.h
index 5656f62..eba8004 100644
--- a/src/object/brain.h
+++ b/src/object/brain.h
@@ -133,6 +133,7 @@ public:
Error StartTaskShield(TaskShieldMode mode);
Error StartTaskFire(float delay);
Error StartTaskFireAnt(Math::Vector impact);
+ Error StartTaskSpiderExplo();
Error StartTaskGunGoal(float dirV, float dirH);
Error StartTaskReset(Math::Vector goal, Math::Vector angle);
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 8dedb8c..f27438f 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -4398,6 +4398,10 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
obj->SetCheckToken(OpInt(line, "checkToken", 1));
obj->SetManual(OpInt(line, "manual", 0));
+ Math::Vector zoom = OpDir(line, "zoom");
+ if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f)
+ obj->SetZoom(0, zoom);
+
CMotion* motion = obj->GetMotion();
if (motion != nullptr)
{
diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp
index a3670de..ced4324 100644
--- a/src/ui/maindialog.cpp
+++ b/src/ui/maindialog.cpp
@@ -18,6 +18,7 @@
#include "ui/maindialog.h"
#include "app/app.h"
+#include "app/system.h"
#include "common/global.h"
#include "common/event.h"
@@ -173,7 +174,7 @@ CMainDialog::CMainDialog()
m_sceneDir = "levels";
- m_savegameDir = "savegame";
+ m_savegameDir = GetSystemUtils()->savegameDirectoryLocation();
m_publicDir = "program";
m_userDir = "user";
m_filesDir = "files";
diff --git a/test/unit/common/CMakeLists.txt b/test/unit/common/CMakeLists.txt
index a34c708..aebf17a 100644
--- a/test/unit/common/CMakeLists.txt
+++ b/test/unit/common/CMakeLists.txt
@@ -10,7 +10,7 @@ target_link_libraries(image_test ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${PNG_LIBRAR
file(COPY colobot.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-add_executable(profile_test ${SRC_DIR}/common/profile.cpp ${SRC_DIR}/common/logger.cpp profile_test.cpp)
-target_link_libraries(profile_test gtest ${Boost_LIBRARIES})
+# add_executable(profile_test ${SRC_DIR}/common/profile.cpp ${SRC_DIR}/common/logger.cpp profile_test.cpp)
+# target_link_libraries(profile_test gtest ${Boost_LIBRARIES})
-add_test(profile_test ./profile_test)
+# add_test(profile_test ./profile_test)
diff --git a/test/unit/common/profile_test.cpp b/test/unit/common/profile_test.cpp
index e7b64d5..dabcba6 100644
--- a/test/unit/common/profile_test.cpp
+++ b/test/unit/common/profile_test.cpp
@@ -1,5 +1,6 @@
#include "common/profile.h"
#include "common/logger.h"
+#include "app/system.h"
#include <iostream>
#include <string>
diff --git a/test/unit/ui/CMakeLists.txt b/test/unit/ui/CMakeLists.txt
index f5945dc..b0d9ce2 100644
--- a/test/unit/ui/CMakeLists.txt
+++ b/test/unit/ui/CMakeLists.txt
@@ -7,25 +7,25 @@ ${GTEST_INCLUDE_DIR}
${GMOCK_INCLUDE_DIR}
)
-add_executable(edit_test
-${SRC_DIR}/common/event.cpp
-${SRC_DIR}/common/logger.cpp
-${SRC_DIR}/common/misc.cpp
-${SRC_DIR}/common/profile.cpp
-${SRC_DIR}/common/iman.cpp
-${SRC_DIR}/common/stringutils.cpp
-${SRC_DIR}/graphics/engine/text.cpp
-${SRC_DIR}/ui/button.cpp
-${SRC_DIR}/ui/control.cpp
-${SRC_DIR}/ui/edit.cpp
-${SRC_DIR}/ui/scroll.cpp
-stubs/app_stub.cpp
-stubs/engine_stub.cpp
-stubs/particle_stub.cpp
-stubs/restext_stub.cpp
-stubs/robotmain_stub.cpp
-edit_test.cpp)
-target_link_libraries(edit_test gtest gmock ${SDL_LIBRARY} ${SDLTTF_LIBRARY} ${Boost_LIBRARIES})
-
+# add_executable(edit_test
+# ${SRC_DIR}/common/event.cpp
+# ${SRC_DIR}/common/logger.cpp
+# ${SRC_DIR}/common/misc.cpp
+# ${SRC_DIR}/common/profile.cpp
+# ${SRC_DIR}/common/iman.cpp
+# ${SRC_DIR}/common/stringutils.cpp
+# ${SRC_DIR}/graphics/engine/text.cpp
+# ${SRC_DIR}/ui/button.cpp
+# ${SRC_DIR}/ui/control.cpp
+# ${SRC_DIR}/ui/edit.cpp
+# ${SRC_DIR}/ui/scroll.cpp
+# stubs/app_stub.cpp
+# stubs/engine_stub.cpp
+# stubs/particle_stub.cpp
+# stubs/restext_stub.cpp
+# stubs/robotmain_stub.cpp
+# edit_test.cpp)
+# target_link_libraries(edit_test gtest gmock ${SDL_LIBRARY} ${SDLTTF_LIBRARY} ${Boost_LIBRARIES})
+#
# TODO: Edit test doesn't work, comment it away for now
# add_test(edit_test ./edit_test)
diff --git a/tools/git-submodule-status.sh b/tools/git-submodule-status.sh
new file mode 100755
index 0000000..3fb1fd5
--- /dev/null
+++ b/tools/git-submodule-status.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+# Tool for showing submodule history vs. associated and currently checked-out commits
+
+module="data"
+tail_count=5
+
+branch_name="$(git symbolic-ref HEAD 2>/dev/null)"
+
+if [ -z "$branch_name" ]; then
+ display_branch_name="(detached head)"
+else
+ display_branch_name="$branch_name"
+fi
+
+module_branch_name="$(cd $module && git symbolic-ref HEAD 2>/dev/null)"
+module_working_commit="$(cd $module && git rev-parse HEAD)"
+module_assoc_commit="$(git ls-tree $branch_name $module | awk '{print $3}' -)"
+
+if [ -z "$module_branch_name" ]; then
+ module_assoc_branches=($(cd $module && git branch --contains $module_assoc_commit | awk 'NR > 1 { print $1 }'))
+ if [ ${#module_assoc_branches[@]} -ne 1 ]; then
+ echo "$module module is in detached head, but referenced commit is in multiple branches"
+ echo "Sorry, can't help you"
+ exit 1
+ else
+ module_branch_name="${module_assoc_branches[0]}"
+ display_module_branch_name="(detached head, detected: $module_branch_name)"
+ fi
+else
+ display_module_branch_name="$module_branch_name"
+fi
+
+echo -e "Repository branch: \033[32m$display_branch_name\033[0m"
+echo -e "$module module branch: \033[32m$display_module_branch_name\033[0m"
+
+if [ -z "$(cd $module && git rev-list HEAD | grep $module_assoc_commit)" ]; then
+ echo -e "$module module associated commit: \033[33m$module_assoc_commit\033[0m is not in module history!"
+ echo "You probably have checked out different branch!"
+ exit 1
+fi
+
+echo ""
+
+i=0
+c=0
+h=1
+(cd $module && git log --format='%H%x01%h%x01%s%x00' $module_branch_name) | while read -d $'\0' info; do
+ commit=$(echo "$info" | cut -d$'\1' -f1)
+ short_commit=$(echo "$info" | cut -d$'\1' -f2)
+ message=$(echo "$info" | cut -d$'\1' -f3)
+
+ if [ $h -eq 1 ]; then
+ echo -n -e "\033[34m H \033[0m"
+ else
+ echo -n " "
+ fi
+
+ h=0
+
+ if [ "$commit" == "$module_working_commit" ]; then
+ echo -n -e "\033[31m * \033[0m"
+ c=$(($c+1))
+ else
+ echo -n " "
+ fi
+
+ if [ "$commit" == "$module_assoc_commit" ]; then
+ echo -n -e "\033[32m x \033[0m"
+ c=$(($c+1))
+ else
+ echo -n " "
+ fi
+
+ echo -e "\033[33m$short_commit\033[0m $message"
+
+ if [ $c -eq 2 ]; then
+ i=$(($i+1))
+ if [ $i -gt $tail_count ]; then
+ echo " ..."
+ break
+ fi
+ fi
+done
+
+echo ""
+echo -e "\033[34m H \033[0m -- $module_branch_name HEAD"
+echo -e "\033[31m * \033[0m -- checked-out commit"
+echo -e "\033[32m x \033[0m -- associated commit"
+